当前位置: 首页 > 知识库问答 >
问题:

重新安装JVM后,hadoop启动脚本中的sed语法混乱

毛弘博
2023-03-14

我试图在Windows Azure Cloud上运行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

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个答案

蒋嘉实
2023-03-14

所以我找到了这个问题的答案:我的猜测是错误的,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中也可以。

 类似资料:
  • 同时使用redux与反应。我试图在安装react-redux和redux库后,为我的应用程序(reactwiseldux)进行npm启动。我在下面看到这个错误。我自己也在想办法,但目前还没找到。请帮帮我。 “反应脚本”不被识别为内部或外部命令、可操作程序或批处理文件。npm错误!代码ELIFECYCLE npm ERR!错误1 npm错误!reactwithredux@0.1.0开始:npm ER

  • 所有能编译出java .class文件的JVM脚本语言,都能在hi-nginx-java体系中工作。 例如groovy : package groovy import hi.request import hi.response import hi.route import java.util.regex.Matcher class test implements hi.route.run

  • > 从github sonarjs插件克隆sonarjs插件 通过mvn install命令创建jar文件 现在,当试图启动声纳服务器时,它会以以下消息停止: 运行sonarqube... wrapper-->wrapper作为控制台启动 wrapper启动jvm... jvm 1 wrapper(版本3.2.3)http://wrapper.tanukisoftware.org jvm 1版权所

  • 问题内容: 我编写了一个脚本,该脚本可以通过从网站上下载最新版本并覆盖正在运行的脚本来保持最新状态。 我不确定更新脚本后重新启动脚本的最佳方法是什么。 有任何想法吗? 我真的不想要一个单独的更新脚本。哦,它也必须在两个linux / windows上都可以工作。 问题答案: 在Linux或任何其他形式的Unix中,os.execl和它的朋友是一个不错的选择- 您只需要重新执行sys.executa

  • 我正在尝试在服务器上安装Hadoop 2.2.0群集。现在所有的服务器都是64位的,我下载了Hadoop 2.2.0,所有的配置文件都已经设置好了。当我跑步的时候/启动dfs。sh,我得到以下错误: 除了64位之外,还有其他错误吗?我已经在没有密码的情况下完成了namenode和datanodes之间的登录,其他错误意味着什么?

  • 问题内容: 有什么方法可以重新启动JVM?如in中,实际上不退出,而是关闭并重新加载所有类,然后从顶部运行main? 问题答案: 最好的选择可能是在一个循环中运行java解释器,然后退出。例如: 如果您希望完全重新引导或关闭,可以测试退出状态: 在Java程序中,可以使用System.exit(0)指示要“重新引导”,而可以使用System.exit(1)指示要停止并保持停止。