Sqoop连接数据的两端,左边是我们比较常用的业务数据库,右边是大数据的组件,Sqoop作为顶级的数据同步中间件,可以实现数据的双向流动,后面会介绍在Docker中具体容器中实行Sqoop的配置、执行命令。
背景:第一步建立数据仓库,数据仓库建模的时候,未经过任何加工处理的原始的数据层称之为ODS,最原始的输入数据,对于业务的DB数据一般存储于MySQL,当我们采集完之后需要导入到Hive当中。如果准备高效地将MySQL数据同步到Hive当中,一般是批量地采集数据,然后load到hive当中,优点是实现起来很简单,但是随着业务规模发展,select一张表耗时较久,产生慢查询,而且Hive不支持更新、删除等原语。
CDC是指change、data、catch,Merge是指归类合并,增量地去捕获改变的数据并且把它们在某具体节点进行Merge操作,其实就是利用MySQL的Binlog采集技术加上离线处理binlog还原数据的一套解决方案。Binlog是MySQL二进制日志,MySQL在做insert、update、delete写操作会产生一条对应的操作日志,然后我们拿到实时更新的Binlog样本之后,能够知道这段时间MySQL发生的改变,利用框架去解读Binlog,解释成我们看得懂的语句,然后便可以把解析后的结果放在离线的业务系统中去。
其中由于Hive不支持delete操作,所以才merge操作中将update跟insert放入到表1,delete放入到表2,如果某条数据操作id在两个表中都出现,肯定这个数据被删除了,才决定merge操作
解决海量结构化日志数据统计的需求,Hive是基于hadoop的数据工具,可以将结构化的数据文件映射成开发人员容易理解的一张张的表,还提供SQL查询功能。
操作接口采用类似SQL的语法,提供了快速开发的能力;避免写原生的maperduce程序,减少了学习成本;执行延迟比较高,常用于数据分析,应用在数据量高但实时性不高的场景;提供现成的maperduce模板,支持用户自定义函数。
HQL表达能力有限,不能迭代算法,不善于数据挖掘,效率低,调优空间小。
#启动
./run.sh#进入hive-server命令终端
docker-compse exec hive-server bash#启动客户端交互程序client
hive#查看有哪些数据库
show databases;#操作数据库
use default;#查看表
show tables;#创建student表,拥有两个字段,行里面的列的数据字段分割用‘t’
create table student(id int,name string) ROW FORMAT DELIMITED FIELDS TERMINATED BY 't'
#去web验证验证数据库是否创建成功,localhost:50070,目录选择/user/hive/warehoouse#查看数据
select * from student;#加载本地数据到student表中,分隔符记得为'/t'
1 derrick
2 jessica
3 maomaos
4 latata#拷贝到docker容器里面,c6cddiefe223为容器的hash值id
docker cp ./ c6cdd1efe223:/opt #导入数据,本地路径需要加local
load data local inpath '/' into table student;
#启动namenode
docker-compose exec namenode bash#创建数据
5 jessicamaos
6 blue
查看hive存储路径,localhost:50070,namenode web管理界面,可以看到之前导入的在/user/hive/warehouse/student下
然后我们可以在hadoop的创建的namenode存储的直接上传到这个路径
hadoop fs - /user/hive/warehouse/student
也可以上传到根路径再导入,这时候去web端会发现会移动到/user/hive/warehouse/student,但是datanode是没有移动的
#创建
7 dududu
8 boombayah#上传到根目录
hadoop fs - /#然后启动hive
docker-compose exec hive-server bash
hive#导入数据
load data inpath 'hdfs://namenode:' into table student;
外部表是指存储在外部的表
#启动hive
docker-compose exec hive-server bash
hive#创建外部表,外部表一定要指定location,指定外部表存在hdfs的哪个地方,即使localtion还没创建也不会报错
create external table stu_external(id int,name string) row format delimited fields terminated by 't' location 'hdfs://namenode:8020/student';#先回到hdfs创建localtion目录
hadoop fs -mkdir /student#上传到student目录
hadoop fs - /student#回到hive中查看数据
select * from stu_external
如果drop table student,可以看到student这个表会没有了,里面的hdfs文件也会进行删除
本文发布于:2024-01-31 23:46:48,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170671600832270.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |