Hue介绍、功能与架构原理
HUE=Hadoop User Experience
Hue是一个开源的Apache Hadoop UI系统,由Cloudera Desktop演化而来,最后Cloudera公司将其贡献给Apache基金会的Hadoop社区,它是基于Python Web框架Django实现的。
通过使用Hue,可以在浏览器端的Web控制台上与Hadoop集群进行交互,来分析处理数据,例如操作HDFS上的数据,运行MapReduce Job,执行Hive的SQL语句,浏览HBase数据库等等。
Hue操作HDFS
通过 8889/hue 访问Hue端口
- 进入HDFS管理页面
新建文件、文件夹
上传、下载文件
查看文件内容
在线实时编辑文件内容
删除文件
修改文件权限
Hue操作hive
- 进入Hive面板
Sqoop介绍、工作机制
- sqoop介绍
sqoop是apache旗下一款“Hadoop和关系数据库服务器之间传送数据”的工具。
导入数据:MySQL,Oracle导入数据到Hadoop的HDFS、HIVE、HBASE等数据存储系统;
导出数据:从Hadoop的HDFS、HIVE中导出数据到关系数据库mysql等。
sqoop = sql+hadoop
- Sqoop工作机制
sqoop工作机制是将导入导出命令转换成mapreduce程序来实现,但是sqoop对mr的读入和读出进行了优化,用DBInputFormat DBOutPutformat来对inputformat和outputformat进行定制优化。
-sqoop安装、测试
sqoop list-databases --connect jdbc:mysql://localhost:3306/ --username root --password 123456
也可以这么写 \表示命令未完待续 下一行还有命令参数 否则遇到回车换行就会自动提交执行
sqoop list-databases \
--connect jdbc:mysql://localhost:3306/ \
--username root \
--password 123456\
增量数据,全量数据
- 在使用sqoop导入导出数据时,有两个经常需要用到的概念
- 增量数据:就是上次操作之后到现在的数据.
- 全量数据 :是指全部的数据,对于表来说就是表内所有的数据.
Sqoop全量导入HDFS
- 默认字段之间分隔符是','逗号
--connect jdbc:mysql://192.168.88.80:3306/userdb \ #指定连接数据库此时连接的是mysql的业务数据库#
--username root \
--password 123456 \
--target-dir /sqoop/result1 \
--table emp
--m 1
指定分隔符
#--fields-terminated-by 可以用于指定字段之间的分隔符
指定任务并行度(maptask个数)
当指定的maptask的个数>2时,一定要指定字段 --split-by 字段 且字段唯一(主键不重复),不然会报错
--connect jdbc:mysql://192.168.88.80:3306/userdb \
--username root \
--password 123456 \
--target-dir /sqoop/result3 \
--fields-terminated-by '\t' \
--split-by id \
--table emp --m 2
Sqoop全量导入Hive
Sqoop导入hive有三种方式
方式一:先用sqoop复制表结构到hive,然后执行数据导入工作
方式二:一步到位,直接导入数据(包括建表)
方式三:hive手动建表,sqoop导入数据(开发常用)方式一:先复制表结构、再导入数据
#创建表到hive table上去
sqoop create-hive-table \
--connect jdbc:mysql://192.168.88.80:3306/userdb \
--table emp_add \
--username root \
--password 123456 \
--hive-table test.emp_add_sp
#其中
--table emp_add为mysql中的数据库sqoopdb中的表
--hive-table emp_add_sp 为hive中新建的表名称。如不指定,将会在hive的default库下创建和MySQL同名表
--hive-table 中指定的库必须是hive里面已经有的库
导入表数据
``` sqoop import \
--connect jdbc:mysql://192.168.88.80:3306/userdb \
--username root \
--password 123456 \
--table emp_add \
--hive-table test.emp_add_sp \
--hive-import \
--m 1
- 方式二 直接导入数据
sqoop import \
--connect jdbc:mysql://192.168.88.80:3306/userdb \
--username root \
--password 123456 \
--table emp_conn \
--hive-import \
--m 1 \
--hive-database test
- 方式三(重要)
-sqoop 原生 API
所谓sqoop原生的方式指的是sqoop自带的参数完成的数据导入。
但是支持的hive存储格式,压缩方式比较少,用的少
-Hcatalog
Apache HCatalog是基于Apache Hadoop之上的数据表和存储管理服务。
包括:
- 提供一个共享的模式和数据类型的机制。
- 抽象出表,使用户不必关心他们的数据怎么存储,底层什么格式。
- 提供可操作的跨数据处理工具,如Pig,MapReduce,Streaming,和Hive。
--手动在hive中建一张表
create table test.emp_hive(id int,name string,deg string,salary int ,dept string)
row format delimited fields terminated by '\t'
stored as orc;
--注意,这里指定了表的文件存储格式为ORC。
--从存储效率来说,ORC格式胜于默认的textfile格式。
Hcatalog 导入数据
sqoop import \
--connect jdbc:mysql://192.168.88.80:3306/userdb \
--username root \
--password 123456 \
--table emp \
--fields-terminated-by '\t' \
--hcatalog-database test \
--hcatalog-table emp_hive \
-m 1
可以发现数据导入成功,并且底层是使用ORC格式存储的。
- sqoop原生API和 HCatalog区别
-
数据格式支持(这是实际中使用HCatalog的主要原因,否则还是原生的灵活一些)
Sqoop方式支持的数据格式较少;
HCatalog支持的数据格式多,包括RCFile, ORCFile, CSV, JSON和SequenceFile等格式。 -
数据覆盖
原生API是覆盖,Hcatalog 是追加
-
字段名匹配
Sqoop方式比较随意,不要求源表和目标表字段相同,抽取的方式是将字段按顺序插入,比如目标表有3个字段,源表有一个字段,它会将数据插入到Hive表的第一个字段,其余字段为NULL。HCatalog不同,源表和目标表字段名需要相同,字段个数可以不相等,将字段对应到相同字段名的字段上.
-
Sqoop 条件导入
-
where过滤行
功能类似于sql语法中where 可以实现过滤
在sqoop命令行中 加入 --where "字段=条件"
sqoop import \
--connect jdbc:mysql://192.168.88.80:3306/userdb \
--username root \
--password 123456 \
--where "city ='sec-bad'" \
--target-dir /sqoop/result4 \
--table emp_add --m 1
-
query过滤列(重要)
功能类似与sql查询语句,查询指定列和where条件
格式 --query ' select * from 表 where 条件 and $CONDITIONS '
注意:使用sql query语句来进行查找时,不能加参数 --table;
并且必须要添加 where 条件;
并且where条件后面必须带一个 $CONDITIONS 这个字符串;
并且这个sql语句==必须用 单引号 ,不能用双引号。
sqoop import \
--connect jdbc:mysql://192.168.88.80:3306/userdb \
--username root \
--password 123456 \
--target-dir /sqoop/result5 \
--query 'select * from emp WHERE 1=1 and $CONDITIONS' \
--fields-terminated-by '\001' \
--m 1
Sqoop 增量导入
- 方式一 append模式 (只能新增)
#执行如下的指令,实现增量的导入:
sqoop import \
--connect jdbc:mysql://192.168.88.80:3306/userdb \
--username root \
--password 123456 \
--table emp --m 1 \
--target-dir /sqoop/appendresult \
--incremental append \
--check-column id \
--last-value 1205
- 方式二 lastmodifield模式(可新增可更新)
要求:必须包含动态时间变化这一列,按照数据变化的时间进行判断
特点:既导入新增的数据也导入更新的数据
- 方式三 用户条件过滤实现 (开发常用)
通过where对字段进行过滤
指定分区目录
在实际开发当中 后端建表的时候一般会给要更新的表添加几个字段
creat_user create_time update_user updata_time创建者 创建时间 修改时间 修改时间
sqoop import \
--connect jdbc:mysql://192.168.88.80:3306/userdb \
--username root \
--password 123456 \
--query 'select id,age from a_import where 1=1 and \$CONDITIONS' \
--fields-terminated-by '\001' \
--hcatalog-database test \
--hcatalog-table a \
-m1
-- 需求1 全量采集数据
--query ' select * from 表1 where 1=1 and $CONDITIONS '
-- 需求2 增量采集20220501仅新增的数据
--query ' select * from 表1 where create_time between 20220501 00:00:00 and 20220501 23:59:59 and $CONDITIONS '
--需求3 增量采集20220501有更新
--query ' select * from 表1where create_time between 20220501 00:00:00 and 20220501 23:59:59 and $CONDITIONS or updatetime
between 20220501 00:00:00 and 20220501 23:59:59 '
Sqoop数据导出
-
sqoop导出操作最大的特点是,==目标表需要自己手动提前创建==。
-
查看hive表的数据存储结构 如果是orc等用Hcatalog导出
-- 全量数据导出
要注意清空目标表的数据,注意源表的分隔符
从HDFS导出数据到MySQL
sqoop export
--connect jdbc:mysql://192.168.88.80:3306/userdb
--username root
--password 123456
--table employee
--input-fields-terminated-by '\001'
--export-dir /sqoop/result2/从Hive导出数据到MySQL
sqoop export
--connect jdbc:mysql://192.168.88.80:3306/userdb
--username root
--password 123456
--table employee
--hcatalog-database test
--hcatalog-table emp_hive
--input-fields-terminated-by '\t'
--m 1
-- 增量数据导出
- updateonly:只增量导出更新的数据
执行更新导出:
sqoop export
--connect jdbc:mysql://192.168.88.80:3306/userdb
--username root
--password 123456
--table updateonly
--export-dir /sqoop/updateonly/updateonly_2.txt
--update-key id
--update-mode updateonly
- allowerinsert:既导出更新的数据,也导出新增的数据
执行更新导出
sqoop export
--connect jdbc:mysql://192.168.88.80:3306/userdb
--username root --password 123456
--table allowinsert
--export-dir /sqoop/updateonly/updateonly_2.txt
--update-key id
--update-mode allowinsert