2017-02-18 70 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中添加任何新變量。不確定它是否與從服務器上的主設備相關。無論如何,我強制安裝在兩臺服務器上保持一致,作爲當前的解決方案。 –