Apache Spark:"failed to launch org.apache.spark.deploy.worker.Worker" 或大师
Apache Spark: "failed to launch org.apache.spark.deploy.worker.Worker" or Master
我在 Ubuntu14.04 的 Openstack 运行 上用 8gb 的内存创建了一个 Spark 集群。我创建了两个虚拟机,每个虚拟机 3gb(为父 OS 保留 2gb)。此外,我从第一台虚拟机创建了一个 master 和 2 个 worker,从第二个虚拟机创建了 3 个 worker。
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 部署集群时,我都会得到 "failed to launch org.apache.spark.deploy.worker.Worker",有时会得到 "failed to launch org.apache.spark.deploy.master.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 初始化过程,这是我发现的:
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" 开始,然后继续:
- (重新)通过采购
bin/load-spark-env.sh
加载 Spark 环境
- 找到
java
可执行文件
- 找到正确的 Spark jar
- 调用
java ... org.apache.spark.launcher.Main ...
获取 Spark 部署所需的完整类路径
- 然后最终通过
exec
将控制权移交给 java ... org.apache.spark.deploy.master.Master
,此时命令名称变为 "java"
如果步骤 4.1 到 4.5 花费的时间超过 2 秒,根据我(和你)的经验,这在 OS 以前从未有过 java
的新 运行 上几乎是不可避免的],你会收到 "failed to launch" 消息,尽管实际上并没有失败。
slaves 会因为同样的原因抱怨,并在 master 实际可用之前反复尝试,但他们应该不断重试,直到成功连接到 master。
我在 EC2 上有一个非常标准的 Spark 部署 运行ning;我使用:
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
minefield/maze:
# 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 '[=10=]' '\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
到了!它假设我正在使用所有默认端口和其他东西,并且我没有做像在文件名中放置空格这样的愚蠢行为,但我认为这样更干净。
我有同样的问题,运行ning spark/sbin/start-slave.sh 在主节点上。
hadoop@master:/opt/spark$ sudo ./sbin/start-slave.sh --master spark://master:7077
starting org.apache.spark.deploy.worker.Worker, logging to /opt/spark/logs/spark-root-org.apache.spark.deploy.worker.Worker-1-master.out
failed to launch: nice -n 0 /opt/spark/bin/spark-class org.apache.spark.deploy.worker.Worker --webui-port 8081 --master spark://master:7077
Options:
-c CORES, --cores CORES Number of cores to use
-m MEM, --memory MEM Amount of memory to use (e.g. 1000M, 2G)
-d DIR, --work-dir DIR Directory to run apps in (default: SPARK_HOME/work)
-i HOST, --ip IP Hostname to listen on (deprecated, please use --host or -h)
-h HOST, --host HOST Hostname to listen on
-p PORT, --port PORT Port to listen on (default: random)
--webui-port PORT Port for web UI (default: 8081)
--properties-file FILE Path to a custom Spark properties file.
Default is conf/spark-defaults.conf.
full log in /opt/spark/logs/spark-root-org.apache.spark.deploy.worker.Worker-1-master.out
我发现了我的错,我不应该使用 --master 关键字而只是 运行 命令
hadoop@master:/opt/spark$ sudo ./sbin/start-slave.sh spark://master:7077
按照本教程的步骤操作:
https://phoenixnap.com/kb/install-spark-on-ubuntu
提示:确保在之前安装所有依赖项:
sudo apt install scala git -y
我在 Ubuntu14.04 的 Openstack 运行 上用 8gb 的内存创建了一个 Spark 集群。我创建了两个虚拟机,每个虚拟机 3gb(为父 OS 保留 2gb)。此外,我从第一台虚拟机创建了一个 master 和 2 个 worker,从第二个虚拟机创建了 3 个 worker。
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 部署集群时,我都会得到 "failed to launch org.apache.spark.deploy.worker.Worker",有时会得到 "failed to launch org.apache.spark.deploy.master.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 初始化过程,这是我发现的:
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" 开始,然后继续:- (重新)通过采购
bin/load-spark-env.sh
加载 Spark 环境
- 找到
java
可执行文件 - 找到正确的 Spark jar
- 调用
java ... org.apache.spark.launcher.Main ...
获取 Spark 部署所需的完整类路径 - 然后最终通过
exec
将控制权移交给java ... org.apache.spark.deploy.master.Master
,此时命令名称变为 "java"
- (重新)通过采购
如果步骤 4.1 到 4.5 花费的时间超过 2 秒,根据我(和你)的经验,这在 OS 以前从未有过 java
的新 运行 上几乎是不可避免的],你会收到 "failed to launch" 消息,尽管实际上并没有失败。
slaves 会因为同样的原因抱怨,并在 master 实际可用之前反复尝试,但他们应该不断重试,直到成功连接到 master。
我在 EC2 上有一个非常标准的 Spark 部署 运行ning;我使用:
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
minefield/maze:
# 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 '[=10=]' '\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
到了!它假设我正在使用所有默认端口和其他东西,并且我没有做像在文件名中放置空格这样的愚蠢行为,但我认为这样更干净。
我有同样的问题,运行ning spark/sbin/start-slave.sh 在主节点上。
hadoop@master:/opt/spark$ sudo ./sbin/start-slave.sh --master spark://master:7077
starting org.apache.spark.deploy.worker.Worker, logging to /opt/spark/logs/spark-root-org.apache.spark.deploy.worker.Worker-1-master.out
failed to launch: nice -n 0 /opt/spark/bin/spark-class org.apache.spark.deploy.worker.Worker --webui-port 8081 --master spark://master:7077
Options:
-c CORES, --cores CORES Number of cores to use
-m MEM, --memory MEM Amount of memory to use (e.g. 1000M, 2G)
-d DIR, --work-dir DIR Directory to run apps in (default: SPARK_HOME/work)
-i HOST, --ip IP Hostname to listen on (deprecated, please use --host or -h)
-h HOST, --host HOST Hostname to listen on
-p PORT, --port PORT Port to listen on (default: random)
--webui-port PORT Port for web UI (default: 8081)
--properties-file FILE Path to a custom Spark properties file.
Default is conf/spark-defaults.conf.
full log in /opt/spark/logs/spark-root-org.apache.spark.deploy.worker.Worker-1-master.out
我发现了我的错,我不应该使用 --master 关键字而只是 运行 命令
hadoop@master:/opt/spark$ sudo ./sbin/start-slave.sh spark://master:7077
按照本教程的步骤操作: https://phoenixnap.com/kb/install-spark-on-ubuntu
提示:确保在之前安装所有依赖项:
sudo apt install scala git -y