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

时间:2016-02-02 03:32:11

标签: ubuntu apache-spark cluster-computing

我在Openbuack上创建了一个Spark集群,在Ubuntu14.04上运行,内存为8GB。我创建了两个虚拟机,每个虚拟机3GB(为父操作系统保留2 GB)。此外,我从第一台虚拟机创建一个主服务器和两名工作人员,从第二台机器创建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命令:/ usr / lib / jvm / java-7-openjdk-amd64 / bin / java -cp> /home/ubuntu/spark-1.5.1/sbin /../ conf /:/ home /的ubuntu /火花> 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->端口8080

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

有人可以解释原因吗?

2 个答案:

答案 0 :(得分:8)

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 ...分叉调用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
    2. 加载Spark环境
    3. 找到java可执行文件
    4. 找到合适的Spark jar
    5. 调用java ... org.apache.spark.launcher.Main ...以获取Spark部署所需的完整类路径
    6. 然后终于通过exec将控制权移交给java ... org.apache.spark.deploy.master.Master,此时命令名称变为“java”
  5. 如果步骤4.1到4.5花费的时间超过2秒,那么在我(和你的)体验中,在以前从未运行java的全新操作系统中,这似乎是不可避免的,你将会“失败”发布“消息,尽管实际上没有任何失败。

    奴隶会抱怨出于同样的原因,并且在主人实际可用之前摔跤,但他们应该继续重试,直到他们成功连接到主人。

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

    • conf/spark-defaults.conf设置spark.executor.memory并通过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 '\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来启动奴隶,因为这比在nohup命令中调用ssh更容易:

    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
    

    有!它假设我正在使用所有默认端口和东西,并且我没有做愚蠢的狗屎,就像在文件名中添加空格一样,但我认为这样更干净。

答案 1 :(得分:2)

我有同样的问题,在主节点上运行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