热门推荐
Hudi学习五:Hudi与Hive集成
2024-10-31 16:18

Hudi学习五:Hudi与Hive集成

        将编译好的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结尾的表对应是读取优化查询,只查询最基本列数据,并不会看到被修改的数据。

    以上就是本篇文章【Hudi学习五:Hudi与Hive集成】的全部内容了,欢迎阅览 ! 文章地址:http://lianchengexpo.xrbh.cn/quote/7418.html 
     行业      资讯      企业新闻      行情      企业黄页      同类资讯      网站地图      返回首页 迅博思语资讯移动站 http://lianchengexpo.xrbh.cn/mobile/ , 查看更多