Hudi 常见问题归档

举报
小兔子615 发表于 2021/12/31 17:13:04 2021/12/31
【摘要】 ·  mor表upsert, 第一次纯新增数据第二次纯更新数据,两次消费速率基本一致。     用例设计有问题,数据量过小体现不出差异,正常mor表在跟新时速度快于cow表。·  控制spark streaming每次消费数据量    设置参数conf.set("spark.streaming.kafka.maxRatePerPartition",maxRatePerPartition);c...

·  mor表upsert, 第一次纯新增数据第二次纯更新数据,两次消费速率基本一致。 

    用例设计有问题,数据量过小体现不出差异,正常mor表在跟新时速度快于cow表。


·  控制spark streaming每次消费数据量

    设置参数

conf.set("spark.streaming.kafka.maxRatePerPartition",maxRatePerPartition);
conf.set("spark.streaming.backpressure.enabled","true");

     maxRatePerPartition*interval*partitionNumbers

     partitionNumbers是kafka topic的分区数
     maxRatePerPartition是每个分区消费的最大数据量
     interval是每个批次的间隔时间

    deltastreamer中可以使用hoodie.deltastreamer.kafka.source.maxEvents参数来控制

·  消费kafka写入hudi每个批次写入耗时越来越长
     当采用非分区表或者分区不合理导致每次更新都会影响所有分区时,因为数据量越来越大,写入时索引耗时增长明显

·  放弃原地转表,使用其他解决方案将历史表导入hudi
     当前Hudi原地转表问题较多,因此我们建议使用datasource将历史存量表直接转写成Hudi表方便后续操作。

·  Spark-sql创建hudi表权限问题
     当前spark-sql创建Hudi表,除临时目录以外其他目录属主都是实际登录用户而不再是spark2x

·  同一环境同一客户端不同人登录查询同一张表结果不同 
      使用Hive查询Hudi表时,必须显式指定inputformat
      set hive.input.format=org.apache.hudi.hadoop.hive.HoodieCombineHiveInputFormat;

·  Hudi同步非分区表失败
      Hudi同步非分区表同样要指定分区列和分区执行类
      run_hive_sync_tool.sh --partitioned-by '' --base-path hdfs://hacluster/tmp/huditest/tb_test_mor_par_hive_sync --table tb_test_mor_par_hive_sync --partition-value-extractor org.apache.hudi.hive.MultiPartKeysValueExtractor --support-timestamp

·  先用spark shell批量写入,然用deltastreamer流式写入,报checkpoint失败
    由于初始化使用spark shell写入Hudi时不会保存流式写入的checkpoint参数,因此需在首次使用deltastreamer时初始化手动通过 --checkpoint topic,0:0,1:0 手动指定checkpoint, 即指定一个topic和其每个partition的offset


·  deltastreamer入湖long值字段不能为空
     row.getLong(9) 会报空指针可以使用row.get()先判空


·  6517升级812后sql写mor表,没有读取权限
    使用HMS同步ro rt表时没有刷新用户表权限,这是一个bug,已经在8122补丁版本和813版本修复

·  实时入湖后查询COW和MOR表数据不一致 
      由于默认payload处理MOR表和COW表的逻辑不一致导致,具体原理可以参考3ms.huawei.com/km/groups/3328957/blogs/details/10943003?l=zh-cn


·  使用spark环境变量运行Hudi入湖程序报错
    目前使用Hudi的话需要source Hudi客户端的环境变量,而不能使用Spark的

·  使用datasource初始化后deltastreamer实时入湖未同步
      根本原因是初始化时分区列为空,数据都写到default分区中,deltastreamer入湖到新的分区且未同步,出现这种问题首先看下hdfs上文件分区是否都正确。

·  CDL同步发现Hudi三张表只有rt表更新,主表未更新
      同步Hive表时主表参数有误,此为bug,已在813版本中修复


·  需要从schema中获取主键分区列等属性,
      建议读取hoodie.properties文件,也可以构建hive client通过API来读取table属性,也可以val str = spark.sql("desc formatted tb_test_mor_par").select("data_type").where("col_name='Storage Properties'").collectAsList().get(0).getString(0)

·  Schema演进使用add column after报错 only suport datasource V2 
      启动spark-sql时需要加上参数 --conf spark.inject.hoodie.ddl.parser=true 
      启动后 set hoodie.schema.evolution.enable=true

·  流程IT使用spark-sql写cow表timeline校验错
      并发spark-sql写需要提前set并发参数,且不支持insert overwrite的并发

·  cdl测试字段中包含空格报错-- 
      不支持
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。