2017-02-18 31 views
2

Hadoop 2.7安装在/opt/pro/hadoop/hadoop-2.7.3在主,然后整个安装复制到奴隶,但不同的目录/opt/pro/hadoop-2.7.3。然后我在slave机器上更新环境变量(例如,HADOOP_HOME,hdfs_site.xml用于namenode和datanode)。hadoop安装路径应该是相同的跨节点

现在我可以在slave上成功运行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的使用主(/opt/pro/hadoop/hadoop-2.7.3)在从站的HADOOP_HOME,而在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 

在从服务器,$ HADOOP_HOME的/ etc/Hadoop的有文件大师:

[email protected]:/opt/pro/hadoop-2.7.3/etc/hadoop$ cat masters 
master 

回答

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 "[email protected]" 

脚本已经写好,因为集群中的所有节点遵循相同的$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> 
0

不,它不应该。每个Hadoop节点$ HADOOP_HOME都是独立的,但它可以通过不同的方式实例化。您可以通过将其设置为.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

+0

我确认的环境变量在''.bashrc''中是正确的,并且我没有在etc/hadoop/* xml中添加任何新变量。不确定它是否与从服务器上的主设备相关。无论如何,我强制安装在两台服务器上保持一致,作为当前的解决方案。 –