应该在节点

时间:2017-02-18 14:43:15

标签: hadoop hdfs

Hadoop 2.7安装在主服务器的/opt/pro/hadoop/hadoop-2.7.3,然后将整个安装复制到slave,但不同的目录/opt/pro/hadoop-2.7.3。然后,我在从属机器上更新环境变量(例如,HADOOP_HOME,用于namenode和datanode的hdfs_site.xml)。

现在我可以成功在奴隶运行hadoop version。但是,在主服务器中,start-dfs.sh失败并显示消息:

17/02/18 10:24:32 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Starting namenodes on [master]
master: starting namenode, logging to /opt/pro/hadoop/hadoop-2.7.3/logs/hadoop-shijiex-namenode-shijie-ThinkPad-T410.out
master: starting datanode, logging to /opt/pro/hadoop/hadoop-2.7.3/logs/hadoop-shijiex-datanode-shijie-ThinkPad-T410.out
slave: bash: line 0: cd: /opt/pro/hadoop/hadoop-2.7.3: No such file or directory
slave: bash: /opt/pro/hadoop/hadoop-2.7.3/sbin/hadoop-daemon.sh: No such file or directory
Starting secondary namenodes [0.0.0.0]
0.0.0.0: starting secondarynamenode, logging to /opt/pro/hadoop/hadoop-2.7.3/logs/hadoop-shijiex-secondarynamenode-shijie-ThinkPad-T410.out
17/02/18 10:26:15 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

hadoop使用奴隶的HADOOP_HOME主人(/opt/pro/hadoop/hadoop-2.7.3),而奴隶的HADOOP_HOME/opt/pro/hadoop-2.7.3。 那么在安装时, HADOOP_HOME 应该在节点之间相同吗?

的.bashrc

export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
export PATH=$PATH:/usr/lib/jvm/java-7-openjdk-amd64/bin

export HADOOP_HOME=/opt/pro/hadoop-2.7.3
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
# Add Hadoop bin/ directory to PATH
export PATH=$PATH:$HADOOP_HOME/bin

hadoop-env.sh

# The java implementation to use.
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64

在slave服务器上,$ HADOOP_HOME / etc / hadoop有一个文件大师:

xx@wodaxia:/opt/pro/hadoop-2.7.3/etc/hadoop$ cat masters 
master

2 个答案:

答案 0 :(得分:3)

不,不一定。但是,如果节点之间的路径不同,则不能使用start-dfs.shstop-dfs.sh等脚本以及yarn相同的脚本。这些脚本引用执行脚本的节点的$HADOOP_PREFIX变量。

hadoop-daemons.sh使用start-dfs.sh代码片段来启动所有数据节点。

exec "$bin/slaves.sh" --config $HADOOP_CONF_DIR cd "$HADOOP_PREFIX" \; "$bin/hadoop-daemon.sh" --config $HADOOP_CONF_DIR "$@" 

脚本是以这种方式编写的,因为假设集群的所有节点都遵循相同的$HADOOP_PREFIX$HADOOP_HOME(不建议使用)路径。

要克服这一点,

1)尝试在所有节点上使路径相同。

2)或者登录到群集中的每个节点,然后使用

启动适用于该节点的dfs过程
$HADOOP_HOME/sbin/hadoop-daemon.sh start <namenode | datanode | secondarynamenode| journalnode>

同样的纱线程序,

$HADOOP_HOME/sbin/yarn-daemon.sh start <resourcemanager | nodemanager>

答案 1 :(得分:0)

不,不应该。 $ HADOOP_HOME是每个Hadoop节点的个体,但它可以通过不同的方式实例化。您可以通过在 .bashrc 文件中设置它来以全局方式定义它,也可以在Hadoop文件夹中的本地 hadoop-env.sh 脚本中设置它。验证群集的每个节点上的值是否相同。如果它是全局的,您可以通过 echo $ HADOOP_HOME 进行检查。如果是脚本选项,则可以通过将此变量导入当前上下文并再次检查来验证此变量:

. /opt/pro/hadoop/hadoop-2.7.3/bin/hadoop-env.sh
echo $HADOOP_HOME

此外,请确保您的配置中没有 hadoop.home.dir 属性,因为它会覆盖环境$ HADOOP_HOME