gpt4 book ai didi

ubuntu - Apache Spark : "failed to launch org.apache.spark.deploy.worker.Worker" or Master

转载 作者:太空宇宙 更新时间:2023-11-03 16:44:05 28 4
gpt4 key购买 nike

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

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。掌握”。当我看到日志文件以查找错误时,我得到以下内容

Spark Command: /usr/lib/jvm/java-7-openjdk-amd64/bin/java -cp >/home/ubuntu/spark-1.5.1/sbin/../conf/:/home/ubuntu/spark->1.5.1/assembly/target/scala-2.10/spark-assembly-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

虽然我收到了失败消息,但 master 或 worker 几秒钟后就活了。

有人能解释一下原因吗?

最佳答案

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

  1. sbin/start-all.sh 调用 sbin/start-master.sh(然后是 sbin/start-slaves.sh)
  2. sbin/start-master.sh 调用sbin/spark-daemon.sh start org.apache.spark.deploy.master.Master ...
  3. sbin/spark-daemon.sh start ... fork 调用 bin/spark-class org.apache.spark.deploy.master.Master ...,捕获结果进程id(pid),休眠2秒,然后检查pid的命令名是否为“java”
  4. bin/spark-class 是一个 bash 脚本,因此它以命令名称“bash”开始,然后继续:
    1. (重新)通过采购 bin/load-spark-env.sh 加载 Spark 环境
    2. 找到 java 可执行文件
    3. 找到合适的 Spark jar
    4. 调用 java ... org.apache.spark.launcher.Main ... 以获得 Spark 部署所需的完整类路径
    5. 然后最终通过 exec 将控制权移交给 java ... org.apache.spark.deploy.master.Master,此时命令名称变为“ java ”

如果步骤 4.1 到 4.5 花费的时间超过 2 秒,根据我(和你)的经验,在以前从未运行过 java 的新操作系统上,这似乎是不可避免的,你将得到“启动失败”消息,尽管实际上并没有失败。

slaves 会出于同样的原因提示,并反复尝试直到 master 实际可用,但他们应该不断重试直到成功连接到 master。

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

  • conf/spark-defaults.conf 设置 spark.executor.memory 并通过 spark.{driver,executor}.extraClassPath< 添加一些自定义 jar/
  • 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 '\0' '\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

那里!它假设我正在使用所有默认端口和东西,并且我没有做像在文件名中放置空格这样的愚蠢行为,但我认为这样更干净。

关于ubuntu - Apache Spark : "failed to launch org.apache.spark.deploy.worker.Worker" or Master,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35144559/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com