加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

在重新安装JVM后,在hadoop启动脚本中调用sed语法

发布时间:2020-12-14 05:48:32 所属栏目:Java 来源:网络整理
导读:我试图在 Windows Azure云上运行3个节点Hadoop集群.我已经通过配置,并测试发布.一切看起来都很好,但是,由于我以前使用OpedJDK,根据我所读取的不推荐用于Hadoop的VM,我决定将其替换为Oracle Server JVM.删除了旧的java安装与Yum,以及/usr/lib中的所有java文件
我试图在 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应该也可以.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读