解决方法:
在HiBench安装目录conf目录下修改hibench.conf文件,要配置hibench.masters.hostnames 和hibench.slaves.hostnames两项。
配置为集群的master节点和slaves节点对应的主机名。
hibench.masters.hostnames node1.novalocal
hibench.slaves.hostnames node1.novalocal node2.novalocal node3.novalocal
运行spark例子在yarn-client模式下报错。报错信息如下:
ERROR YarnClientSchedulerBackend: YARN application has exited unexpectedly with state UNDEFINED!
解法1:修改conf/spark.conf文件。改为standalone模式。
hibench.spark.master spark://node1.novalocal:7077
解法2:只需要将hadoop集群的yarn-site.xml配置中加入如下两行即可解决。
yarn.nodemanager.pmem-check-enabled
false
yarn.nodemanager.vmem-check-enabled
false
用java8多会出现这个错误。
github上的hibench上也有人提问这个问题,有回答说是SSH免密钥的问题。因为需要SSh连接其他节点并收集其他节点的信息。所以首先检查免秘钥要是否配置完好。
还有一种可能是没有配置hibench.slaves.hostnames。注意多个slaves之间用空格隔开。
hibench.masters.hostnames node1.novalocal
hibench.slaves.hostnames node1.novalocal node2.novalocal node3.novalocal
因为monitor.py存在以下代码,如果没有配置hibench.slaves.hostnames,则不存在监视器。
nodes = sorted(list(set(nodes)))
for node in nodes:
na.append(P(node, PROBE_INTERVAL))
我的没有生成monitor.html文件的原因就是因为hibench.slaves.hostnames设置错误。
也就是说在配置的存放历史job记录的hdfs上并未发现有hibench运行的job的记录。假设历史job信息存放在hdfs的/history目录下。以下记录的两个job都是用spark-shell运行的。
解决方法:
找到spark安装目录下conf目录下spark-defaults.conf文件的以下三个参数:
spark.eventLog.enabled true
spark.yarn.historyServer.address node1.novalocal:18080
spark.eventLog.dir hdfs://node1.novalocal:9000/history/
将上述三个参数拼接成用于spark-submit的conf信息:
--conf "spark.eventLog.enabled=true" --conf "spark.yarn.historyServer.address=node1.novalocal:18080" --conf "spark.eventLog.dir=hdfs://node1.novalocal:9000/history/"
然后修改HiBench目录下bin/functions/workload_functions.sh文件。
修改前:
if [[ "$CLS" == *.py ]]; then
LIB_JARS="$LIB_JARS --jars ${SPARKBENCH_JAR}"
SUBMIT_CMD="${SPARK_HOME}/bin/spark-submit ${LIB_JARS} --properties-file ${SPARK_PROP_CONF} --master ${SPARK_MASTER} ${YARN_OPTS} ${CLS} $@"
else
SUBMIT_CMD="${SPARK_HOME}/bin/spark-submit ${LIB_JARS} --properties-file ${SPARK_PROP_CONF} --class ${CLS} --master ${SPARK_MASTER} ${YARN_OPTS} ${SPARKBENCH_JAR} $@"
if [[ "$CLS" == *.py ]]; then
LIB_JARS="$LIB_JARS --jars ${SPARKBENCH_JAR}"
SUBMIT_CMD="${SPARK_HOME}/bin/spark-submit ${LIB_JARS} --conf "spark.eventLog.enabled=true" --conf "spark.yarn.historyServer.address=node1.novalocal:18080" --conf "spark.eventLog.dir=hdfs://node1.novalocal:9000/history/" --properties-file ${SPARK_PROP_CONF} --master ${SPARK_MASTER} ${YARN_OPTS} ${CLS} $@"
else
SUBMIT_CMD="${SPARK_HOME}/bin/spark-submit ${LIB_JARS} --conf "spark.eventLog.enabled=true" --conf "spark.yarn.historyServer.address=node1.novalocal:18080" --conf "spark.eventLog.dir=hdfs://node1.novalocal:9000/history/" --properties-file ${SPARK_PROP_CONF} --class ${CLS} --master ${SPARK_MASTER} ${YARN_OPTS} ${SPARKBENCH_JAR} $@"
再重新运行HiBench中的job发现hdfs上出现对应文件。
也就是说spark的18080端口打不开,显示网页打不开。
spark.eventLog.enabled true
spark.eventLog.dir hdfs://node1.novalocal:9000/history
spark.eventLog.compress true
第二个参数代表hdfs上存放历史job信息的目录。
hadoop fs -mkdir /history
export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=18080 -Dspark.history.retainedApplications=3 -Dspark.history.fs.logDirectory=hdfs://node1.novalocal:9000/history"
注意将上述语句中的主机名修改成自己的。
./start-history-server.sh
然后浏览器打开master_ip:18080发现界面可以显示了。
但是我还发现History Server页面可以显示,但是hdfs上有记录job的历史信息而Spark的History Server页面却没有已完成的job的记录。
结果发现跟配置无关,是浏览器的问题,换个浏览器就好了。换成chrome浏览器就显示出来了。太生气了!!!!!