我试图在
Windows Azure云上运行3个节点Hadoop集群.我已经通过配置,并测试发布.一切看起来都很好,但是,由于我以前使用OpedJDK,根据我所读取的不推荐用于Hadoop的VM,我决定将其替换为Oracle Server JVM.删除了旧的java安装与Yum,以及/usr/lib中的所有java文件夹,安装了最新版本的Oracle JVM,更新了PATH和JAVA_HOME变量;然而,现在发射我得到以下的按钮:
sed: -e expression #1,char 6: unknown option to `s' 64-Bit: ssh: Could not resolve hostname 64-Bit: Name or service not known HotSpot(TM): ssh: Could not resolve hostname HotSpot(TM): Name or service not known Server: ssh: Could not resolve hostname Server: Name or service not known VM: ssh: Could not resolve hostname VM: Name or service not known
等等. (总共约20-30个字符串与不应该与主机名相同的单词)
对我而言,由于启动脚本中sed的使用不正确,它似乎试图将部分代码作为Hostname传递:
if [ "$HADOOP_SLAVE_NAMES" != '' ] ; then SLAVE_NAMES=$HADOOP_SLAVE_NAMES else SLAVE_FILE=${HADOOP_SLAVES:-${HADOOP_CONF_DIR}/slaves} SLAVE_NAMES=$(cat "$SLAVE_FILE" | sed 's/#.*$//;/^$/d') fi # start the daemons for slave in $SLAVE_NAMES ; do ssh $HADOOP_SSH_OPTS $slave $"${@// /\\ }" \ 2>&1 | sed "s/^/$slave: /" & if [ "$HADOOP_SLAVE_SLEEP" != "" ]; then sleep $HADOOP_SLAVE_SLEEP fi done
哪个看起来不变,所以问题是:JVM的变化可能如何影响sed?我该怎么解决?
解决方法
所以我找到了一个这个问题的答案:我的猜测是错误的,一切与sed是好的.然而问题在于如何使用Oracle JVM与外部库进行比较,与OpenJDK相比.它没有抛出异常,脚本不期望它,并且它破坏整个sed输入. 您可以通过添加以下系统变量来修复它: HADOOP_COMMON_LIB_NATIVE_DIR应该指向您的Hadoop安装的/ lib / native文件夹,并将-Djava.library.path = / opt / hadoop / lib添加到HADOOP_OPTS变量中已有的任何选项(注意/ opt / hadoop是我的安装文件夹,您可能需要更改它以使东西正常工作). 我个人将导出命令添加到hadoop-env.sh脚本,但将其添加到.bash文件或start-all.sh应该也可以.