Hive使用与Sqoop安装与使用

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='19') 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

案例

1、使用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 --> MYSQL

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" 
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,236评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,867评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,715评论 0 340
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,899评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,895评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,733评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,085评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,722评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,025评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,696评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,816评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,447评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,057评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,254评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,204评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,561评论 2 343

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,577评论 18 399
  • Python 面向对象Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对...
    顺毛阅读 4,207评论 4 16
  • http://python.jobbole.com/85231/ 关于专业技能写完项目接着写写一名3年工作经验的J...
    燕京博士阅读 7,546评论 1 118
  • 你好,我是showhand,我是非常喜欢深圳这座城市的,喜欢到如果我要批评他都觉得过意不去。深圳是我见过最有活力的...
    showhand阅读 380评论 0 0
  • 自然的镜子 荷兰 十七世纪 荷兰的人们大多都是新教徒所以非常抵触巴洛克式的华丽风格。他们所爱的是简洁大方的写实主义...
    沈惜朝阅读 175评论 0 0