解决Spark Standalone模式下Work的Address和HDFS不匹配的问题 2019-08-18 17:34:31 ## 问题描述 HDFS的DataNode节点,节点名称为主机名,非IP。 Spark Standalone模式下,Worker列表中,Address信息为IP,不是主机名。 这会导致Spark处理HDFS上的数据时,无法精准分发任务,大数据量下会有性能问题。 ## 解决方案 修改`sbin/start-slave.sh`下的`start_instance`方法。 默认为: ```bash function start_instance { WORKER_NUM=$1 shift if [ "$SPARK_WORKER_PORT" = "" ]; then PORT_FLAG= PORT_NUM= else PORT_FLAG="--port" PORT_NUM=$(( $SPARK_WORKER_PORT + $WORKER_NUM - 1 )) fi WEBUI_PORT=$(( $SPARK_WORKER_WEBUI_PORT + $WORKER_NUM - 1 )) "${SPARK_HOME}/sbin"/spark-daemon.sh start $CLASS $WORKER_NUM \ --webui-port "$WEBUI_PORT" $PORT_FLAG $PORT_NUM $MASTER "$@" } ``` 修改为: ```bash function start_instance { WORKER_NUM=$1 shift if [ "$SPARK_WORKER_PORT" = "" ]; then PORT_FLAG= PORT_NUM= else PORT_FLAG="--port" PORT_NUM=$(( $SPARK_WORKER_PORT + $WORKER_NUM - 1 )) fi WEBUI_PORT=$(( $SPARK_WORKER_WEBUI_PORT + $WORKER_NUM - 1 )) HOSTNAME=$(ping `hostname` | head -n 1 | awk '{print $2}') "${SPARK_HOME}/sbin"/spark-daemon.sh start $CLASS $WORKER_NUM \ --webui-port "$WEBUI_PORT" $PORT_FLAG $PORT_NUM $MASTER "$@" -h $HOSTNAME } ``` 启动Worker时,先获取该节点的主机名,然后通过-h参数传递过去就可以了。 非特殊说明,均为原创,原创文章,未经允许谢绝转载。 原始链接:解决Spark Standalone模式下Work的Address和HDFS不匹配的问题 赏 Prev Nginx反向代理神奇的斜线/及跳转问题 Next 安装MariaDB后的初始化设置