Apache spark 无法使用sparksql在配置单元中写入数据

Apache spark 无法使用sparksql在配置单元中写入数据,apache-spark,hadoop,hive,apache-spark-sql,Apache Spark,Hadoop,Hive,Apache Spark Sql,我正在使用spark Sql将数据从一个配置单元表加载到另一个配置单元表。我已经使用enableHiveSupport创建了sparksession,并且我能够使用sparksql在配置单元中创建表,但是当我使用sparksql将数据从一个配置单元表加载到另一个配置单元表时,我遇到了权限问题: 权限被拒绝:user=anonymous,access=WRITE,path=“hivepath” 我使用spark用户运行此程序,但无法理解为什么它将匿名用户替换为spark用户。有人能建议我如何解决这

我正在使用spark Sql将数据从一个配置单元表加载到另一个配置单元表。我已经使用enableHiveSupport创建了sparksession,并且我能够使用sparksql在配置单元中创建表,但是当我使用sparksql将数据从一个配置单元表加载到另一个配置单元表时,我遇到了权限问题:

权限被拒绝:user=anonymous,access=WRITE,path=“hivepath”

我使用spark用户运行此程序,但无法理解为什么它将匿名用户替换为spark用户。有人能建议我如何解决这个问题吗

我正在使用下面的代码

    sparksession.sql("insert overwrite into table dbname.tablename" select * from dbname.tablename").

如果您使用的是spark,则需要在spark上下文中设置用户名

  System.setProperty("HADOOP_USER_NAME","newUserName")
  val spark = SparkSession
    .builder()
    .appName("SparkSessionApp")
    .master("local[*]")
    .getOrCreate()

  println(spark.sparkContext.sparkUser)

如果您使用的是spark,则需要在spark上下文中设置用户名

  System.setProperty("HADOOP_USER_NAME","newUserName")
  val spark = SparkSession
    .builder()
    .appName("SparkSessionApp")
    .master("local[*]")
    .getOrCreate()

  println(spark.sparkContext.sparkUser)

要验证正在运行的用户, 运行以下命令:-

    sc.sparkUser
它将向您显示当前用户,然后 您可以尝试按照以下代码设置新用户

在scala中,您可以通过

    System.setProperty("HADOOP_USER_NAME","newUserName")

要验证正在运行的用户, 运行以下命令:-

    sc.sparkUser
它将向您显示当前用户,然后 您可以尝试按照以下代码设置新用户

在scala中,您可以通过

    System.setProperty("HADOOP_USER_NAME","newUserName")

第一件事是,您可以为同名用户尝试此功能

root@host:~# su - hdfs
hdfs@host:~$ hadoop fs -mkdir /user/anonymous
hdfs@host:~$ hadoop fs -chown anonymous /user/anonymous
大体上

导出
HADOOP\u USER\u NAME=youruser
,然后
spark submit
才能工作。 与spark一起提交如下配置

--conf“spark.warn.appMasterEnv.HADOOP\u USER\u NAME=${HADDOP\u USER\u NAME}”\

或者,您可以尝试使用
sudo-su用户名spark submit--class
your class

注意:此用户名设置应该是初始设置的一部分 理想情况下,如果集群设置完成,则无需执行上述所有操作 而且它看起来毫无生气


我个人不喜欢在代码中硬编码用户名,它应该来自spark工作之外。

首先,您可以为同名用户尝试此功能

root@host:~# su - hdfs
hdfs@host:~$ hadoop fs -mkdir /user/anonymous
hdfs@host:~$ hadoop fs -chown anonymous /user/anonymous
大体上

导出
HADOOP\u USER\u NAME=youruser
,然后
spark submit
才能工作。 与spark一起提交如下配置

--conf“spark.warn.appMasterEnv.HADOOP\u USER\u NAME=${HADDOP\u USER\u NAME}”\

或者,您可以尝试使用
sudo-su用户名spark submit--class
your class

注意:此用户名设置应该是初始设置的一部分 理想情况下,如果集群设置完成,则无需执行上述所有操作 而且它看起来毫无生气


我个人不喜欢在代码中硬编码用户名,它应该来自spark作业之外。

当我执行上述命令时,我将用户名作为spark,但在执行sparksession.sql时(“将覆盖插入表dbname.tablename”选择*from dbname.tablename”)。获取相同的匿名用户。您将需要粘贴所有代码,而不仅仅是一条命令。当我执行上述命令时,我将用户名获取为spark,但在执行sparksession.sql时(“将覆盖插入表dbname.tablename”选择*from dbname.tablename”)。获取相同的匿名用户。您需要粘贴所有代码,而不仅仅是一条命令尝试获取相同的问题sc.sparkUserTried的输出仍然获取相同的问题sc.SPARKUSER的输出为什么您的查询中有三个
?为什么有三个
在您的查询中?此答案有用吗?此答案有用吗?