将编译好的Hudi目录(hudi-0.9.0/packaging/hudi-hadoop-mr-bundle/target/)下的JAR包:hudi-hadoop-mr-bundle-0.9.0.jar,放入hive安装文件的lib目录下
说明:我编译的hudi-0.9.0版本,里面的hive版本是2.3.1没有做修改
可以后台启动这两服务
1)、数据格式
2)、将数据写入hudi表
3)、查看HDFS上已经有数据写入了
1)、创建Hive分区外部表
(Hudi表是分区表,分区字段是partition_path,格式为yyyy-MM-dd,数据格式HoodieParquetInputFormat)
2)、手动添加分区
1)查询报错
这是你创建的Hive表字段类型和Hudi表的类型不匹配导致
2)、正确查询结果
1)、错误一
解决:代码添加加载hive驱动,pom添加(对应Hive的版本)依赖
2)、错误二
解决:pom文件添加mysql依赖
1)、Hdfs里面可以查看到数据
2)、Hive里面可以通过SQL形式查询数据
3)、查询hive表结构
可以看到hive里的建表会采用HoodieParquetInputFormat 格式支持快照查询和增量查询
修改uid>0 and uid <20 的这20条数据的fullname值
1)、修改前的数据
2)、修改数据代码
3)、修改后结果
hive查询的是最新的修改数据
可以看到HDFS上数据成功写入到另一个文件,且文件大小都相同,所以Copy on Write表其实是和旧数据进行合并后再次写入全量数据。这也验证了官方所说的Copy on Write表写入数据延迟高,wa写入大。所以如果这张表是经常需要修改和写入的建议采纳哦使用Merge on Read表。
1)、快照查询
2)、增量查询
(1)查询前40条数据,分别包含修改的20条数据和未修改的20条数据
可以看到进行修改的数据和原来的数据commit时间戳是不一样的
(2)时间戳增量查询
指定查询类型为增量查询,并且传入时间戳,那么spark会查询时间戳以后的数据。
1)、hdfs数据
2)、查询hive数据
出现两张表 hudi_mor_hive_ro,hudi_mor_hive_rt
3)、查询hive表结构
rt结尾的表支持快照查询和增量查询,并且rt表将会查询表基本列数据和增量日志数据的合并视图,立马可以查询到修改后的数据。而ro表则只查询表中基本列数据并不会去查询增量日志里的数据。rt表采用HoodieParquetRealtimeInputFormat格式进行存储,ro表采用HoodieParquetInputFormat格式进行存储
修改uid>0 and uid <20 的这20条数据的fullname值
1)、修改数据代码
2)、修改后
(1)HDFS文件对比,修改的数据都写入到log文件里面了,所以Merge on Read发生修改操作,是将变化数据写入行式增量日志
(2)hive表对比
hudi_mor_hive_ro表数据没有变化,其实or结尾的表对应是读取优化查询,只查询最基本列数据,并不会看到被修改的数据。
本文地址:http://lianchengexpo.xrbh.cn/quote/7418.html 迅博思语资讯 http://lianchengexpo.xrbh.cn/ , 查看更多