spark无法保存在hadoop中(用户拒绝许可)

时间:2014-12-11 15:55:17

标签: scala apache-spark cloudera-cdh

我构建了一个spark应用程序来计算文件中的单词数。我在cloudera quickstart VM上运行应用程序,当我使用cloudera用户目录时,一切都很好,但是当我想在其他用户目录中写入或读取时,我有权从hadoop拒绝。我想知道如何在spark中更改hadoop用户。

package user1.item1

import user1.{Article}
import org.apache.spark.{SparkContext, SparkConf}
import org.apache.spark.SparkContext._
import scala.util.{Try, Success, Failure}

object WordCount {
  def main(args: Array[String]) {
    Context.User = 'espacechange'
    val filename = "hdfs://quickstart.cloudera:8020/user/user1/test/wiki_test/wikipedia.txt"
    val conf = new SparkConf().setAppName("word count")
    val sc = new SparkContext(conf)
    val wikipedia = sc.textFile(filename).map(Article.parseWikipediaArticle)
    val counts = wikipedia.flatMap(line => line.text.split(" ")).map(word => (word, 1)).reduceByKey(_ + _)

    counts.saveAsTextFile("hdfs://quickstart.cloudera:8020/user/user1/test/word_count")
  }
}

2 个答案:

答案 0 :(得分:8)

这取决于您的群集的身份验证。默认情况下,您可以设置以下环境变量:

$ export HADOOP_USER_NAME=hdfs

在提交火花作业之前尝试以上操作。

答案 1 :(得分:0)

您需要使用其他操作系统用户启动spark-submit脚本。

例如,使用以下命令将spark应用程序作为HDFS用户运行(并获取其权限):

sudo -u hdfs spark-submit ....