运行 火花 shell 纱线客户端错误
Running spark shell on yarn client error
我有 Spark 1.6.1 并且我已经设置
export HADOOP_CONF_DIR=/folder/location
现在如果我 运行 激发 shell:
$ ./spark-shell --master yarn --deploy-mode client
我收到此类错误(相关部分)
$ 16/09/18 15:49:18 INFO impl.TimelineClientImpl: Timeline service address: http://URL:PORT/ws/v1/timeline/
16/09/18 15:49:18 INFO client.RMProxy: Connecting to ResourceManager at URL/IP:PORT
16/09/18 15:49:18 INFO yarn.Client: Requesting a new application from cluster with 9 NodeManagers
16/09/18 15:49:19 INFO yarn.Client: Verifying our application has not requested more than the maximum memory capability of the cluster (14336 MB per container)
16/09/18 15:49:19 INFO yarn.Client: Will allocate AM container, with 896 MB memory including 384 MB overhead
16/09/18 15:49:19 INFO yarn.Client: Setting up container launch context for our AM
16/09/18 15:49:19 INFO yarn.Client: Setting up the launch environment for our AM container
16/09/18 15:49:19 INFO yarn.Client: Preparing resources for our AM container
16/09/18 15:49:19 WARN shortcircuit.DomainSocketFactory: The short-circuit local reads feature cannot be used because libhadoop cannot be loaded.
16/09/18 15:49:19 ERROR spark.SparkContext: Error initializing SparkContext.
org.apache.hadoop.security.AccessControlException: Permission denied: user=Menmosyne, access=WRITE, inode="/user/Mnemosyne/.sparkStaging/application_1464874056768_0040":hdfs:hdfs:drwxr-xr-x
at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.check(FSPermissionChecker.java:319)
at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.check(FSPermissionChecker.java:292)
at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkPermission(FSPermissionChecker.java:213)
然而当我运行只是
$ ./spark-shell
(未指定 master)我在屏幕上看到比平常多得多的配置(即它应该加载 hadoop 文件夹中的配置)。因此,如果我不指定 master 是 yarn,我的 spark 作业是否仍会提交到 yarn 集群?
spark 中的默认 master 是 local,这意味着该应用程序将 运行 在您的机器本地,而不是在集群中。
一般情况下,Yarn 应用程序(hive、mapreduce、spark 等)需要创建临时文件夹来存储部分数据and/or 当前进程配置。通常这个时间数据被写入 HDFS 用户家中(在你的情况下 /user/Mnemosyne)
您的问题是您的主文件夹是由用户 hdfs 创建的,而您的用户 Mnemosyne 没有写入权限它。
然后 spark 作业无法在启动应用程序所需的 HDFS 中创建时间结构。
我的建议是更改主文件夹的所有者(每个用户都应该是其主目录的所有者)并验证所有者对其主目录具有完全访问权限。
https://hadoop.apache.org/docs/r2.7.2/hadoop-project-dist/hadoop-common/FileSystemShell.html#chown
Mnemosyne 主目录的权限不正确。它归 hdfs 用户所有,而不是 Mnemosyne。
运行: hdfs dfs -chown -R Mnemosyne /user/Mnemosyne/
在此处查看 hdfs chown 文档:https://hadoop.apache.org/docs/r2.4.1/hadoop-project-dist/hadoop-common/FileSystemShell.html#chown
我刚刚用 spark 1.6.2 和 hadoop 2.6.0 集群解决了这个问题
1.将spark-assembly-1.6.2-hadoop2.6.0.jar从本地复制到hdfs
hdfs://Master:9000/spark/spark-assembly-1.6.2-hadoop2.6.0.jar
2.in spark-defaults.conf 添加参数
spark.yarn.jars hdfs://Master:9000/spark/spark-assembly-1.6.2-hadoop2.6.0.jar
然后运行 spark-shell --master yarn-client
一切正常
如果你想 运行 在 yarn 模式下启动 spark,请不要在本地模式下启动 spark 集群。
我有 Spark 1.6.1 并且我已经设置
export HADOOP_CONF_DIR=/folder/location
现在如果我 运行 激发 shell: $ ./spark-shell --master yarn --deploy-mode client 我收到此类错误(相关部分)
$ 16/09/18 15:49:18 INFO impl.TimelineClientImpl: Timeline service address: http://URL:PORT/ws/v1/timeline/
16/09/18 15:49:18 INFO client.RMProxy: Connecting to ResourceManager at URL/IP:PORT
16/09/18 15:49:18 INFO yarn.Client: Requesting a new application from cluster with 9 NodeManagers
16/09/18 15:49:19 INFO yarn.Client: Verifying our application has not requested more than the maximum memory capability of the cluster (14336 MB per container)
16/09/18 15:49:19 INFO yarn.Client: Will allocate AM container, with 896 MB memory including 384 MB overhead
16/09/18 15:49:19 INFO yarn.Client: Setting up container launch context for our AM
16/09/18 15:49:19 INFO yarn.Client: Setting up the launch environment for our AM container
16/09/18 15:49:19 INFO yarn.Client: Preparing resources for our AM container
16/09/18 15:49:19 WARN shortcircuit.DomainSocketFactory: The short-circuit local reads feature cannot be used because libhadoop cannot be loaded.
16/09/18 15:49:19 ERROR spark.SparkContext: Error initializing SparkContext.
org.apache.hadoop.security.AccessControlException: Permission denied: user=Menmosyne, access=WRITE, inode="/user/Mnemosyne/.sparkStaging/application_1464874056768_0040":hdfs:hdfs:drwxr-xr-x
at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.check(FSPermissionChecker.java:319)
at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.check(FSPermissionChecker.java:292)
at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkPermission(FSPermissionChecker.java:213)
然而当我运行只是
$ ./spark-shell
(未指定 master)我在屏幕上看到比平常多得多的配置(即它应该加载 hadoop 文件夹中的配置)。因此,如果我不指定 master 是 yarn,我的 spark 作业是否仍会提交到 yarn 集群?
spark 中的默认 master 是 local,这意味着该应用程序将 运行 在您的机器本地,而不是在集群中。
一般情况下,Yarn 应用程序(hive、mapreduce、spark 等)需要创建临时文件夹来存储部分数据and/or 当前进程配置。通常这个时间数据被写入 HDFS 用户家中(在你的情况下 /user/Mnemosyne)
您的问题是您的主文件夹是由用户 hdfs 创建的,而您的用户 Mnemosyne 没有写入权限它。
然后 spark 作业无法在启动应用程序所需的 HDFS 中创建时间结构。
我的建议是更改主文件夹的所有者(每个用户都应该是其主目录的所有者)并验证所有者对其主目录具有完全访问权限。
https://hadoop.apache.org/docs/r2.7.2/hadoop-project-dist/hadoop-common/FileSystemShell.html#chown
Mnemosyne 主目录的权限不正确。它归 hdfs 用户所有,而不是 Mnemosyne。
运行: hdfs dfs -chown -R Mnemosyne /user/Mnemosyne/
在此处查看 hdfs chown 文档:https://hadoop.apache.org/docs/r2.4.1/hadoop-project-dist/hadoop-common/FileSystemShell.html#chown
我刚刚用 spark 1.6.2 和 hadoop 2.6.0 集群解决了这个问题 1.将spark-assembly-1.6.2-hadoop2.6.0.jar从本地复制到hdfs hdfs://Master:9000/spark/spark-assembly-1.6.2-hadoop2.6.0.jar
2.in spark-defaults.conf 添加参数 spark.yarn.jars hdfs://Master:9000/spark/spark-assembly-1.6.2-hadoop2.6.0.jar
然后运行 spark-shell --master yarn-client 一切正常
如果你想 运行 在 yarn 模式下启动 spark,请不要在本地模式下启动 spark 集群。