Hive基础

Hive框架基础(三)
理性认知:


* Hive创建表的方式
  1、使用create命令创建一个新表
     例如:create table if not exists db_web_data.track_log(字段) 
     partitioned by (date string,hour string) 
     row format delimited fields terminated by '\t';
  2、把一张表的某些字段抽取出来,创建成一张新表
      例如:create table backup_track_log as select * from db_web_data.track_log;
     尖叫提示:会复制属性以及属性值到新的表中
  3、复制表结构
    例如:create table like_track_log like db_web_data.track_log;
    尖叫提示:不会复制属性值,只会复制表结构。


* Hive表导入数据方式
1、本地导入
load data local inpath 'local_path/file' into table 表名称 ;
2、HDFS导入
load data inpath 'hdfs_path/file' into table 表名称 ;
3、覆盖导入
load data local inpath 'path/file' overwrite into table 表名称 ;
load data inpath 'path/file' overwrite into table 表名称 ;
4、查询导入
create table track_log_bak as select * from db_web_data.track_log;
5、insert导入--常用
** 追加-append-默认方式
insert into table 表名 select * from track_log;
** 覆盖-overwrite-显示指定-使用频率高
insert overwrite table 表名 select * from track_log;


* Hive表导出数据方式
1、本地导出
例如:insert overwrite local directory "/home/admin/Desktop/1/2" row format delimited fields terminated by '\t' select * from db_hive_demo.emp ;
尖叫提示:会递归创建目录


2、HDFS导出
例如:insert overwrite diretory "path/" select * from staff;
3、Bash shell覆盖追加导出


例如:$ bin/hive -e "select * from staff;"  > /home/z/backup.log
4、Sqoop

 


* Hive数据清洗之思路
需求:实现按照省份和日期统计PV和UV
SELECT date, provinceId, count(url) pv, count(distinct guid) uv from track_log group by date, provinceId;
见代码


* Hive自动化处理日志
需求:网站产生的日志会按照某个日期分类的文件夹存储,定期分析该日志,产出结果
/opt/modules/weblog
-20170724(文件夹)
-2017072418(日志文件)
-2017072419
-20170725
-2017072518(日志文件)
-2017072619

* Hive中的几种排序
order by
全局排序,就一个Reduce
sort by
相当于对每一个Reduce内部的数据进行排序,不是全局排序。
distribute by
类似于MRpartition, 进行分区,一般要结合sort by使用。
cluster by
当distribute和sort字段相同时,就是cluster by
案例见:HQL案例.txt


* 业务案例梳理
需求:执行周期性任务,每天的晚上6点,执行自动化脚本,
加载昨天的日志文件到HDFS,
同时分析网站的多维数据(PV,UV按照省份和小时数进行分类查询)
最后将查询的结果,存储在一张临时表中(表字段:date,hour,provinceId,pv,uv)存储在HIVE中,并且
将该临时表中的所有数据,存储到MySQL中,以供第二天后台开发人员的调用,展示。
1、定时加载本地数据到HDFS,涉及到:auto.sh,crontab
2、清洗数据,打包jar,定时执行,
/user/hive/warehouse/db_web_data.db/track_log/date=20150828/hour=18
part-000001
/user/hive/warehouse/db_web_data.db/track_log/date=20150828/hour=19
part-000001
3、建表track_log,也不需要建立现成的分区,临时指定清洗好的数据作为仓库源
alter table track_log add partition(date='20150828',hour='18') location
"/user/hive/warehouse/db_web_data.db/track_log/date=20150828/hour=18";
alter table track_log add partition(date='20150828',hour='18') location
"/user/hive/warehouse/db_web_data.db/track_log/date=20150828/hour=19";
4、开始分析想要的数据,将结果存储在Hive的临时表中
创建临时表:
create table if not exists temp_track_log(date string, hour string, provinceId string, pv string, uv string) 
row format delimited fields terminated by '\t';
向临时表中插入数据:
insert overwrite table temp_track_log select date, hour, provinceId, count(url) pv, count(distinct guid) uv 
from track_log where date='20150828' group by date, hour, provinceId;
5、使用自定义的JAR,导入本地导出的文件到MYsql或者使用Sqoop。

 


* Sqoop
一、SQL-TO-HADOOP
二、配置:
1、开启Zookeeper
2、开启集群服务
3、配置文件:
** sqoop-env.sh
#export HADOOP_COMMON_HOME=
export HADOOP_COMMON_HOME=/opt/modules/cdh/hadoop-2.5.0-cdh5.3.6/

