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

b4lqfgs4  于 2021-05-27  发布在  Hadoop
关注(0)|答案(3)|浏览(374)

我正在使用sparksql将数据从一个配置单元表加载到另一个配置单元表。我已经使用enablehivesupport创建了sparksession,并且可以使用sparksql在配置单元中创建表,但是当我使用sparksql将数据从一个配置单元表加载到另一个配置单元表时,我遇到了权限问题:
权限被拒绝:user=anonymous,access=write,path=“hivepath”。
我使用spark用户运行这个程序,但不明白为什么它使用匿名用户而不是spark。有人能建议我如何解决这个问题吗?
我正在使用下面的代码。

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

qv7cva1a1#

第一件事是,你可以尝试为同名用户

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

一般来说
出口 HADOOP_USER_NAME=youruser 之前 spark-submit 会有用的。连同spark一起提交如下配置。 --conf "spark.yarn.appMasterEnv.HADOOP_USER_NAME=${HADDOP_USER_NAME}" \ 或者你可以尝试使用 sudo -su username spark-submit --class 你的班级
看到这个了吗
注意:这个用户名设置应该是您初始集群设置的一部分,理想情况下,如果它完成了,那么就不需要执行上面所有的操作,而且它看起来毫无意义。
我个人不喜欢用户名硬编码的代码,它应该从外面的Spark工作。

sycxhyv7

sycxhyv72#

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

sc.sparkUser

它将向您显示当前用户,然后您可以尝试根据下面的代码设置新用户
在scala中,您可以通过

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

wljmcqd83#

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

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

  println(spark.sparkContext.sparkUser)

相关问题