如何配置Hadoop,使每個datanode使用不同的目錄進行存儲?如何配置Hadoop使每個datanode使用不同的目錄?
每個datanode共享一個存儲空間。我希望datanode1使用dir1,datanode2使用dir2。起初,我將所有datanode配置爲在共享存儲中使用同一個目錄,結果表明只有一個datanode正在運行。
如何配置Hadoop,使每個datanode使用不同的目錄進行存儲?如何配置Hadoop使每個datanode使用不同的目錄?
每個datanode共享一個存儲空間。我希望datanode1使用dir1,datanode2使用dir2。起初,我將所有datanode配置爲在共享存儲中使用同一個目錄,結果表明只有一個datanode正在運行。
您需要爲羣集中的每個節點都配置一個自定義hdfs-site.xml文件,並正確配置數據目錄屬性(dfs.data.dir
)。如果您當前正在使用hadoop配置的共享目錄,那麼您還需要修改如何執行此操作。
有點痛苦,我想你可以嘗試使用一些shell腳本來生成文件,或者一個工具,比如Puppet或Chef。
回到你身邊的一個問題 - 爲什麼你使用NFS,你有點擊敗了數據局部性 - Hadoop被設計成將你的代碼移動到數據所在的位置,而不是(像你的情況)代碼和數據。
如果您使用的是NFS,因爲它由具有數據冗餘的某個SAN陣列提供支持,那麼您又一次爲自己製造困難,HDFS將(如果配置的話)爲您管理數據複製,假設您擁有足夠大的羣集並正確配置。在理論上,使用商品硬件的成本要低於使用昂貴SAN的成本(取決於你的設置/情況,我猜)
我不知道它是否是一種粗糙的做法,但這是我如何定製奴隸。在NameNode的SH文件來實現執行不同的目錄結構的每個數據節點:
編輯在$HADOOP_HOME/bin/slaves.sh
每個數據節點執行的SSH遠程命令:
for slave in `cat "$HOSTLIST"|sed "s/#.*$//;/^$/d"`; do
# If the slave node is ap1001 (first datanode),
# Then use a different directory path for SSH command.
if [ $slave == "ap1001" ]
then
input=`/bin/echo $"${@// /\\ }"` >/dev/null 2>&1
# If the command type is start-dfs (start the datanodes)
# Then construct the start command for remote execution on datanode through ssh
/bin/echo $input | grep -i start
if [ $? -eq 0 ]
then
inputArg="cd /app2/configdata/hdp/hadoop-1.2.1 ; /app2/configdata/hdp/hadoop-1.2.1/bin/hadoop-daemon.sh --config /app2/configdata/hdp/hadoop-1.2.1/libexec/../conf start datanode"
else
# If the command type is stop-dfs (stop the datanodes)
# Then construct the stop command for remote execution on datanode through ssh
inputArg="cd /app2/configdata/hdp/hadoop-1.2.1 ; /app2/configdata/hdp/hadoop-1.2.1/bin/hadoop-daemon.sh --config /app2/configdata/hdp/hadoop-1.2.1/libexec/../conf stop datanode"
fi
ssh $HADOOP_SSH_OPTS $slave $inputArg 2>&1 &
else
# Use default command for remaining slaves.
ssh $HADOOP_SSH_OPTS $slave $"${@// /\\ }" \
2>&1 | sed "s/^/$slave: /" &
fi
if [ "$HADOOP_SLAVE_SLEEP" != "" ]; then
sleep $HADOOP_SLAVE_SLEEP
fi
done
它是某種形式的一次性測試設置的? Hadoop的性能很大程度上取決於數據與CPU的接近程度。 – Olaf
爲了澄清,您是否說您的羣集運行分佈式文件系統(如NFS),並且您希望每個DataNode都將本地數據存儲在分佈式文件系統的不同目錄中? –
@MattD羣集有一個由所有DataNode共享的存儲。所以實際上datanode2可以訪問dir1。但是,如果我爲所有機器設置dfs.data.dir爲「/ dir1,/ dir2」,它會混亂 – HZhang