?下面是博主运行成功步骤
创建数据库
create database 数据库名;
?使用数据库
use 数据库名;?
分桶就是MapReduce中的分区
1.开启 Hive 的分桶功能
set hive.enforce.bucketing=true;
2.设置 Reduce 个数
set mapreduce.job.reduces=n;
n:根据题目要求设置个数
?3.创建分桶表
create table 表名?(c_id string,c_name string,t_id string) clustered by(c_id) into n?buckets row format delimited fields terminated by '\t';
//创建一个表以某个字段分为n桶,表的内容以\t分割
?桶表的数据加载,由于通标的数据加载通过hdfs dfs -put文件或者通过load data均不好使,只 能通过insert overwrite 创建普通表,并通过insert overwriter的方式将普通表的数据通过查询的方式加载到桶表当中 去.
4.创建普通表
create table 表名_re?(c_id string,c_name string,t_id string) row format delimited fields terminated by '\t';
?5.普通表中加载数据
方式一: load data local inpath '本地路径(Linux)' into table?表名_re;
方式二: load data inpath ' 集群路径(hdfs)' into table?表名_re;
博主用的第二种方式
6.通过insert overwrite给桶表中加载数据
insert overwrite table 表名 select * from?表名_re cluster by(c_id);
//将查询普通表的结果加载到分桶表
?
?7.在集群上查看结果
在这里我们看一看见1 2 3的size都是45B.证明分区成功
?/use/hive/warehouse数据仓库默认存放位置
?如出现以下错误:
?或者size为0
方法一:
????????暴力解法:
? ? ? ? ? ? ? ? 删除数据库,从创建数据库开始在执行一边
????????drop database 数据库名?cascade;
//强制删除数据库,包含数据库下面的表一起删除
????????drop database 数据库名;
//删除一个空数据库,如果数据库下面有数据表,那么就会报错
方法二:
? ? ? ? 删除普通表,重复4-6操作
drop table 表名;
//删除外部表,数据仓库还会显示原表,删除内部表删除所有
如果有其他错误或者解法欢迎评论
|