gpt4 book ai didi

hadoop - 重新安装 JVM 后,hadoop 启动脚本中的 sed 语法困惑

转载 作者:可可西里 更新时间:2023-11-01 14:12:32 24 4
gpt4 key购买 nike

我正在尝试在 Windows Azure 云上运行 3 节点 Hadoop 集群。我已经完成了配置和测试启动。一切看起来都很好,但是,因为我曾经使用过 OpedJDK,根据我的阅读,不推荐将其用作 Hadoop 的 VM,因此我决定将其替换为 Oracle Server JVM。使用 Yum 删除了旧的 java 安装,以及/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,它似乎正试图将部分代码作为主机名传递:

        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 一切都很好。然而,与 OpenJDK 相比,问题在于 Oracle JVM 如何与外部库一起工作。它确实在脚本没有预料到的地方抛出异常,并且它破坏了整个 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 应该也能正常工作。

关于hadoop - 重新安装 JVM 后,hadoop 启动脚本中的 sed 语法困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19775808/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com