#Set path to where hadoop-*-core.jar is available
#export HADOOP_MAPRED_HOME=
export HADOOP_MAPRED_HOME=/opt/modules/cdh/hadoop-2.5.0-cdh5.3.6/

#set the path to where bin/hbase is available
#export HBASE_HOME=

#Set the path to where bin/hive is available
#export HIVE_HOME=
export HIVE_HOME=/opt/modules/cdh/hive-0.13.1-cdh5.3.6/

#Set the path for where zookeper config dir is
#export ZOOCFGDIR=
export ZOOCFGDIR=/opt/modules/cdh/zookeeper-3.4.5-cdh5.3.6/
export ZOOKEEPER_HOME=/opt/modules/cdh/zookeeper-3.4.5-cdh5.3.6/

4、拷贝jdbc驱动到sqoop的lib目录下
cp -a mysql-connector-java-5.1.27-bin.jar /opt/modules/cdh/sqoop-1.4.5-cdh5.3.6/lib/
5、启动sqoop
$ bin/sqoop help查看帮助
6、测试Sqoop是否能够连接成功
$ bin/sqoop list-databases --connect jdbc:mysql://hadoop-senior01.itguigu.com:3306/metastore 
--username root \
--password 123456
三、案例
使用sqoop将mysql中的数据导入到HDFS
Step1、确定Mysql服务的正常开启
Step2、在Mysql中创建一张表
mysql> create database company;
mysql> create table staff(
    id int(4) primary key not null auto_increment, 
    name varchar(255) not null, 
    sex varchar(255) not null);
mysql> insert into staff(name, sex) values('Thomas', 'Male');  
Step3、操作数据

RDBMS --> HDFS
使用Sqoop导入数据到HDFS
** 全部导入
    $ bin/sqoop import \
    --connect jdbc:mysql://hadoop-senior01.itguigu.com:3306/company \
    --username root \
    --password 123456 \
    --table staff \
    --target-dir /user/company \
    --delete-target-dir \
    --num-mappers 1 \
    --fields-terminated-by "\t"
** 查询导入
     $ bin/sqoop import 
     --connect jdbc:mysql://hadoop-senior01.itguigu.com:3306/company 
     --username root 
     --password 123456 
     --target-dir /user/company 
     --delete-target-dir 
     --num-mappers 1 
     --fields-terminated-by "\t" 
     --query 'select name,sex from staff where id >= 2 and $CONDITIONS;'
** 导入指定列
    $ bin/sqoop import 
     --connect jdbc:mysql://hadoop-senior01.itguigu.com:3306/company 
     --username root 
     --password 123456 
     --target-dir /user/company 
     --delete-target-dir 
     --num-mappers 1 
     --fields-terminated-by "\t"
     --columns id, sex
     --table staff
** 使用sqoop关键字筛选查询导入数据
    $ bin/sqoop import 
     --connect jdbc:mysql://hadoop-senior01.itguigu.com:3306/company 
     --username root 
     --password 123456 
     --target-dir /user/company 
     --delete-target-dir 
     --num-mappers 1 
     --fields-terminated-by "\t"
     --table staff
     --where "id=3"

RDBMS --> Hive
1、在Hive中创建表(不需要提前创建表,会自动创建)
    hive (company)> create table staff_hive(id int, name string, sex string) row format delimited fields terminated by '\t';
2、向Hive中导入数据
    $ bin/sqoop import 
    --connect jdbc:mysql://hadoop-senior01.itguigu.com:3306/company 
    --username root 
    --password 123456 
    --table staff 
    --num-mappers 1 
    --hive-import 
    --fields-terminated-by "\t" 
    --hive-overwrite 
    --hive-table company.staff_hive

Hive/HDFS --> RDBMS
1、在Mysql中创建一张表
$ bin/sqoop export 
--connect jdbc:mysql://hadoop-senior01.itguigu.com:3306/company 
--username root 
--password 123456
--table staff_mysql
--num-mappers 1 
--export-dir /user/hive/warehouse/company.db/staff_hive
--input-fields-terminated-by "\t" 

使用opt文件打包sqoop命令,然后执行
Step1、创建一个.opt文件
Step2、编写sqoop脚本
    export
    --connect
    jdbc:mysql://hadoop-senior01.itguigu.com:3306/company
    --username
    root
    --password
    123456
    --table
    staff_mysql
    --num-mappers
    1 
    --export-dir
    /user/hive/warehouse/company.db/staff_hive
    --input-fields-terminated-by
    "\t"
Step3、执行该脚本
    $ bin/sqoop --options-file opt/job_hffs2rdbms.opt 


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值