微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Apache Spark:“未能启动org.apache.spark.deploy.worker.Worker”或Master

我在Ubuntu14.04上运行的Openstack上创build了一个Spark集群,内存为8gb。 我创build了两个虚拟机,每个3gb(为父操作系统保留2 GB)。 此外,我从第一台虚拟机创build一个主人和两个工人,从第二台机器创build三个工人。

spark-env.sh文件具有基本设置

export SPARK_MASTER_IP=10.0.0.30 export SPARK_WORKER_INSTANCES=2 export SPARK_WORKER_MEMORY=1g export SPARK_WORKER_CORES=1

每当我用start-all.sh部署集群,我得到“无法启动org.apache.spark.deploy.worker.Worker”,有的时候“无法启动org.apache.spark.deploy.master.Master”。 当我看到日志文件来查找错误,我得到以下

Spark命令:/ usr / lib / jvm / java-7 -openjdk-amd64 / bin / java -cp> /home/ubuntu/spark-1.5.1/sbin /../ conf /:/ home / ubuntu / spark- > 1.5.1 /组件/目标/阶-2.10 /火花组件-1.5.1-> hadoop2.2.0.jar:/home/ubuntu/spark-1.5.1/lib_managed/jars/datanucleus-api-> jdo- 3.2.6.jar:/home/ubuntu/spark-1.5.1/lib_managed/jars/datanucleus-core-> 3.2.10.jar:/home/ubuntu/spark-1.5.1/lib_managed/jars/datanucleus-rdbms – > 3.2.9.jar -xms1g -Xmx1g -XX:MaxPermSize = 256m> org.apache.spark.deploy.master.Master –ip 10.0.0.30 –port 7077 –webui-> port 8080

尝试在群集上无头执行Netlogo时发生Java错误

使用Python在unix / linux中的单个目录中的文件数量限制

带有IIS7.5的ColdFusion 9群集

新起搏器中的crm_mon命令不起作用

如何在计算机群集上运行进程时访问标准输出

虽然我得到了失败的信息,但是主人或工人在几秒钟后仍然活着。

有人可以解释原因吗?

使用Linux虚拟服务器在MMO游戏中对区域进行负载平衡

运行数十个小时后,在远程集群上出现奇怪的“Stale file handle,errno = 116”

Windows群集 – SSH似乎失败

如何configuration“与心脏起搏器清除过期的失败计数”时间

使用qsub运行shellscript时出现'文件意外结束'和'错误导入函数定义'错误

Spark配置系统是一堆乱七八糟的环境变量,参数标志和Java属性文件。 我花了几个小时追踪相同的警告,并解开Spark初始化过程,这里是我发现的:

sbin/start-all.sh调用sbin/start-master.sh (然后sbin/start-slaves.sh )

sbin/start-master.sh调用sbin/spark-daemon.sh start org.apache.spark.deploy.master.Master ...

sbin/spark-daemon.sh start ...分叉一个调用bin/spark-class org.apache.spark.deploy.master.Master ... ,捕获生成的进程ID(PID),睡2秒,然后检查该pid的命令名是否是“java”

bin/spark-class是一个bash脚本,所以它以命令名“bash”开头,然后进入:

(重新)加载Spark环境,方法是使用bin/load-spark-env.sh

找到java可执行文件

找到合适的Spark jar

调用java ... org.apache.spark.launcher.Main ...来获取Spark部署所需的完整类路径

然后最后通过exec将控制交给java ... org.apache.spark.deploy.master.Master ,此时命令名变为“java”

如果从4.1到4.5的时间超过了2秒,那么在我以前(以及您的)体验中,在java以前从未运行过的新操作系统上,这些操作看起来几乎是不可避免的,尽管没有任何东西失败了。

奴隶们会因为同样的原因而抱怨,并且一直在等到主人真的可以使用,但是他们应该继续重试,直到他们成功地连接到主人。

我在EC2上运行了一个非常标准的Spark部署; 我用:

conf/spark-defaults.conf来设置spark.executor.memory并通过spark.{driver,executor}.extraClasspath添加一些自定义的jar spark.{driver,executor}.extraClasspath

conf/spark-env.sh来设置SPARK_WORKER_CORES=$(($(nproc) * 2))

conf/slaves列出我的奴隶

以下是我如何开始Spark部署,绕过一些{bin,sbin}/*.sh雷区/迷宫:

# on master,with SPARK_HOME and conf/slaves set appropriately mapfile -t ARGS < <(java -cp $SPARK_HOME/lib/spark-assembly-1.6.1-hadoop2.6.0.jar org.apache.spark.launcher.Main org.apache.spark.deploy.master.Master | tr '' 'n') # $ARGS Now contains the full call to start the master,which I daemonize with nohup SPARK_PUBLIC_DNS=0.0.0.0 nohup "${ARGS[@]}" >> $SPARK_HOME/master.log 2>&1 < /dev/null &

我仍然使用sbin/start-daemon.sh来启动从站,因为这比在ssh命令中调用nohup更简单:

MASTER=spark://$(hostname -i):7077 while read -r; do ssh -o StrictHostKeyChecking=no $REPLY "$SPARK_HOME/sbin/spark-daemon.sh start org.apache.spark.deploy.worker.Worker 1 $MASTER" & done <$SPARK_HOME/conf/slaves # this forks the ssh calls,so wait for them to exit before you logout

那里! 它假定我使用的是所有的认端口和东西,而且我并没有像把空格放在文件名中那样愚蠢的操作,但是我认为这种方式更加简单。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