Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 从spark插入覆盖正在更改配置单元表目录的权限和所有者_Apache Spark_Pyspark_Hive_Apache Spark Sql_Parquet - Fatal编程技术网

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。其他操作(如插入或追加)工作正常,没有任何配置单元问题:配置单元所有权。