spark 写文件 与hive写文件 出现 权限对比

在从Spark on Yarn迁移到K8s的过程中,发现Spark写入Hive表的数据权限与预期不符。问题源于Hive在插入时添加默认ACL导致与HDFS权限冲突。通过分析Hive和Spark的插入逻辑,了解到`hive.exec.compress.output`等参数影响写入行为。解决方案包括修改HDFS的umask参数或通过Spark API控制权限。
摘要由CSDN通过智能技术生成

背景描述

从spark on yarn 迁移到 k8s 的过程中,发现写到hive表中的数据的权限是不一致的。原来的权限是

 

 

现在的权限是

 

对比两次的提交不一致的地方,发现在提交的时候有加一个参数 

spark.sql.hive.convertInsertingPartitionedTable = true

加上之后会出现问题,改为false 不会出现权限的丢失。

问题复现

在了解到qtt-hive和社区的hive的修改的部分问题后,发现qtt-hive是通过修改部分代码来保证文件的权限不丢失。我们也在社区的基础上修改后,也能实现权限的不丢失。

代码主要如下

 

 

hive在执行的时候,有个问题会将default acl 给文件添加。但是hdfs permission 是不允许这么做的,所以应该是个bug 没人修。

修改后是可以通过继承父类的权限。达到和目前线上的权限一致。但是这种权限是正确的吗?

问题深入

上面提到了

spark.sql.hive.convertInsertingPartitionedTable = true

这个参数官网的解释是,对于通过hive sql 语法创建的表,如果是parquet ,orc 等格式,会使用内置的parquet writer 或者orc writer 来替换hive 去写入。

其实这个参数是3.0.0 添加的,还有一些参数也能达到这个效果 如 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值