我正在尝试在WindowsAzure云上运行3节点hadoop群集。我已经完成了配置和测试启动。不过,一切看起来都很好,因为我曾经使用过opedjdk,根据我所读的内容,不推荐它作为hadoop的vm,所以我决定用oracleserverjvm替换它。用yum删除了java的旧安装,以及/usr/lib中的所有java文件夹,安装了oracle jvm的最新版本,更新了path和java\u 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
e、 t.c.(总共约20-30个字符串,其中包含与主机名没有任何共同点的单词)
对我来说,它似乎试图将部分代码作为主机名传递,因为在启动脚本中不正确地使用了sed:
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?我该怎么修?
1条答案
按热度按时间nukf8bse1#
所以我找到了这个问题的答案:我猜错了,sed的一切都很好。然而,与openjdk相比,问题在于oraclejvm如何与外部库一起工作。它确实在脚本没有预料到的地方抛出了异常,并破坏了整个sed输入。您可以通过添加以下系统变量来修复它:hadoop\u common\u lib\u native\u dir,它应该指向hadoop安装的/lib/native文件夹,并将-djava.library.path=/opt/hadoop/lib添加到hadoop\u opts variable中已有的任何选项中(注意/opt/hadoop是我的安装文件夹,您可能需要更改它以使其正常工作)。我个人将export命令添加到hadoop-env.sh脚本中,但将其添加到.bash文件或start-all.sh中也可以。