基于 Java 的简单 Spark 程序未完成
Simple Java based Spark program doesn't get Finished
我创建了一个非常简单的基于 "Word count" Java 的 Spark 程序,我 运行 在 YARN 上的集群 运行 中使用以下详细信息对其进行设置:
Hadoop 详细信息:
主节点(NN、SNN、RM)- 192.168.0.100
从节点 (DN, NM) - 192.168.0.105, 192.168.0.108
Spark 详细信息:
大师运行宁在:192.168.0.100
工作人员 运行 宁 : 192.168.0.105, 192.168.0.108
我已经创建了一个客户端机器,从那里提交 Spark 作业(客户端机器的 IP 地址是 --> 192.168.0.240)。
我用来将作业提交到 Spark 的以下命令:
spark-submit --class com.example.WordCountTask --master yarn /root/SparkCodeInJava/word-count/target/word-count-1.0-SNAPSHOT.jar /spark/input/inputText.txt /spark/output
但是程序根本没有终止,数据集非常小(10 个文本行),我希望它能在不花太多时间的情况下完成。
以下是我在提交作业后在控制台上看到的输出:
17/03/26 19:54:42 INFO yarn.Client: Application report for application_1490572543329_0001 (state: ACCEPTED)
17/03/26 19:54:43 INFO yarn.Client: Application report for application_1490572543329_0001 (state: ACCEPTED)
17/03/26 19:54:44 INFO yarn.Client: Application report for application_1490572543329_0001 (state: ACCEPTED)
17/03/26 19:54:45 INFO yarn.Client: Application report for application_1490572543329_0001 (state: ACCEPTED)
17/03/26 19:54:46 INFO yarn.Client: Application report for application_1490572543329_0001 (state: ACCEPTED)
这将永远持续下去。我不确定为什么没有完成。
这是我在该应用程序的 GUI 中看到的:
以下是输出:yarn logs -applicationId application_1490572543329_0002
17/03/26 20:24:09 WARN util.NativeCodeLoader: Unable to load native-hadoop libra
/tmp/logs/root/logs/application_1490572543329_0002 does not exist.
日志聚合尚未完成或未启用。
这是我的第一个 Spark 程序,我在 YARN 集群上配置 运行 它。
我使用 4 个虚拟机模拟分布式环境,Cent OS 运行ning 在 Virtualbox 上。
任何人都可以帮助我为什么这个程序不能正常运行?
更新:
我在 AWS 中设置了环境,并启动了两个配置良好的实例(8 个 Vcpu 和 32 GB RAM),但工作仍未完成。
(A) 纱线-site.xml
<property>
<name>yarn.nodemanager.auxservices</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>ip-XXX-YYYY-ZZZ-AAA.us-west-2.compute.internal:8032</value>
</property>
(B) 使用 spark-submit 提交作业后,我在控制台上显示的输出中看到:
17/03/29 15:51:35 INFO yarn.Client: Requesting a new application from cluster with **0 NodeManagers**
这与作业未完成有什么关系吗?
如果 "ACCEPTED" 状态在任何时候一直持续而没有任何 "FAILED" 状态,这意味着集群资源分配允许您提交作业,但目前没有可用资源来启动您的在容器中工作。状态机看起来类似于 hadoop tasks'
来自 ERROR
条消息,
YARN Application State: ACCEPTED, waiting for AM container to be
allocated
17/03/29 15:51:35 INFO yarn.Client: Requesting a new application from cluster with **0 NodeManagers**
YARN 无法为 Spark 应用程序分配容器,因为没有活动的 NodeManager(s)
可用。
节点管理员使用 属性 yarn.resourcemanager.resource-tracker.address
与 ResourceManager
进行通信。
默认情况下,此 属性 的值设置为
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>${yarn.resourcemanager.hostname}:8031</value>
</property>
引用 属性 yarn.resourcemanager.hostname
默认为 0.0.0.0
。除非正确定义 RM 主机名,否则节点管理器将无法与 RM 通信。
在 yarn-site.xml
中为所有节点修改此 属性
<property>
<name>yarn.resourcemanager.hostname</name>
<value>rm_hostname</value> <!-- Hostname of the node where Resource Manager is started -->
</property>
此外,属性 yarn.nodemanager.auxservices
必须是 yarn.nodemanager.aux-services
。
更改后重新启动服务。
我创建了一个非常简单的基于 "Word count" Java 的 Spark 程序,我 运行 在 YARN 上的集群 运行 中使用以下详细信息对其进行设置:
Hadoop 详细信息:
主节点(NN、SNN、RM)- 192.168.0.100
从节点 (DN, NM) - 192.168.0.105, 192.168.0.108
Spark 详细信息:
大师运行宁在:192.168.0.100
工作人员 运行 宁 : 192.168.0.105, 192.168.0.108
我已经创建了一个客户端机器,从那里提交 Spark 作业(客户端机器的 IP 地址是 --> 192.168.0.240)。
我用来将作业提交到 Spark 的以下命令:
spark-submit --class com.example.WordCountTask --master yarn /root/SparkCodeInJava/word-count/target/word-count-1.0-SNAPSHOT.jar /spark/input/inputText.txt /spark/output
但是程序根本没有终止,数据集非常小(10 个文本行),我希望它能在不花太多时间的情况下完成。
以下是我在提交作业后在控制台上看到的输出:
17/03/26 19:54:42 INFO yarn.Client: Application report for application_1490572543329_0001 (state: ACCEPTED)
17/03/26 19:54:43 INFO yarn.Client: Application report for application_1490572543329_0001 (state: ACCEPTED)
17/03/26 19:54:44 INFO yarn.Client: Application report for application_1490572543329_0001 (state: ACCEPTED)
17/03/26 19:54:45 INFO yarn.Client: Application report for application_1490572543329_0001 (state: ACCEPTED)
17/03/26 19:54:46 INFO yarn.Client: Application report for application_1490572543329_0001 (state: ACCEPTED)
这将永远持续下去。我不确定为什么没有完成。
这是我在该应用程序的 GUI 中看到的:
以下是输出:yarn logs -applicationId application_1490572543329_0002
17/03/26 20:24:09 WARN util.NativeCodeLoader: Unable to load native-hadoop libra
/tmp/logs/root/logs/application_1490572543329_0002 does not exist.
日志聚合尚未完成或未启用。
这是我的第一个 Spark 程序,我在 YARN 集群上配置 运行 它。
我使用 4 个虚拟机模拟分布式环境,Cent OS 运行ning 在 Virtualbox 上。
任何人都可以帮助我为什么这个程序不能正常运行?
更新:
我在 AWS 中设置了环境,并启动了两个配置良好的实例(8 个 Vcpu 和 32 GB RAM),但工作仍未完成。
(A) 纱线-site.xml
<property>
<name>yarn.nodemanager.auxservices</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>ip-XXX-YYYY-ZZZ-AAA.us-west-2.compute.internal:8032</value>
</property>
(B) 使用 spark-submit 提交作业后,我在控制台上显示的输出中看到:
17/03/29 15:51:35 INFO yarn.Client: Requesting a new application from cluster with **0 NodeManagers**
这与作业未完成有什么关系吗?
如果 "ACCEPTED" 状态在任何时候一直持续而没有任何 "FAILED" 状态,这意味着集群资源分配允许您提交作业,但目前没有可用资源来启动您的在容器中工作。状态机看起来类似于 hadoop tasks'
来自 ERROR
条消息,
YARN Application State: ACCEPTED, waiting for AM container to be allocated
17/03/29 15:51:35 INFO yarn.Client: Requesting a new application from cluster with **0 NodeManagers**
YARN 无法为 Spark 应用程序分配容器,因为没有活动的 NodeManager(s)
可用。
节点管理员使用 属性 yarn.resourcemanager.resource-tracker.address
与 ResourceManager
进行通信。
默认情况下,此 属性 的值设置为
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>${yarn.resourcemanager.hostname}:8031</value>
</property>
引用 属性 yarn.resourcemanager.hostname
默认为 0.0.0.0
。除非正确定义 RM 主机名,否则节点管理器将无法与 RM 通信。
在 yarn-site.xml
中为所有节点修改此 属性
<property>
<name>yarn.resourcemanager.hostname</name>
<value>rm_hostname</value> <!-- Hostname of the node where Resource Manager is started -->
</property>
此外,属性 yarn.nodemanager.auxservices
必须是 yarn.nodemanager.aux-services
。
更改后重新启动服务。