背景描述
从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 添加的,还有一些参数也能达到这个效果 如