在重新安装jvm之后,hadoop启动脚本中的sed语法混乱了

doinxwow  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(419)

我正在尝试在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?我该怎么修?

nukf8bse

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中也可以。

相关问题