我构建了一个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")
}
}
答案 0 :(得分:8)
这取决于您的群集的身份验证。默认情况下,您可以设置以下环境变量:
$ export HADOOP_USER_NAME=hdfs
在提交火花作业之前尝试以上操作。
答案 1 :(得分:0)
您需要使用其他操作系统用户启动spark-submit脚本。
例如,使用以下命令将spark应用程序作为HDFS用户运行(并获取其权限):
sudo -u hdfs spark-submit ....