大数据学习 hive

继续之前MapReduce之后的大数据学习

 

 

################################

hive的安装:tar -zxcf hive.gz -C /app  安装hive;

改配置hive-defualt.xml

在hive/bin加jdbc jar

在hadoop加jline.jar包

启动hdfs和yarn

启动hive,hive/bin

 

 

hive> show databases; 查看数据库

           truncate table 表名;清空表;

            drop table 表名;删除表;

create table User_b(id int,name string)  //定义好数据库表的格式
    > row format delimited
    > fields terminated by ',';

hadoop fs -put unicom.dat /user/hive/warehouse/bigdata.db/user_b //将按照格式要求的文件写好放入hdfs中

 select id,name from user_b order by name;  //hive利用hdfs存储数据,启用MapReduce查询数据;

 

hive用服务方式启动:

开启服务:bin/hiveserver

开启客户端  ./beeline

beeline>!connect jdbc:hive2//localhost:10000

 

hive 细节:

hive> create external table ext_user_b(id int ,name string)
    > row format delimited fields terminated by '\t'  //分隔字段
    > stored as textfile   //存储文件为textfile类型
    > location '/class03';  //存储位置

DML上传数据:

hive>load data local inpath '/home/hadoop/aaa.dat' into(插入,overwrite为覆盖) table ext_user_b;

 

drop table 外部表;//删除外部表,实体文件不会被删除;

 

分区:

create table part_user_b(id int ,name string)

partitioned by (country string) //区分属性,要和表中定义的属性不同

row format delimited 

fields terminated by ',';

hive>load data local inpath '/home/hadoop/aaaChina.dat' into(插入,overwrite为覆盖) table part_user_b partition(country=‘China’);

hive>load local inpath '/home/hadoop/aaajapan.dat' into(插入,overwrite为覆盖) table part_user_b partition(country=‘Japan’);

select * from part_user_b where country='Japan'; //通过where,对不同分区进行查询

 增加分区

alter table part_user_b add(输出为drop)partition(country=‘america’)

show partition part_user_b; //查看分区

select * from part_user_b where country='China'; //查询分区

 

分桶:

用查询结果存入分桶表

创建表:

create table buck_user_b(id int ,string name)

clustered by(id)

into 4 buckets

row format delimited fields terminated by ',' 

 

设置:

hive>set hive.enforce.bucketing = ture;

hive>set mapred.reduce.tasks=10; //分桶数要与创建表的设置一样-- 设置reduce的数量                                                               

 

 

插入数据

insert into table bubk

select id,name from stedent cluster by (id) ; 

或者 select id ,name from sudent distribute by (Sno) sort by (Sno);

 

查询结果保存:

create table 新建表 as select * from 查询表;

insert overwrite(into)table 表名;


join查询:

select * from a inner join b on a.id=b.id; //将两张表中id相同的条目聚合成一张表

//a.id a.name b.id b.name 

    2        xx        2        yy

    3        xx        3        rr

    4        xx        4        dd

select * from a left join b on a.id=b.id; //以a表为基准,a和b连成一张表;

//a.id a.name b.id b.name 

    1        xe        NULL    NULL

    2        xx        2        yy

    3        xx        3        rr

    4        xx        4        dd

select * from a semi join b on a.id=b.id; //相当于inner,只返回左边一半

select * from a full join b on a.id=b.id; //返回全部

思考:
查询与“刘晨”在同一个系学习的学生
  hive> select s1.Sname from student s1 left semi join student s2 on s1.Sdept=s2.Sdept and s2.Sname='刘晨';

 

hive函数:

查看官方文档;

自定义函数简单例子:

在eclipse写好功能后打成jar包;

hive>add jar /home/hadoop/document/weide_udf_touppercase.jar;//加入jar包

hive>create temporary function toup as 'cn.unicom.bigdata.hive.func.ToUppercase';//将jia包和自定义类名关联

 

函数处理json数据:

内置函数 get_json_object(line,$.id) as newid,get_json_object(line,$.id) as newid;

多层的json数据需要用自定会函数处理;

 

transform:

可以用python脚本作为处理文件处理数据;

 

 

 

 

 

转载于:https://my.oschina.net/u/3971782/blog/2249457

你可能感兴趣的:(大数据学习 hive)