Apache spark 从spark插入覆盖正在更改配置单元表目录的权限和所有者
我有一个简单的要求,读取一个蜂巢拼花表,并在应用逻辑后覆盖到同一个表中 直线::Apache spark 从spark插入覆盖正在更改配置单元表目录的权限和所有者,apache-spark,pyspark,hive,apache-spark-sql,parquet,Apache Spark,Pyspark,Hive,Apache Spark Sql,Parquet,我有一个简单的要求,读取一个蜂巢拼花表,并在应用逻辑后覆盖到同一个表中 直线:: create external table test_table (id int,name string) stored as parquet location '/dev/test_db/test_table'; insert into test_scd values (1,'John'),(2,'Myna'),(3,'Rakesh'); pyspark from pyspark.sql import Spar
create external table test_table (id int,name string) stored as parquet location '/dev/test_db/test_table';
insert into test_scd values (1,'John'),(2,'Myna'),(3,'Rakesh');
pyspark
from pyspark.sql import SparkSession
spark = SparkSession.builder.enableHiveSupport().getOrCreate()
src_table=spark.sql("select * from test_db.test_table")
src_table.write.mode("overwrite").saveAsTable("test_db.temp_test_table")
tempDF=spark.sql("select * from test_db.temp_test_table")
spark.sql("insert overwrite table test_db.test_table select * from test_db.temp_test_table")
结果::
create external table test_table (id int,name string) stored as parquet location '/dev/test_db/test_table';
insert into test_scd values (1,'John'),(2,'Myna'),(3,'Rakesh');
它会按预期覆盖该表。但它会更改表目录的权限。
在本例中,它将“/dev/test\u db/test\u table”的权限从771更改为755。它还将组的所有者从hive:hive更改为batch\u user:hive
由于它更改了组级别的权限,因此我无法从hive2服务器写入此表,可能是beeline或hue或任何第三方工具,如Oracle ODI
有没有人面临过这样的问题。我很惊讶spark job为什么要更改目录权限。在大多数操作中,它不会更改权限,将其保留为配置单元:配置单元。但在覆盖的情况下,它是按照我的分析进行的。
我尝试过其他API,如“saveAsTable”和“insertInto”。在这两种情况下都是一样的。如果有人可以尝试代码并分享结果,那就太好了。有点紧急,如果有人能帮忙的话。你在用哨兵吗?如果是,您是否为写入数据的HDFS目录设置了正确的ACL?或者您是否启用了HDFS Sentry Sync?我们在CDH集群中使用Sentry。我可以与管理员检查HDFS同步是否启用。但是如果这个问题对你来说不存在,你能试着确认我吗。实际上,当创建表时,它具有771的访问权限,只有当我插入覆盖时,我才看到它将权限更改为755。其他操作(如插入或追加)工作正常,没有任何配置单元问题:配置单元所有权。