2013-11-22 50 views
0

我在筆記本電腦上以僞分佈式模式安裝了Hadoop,操作系統是Ubuntu。爲什麼我們每次重啓機器後都需要格式化HDFS?

我已經改變了路徑,其中的Hadoop將(默認的Hadoop將數據存儲在/tmp文件夾)存儲其數據

hdfs-site.xml文件看起來如下:

<property> 
    <name>dfs.data.dir</name> 
    <value>/HADOOP_CLUSTER_DATA/data</value> 
</property> 

現在,每當我重新啓動機器,並嘗試啓動hadoop集羣使用start-all.sh腳本,數據節點永遠不會啓動。我確認數據節點不是通過檢查日誌並使用jps命令啓動的。

然後我

    使用 stop-all.sh腳本
  1. 停止集羣。
  2. 使用hadoop namenode -format命令格式化的HDFS。
  3. 使用start-all.sh腳本啓動羣集。

現在一切正常,即使我停止並再次啓動羣集。只有當我重新啓動機器並嘗試啓動羣集時纔會出現問題。

  • 有沒有人遇到過類似的問題?
  • 爲什麼會發生這種情況
  • 我們該如何解決這個問題?
+0

這是您的默認位置呢? –

+0

@sonic,我已根據您的評論修改了我的問題。 – Shekhar

+0

你有下面的答案:) –

回答

6

通過改變dfs.datanode.data.dir而不是/tmp您確實使數據(塊)在重新啓動時保留下來。但是HDFS不止是塊。你需要確保所有相關的目標遠離/tmp,最明顯的是dfs.namenode.name.dir(我不知道你需要更改哪些目錄,這取決於你的配置,但namenode目錄是強制性的,也可以是足夠的)。

我也推薦使用更新的Hadoop發行版。順便說一句,1.1 namenode目錄設置是dfs.name.dir

1

對於那些使用hadoop 2.0或以上版本的配置文件名稱可能會有所不同。

由於此answer指出,請轉到您的hadoop安裝的/etc/hadoop目錄。

打開文件hdfs-site.xml。這是user configuration will override the default hadoop configurations,這是由java classloader之前加載的。

添加dfs.namenode.name.dir屬性並設置新的名稱節點目錄(默認爲file://${hadoop.tmp.dir}/dfs/name)。

dfs.datanode.data.dir屬性(默認爲file://${hadoop.tmp.dir}/dfs/data)做同樣的處理。

例如:

<property> 
    <name>dfs.namenode.name.dir</name> 
    <value>/Users/samuel/Documents/hadoop_data/name</value> 
</property> 
<property> 
    <name>dfs.datanode.data.dir</name> 
    <value>/Users/samuel/Documents/hadoop_data/data</value> 
</property> 

其中TMP DIR出現其它屬性是dfs.namenode.checkpoint.dir。其默認值是:file://${hadoop.tmp.dir}/dfs/namesecondary

如果你願意,你可以很容易地還可以添加此屬性:

<property> 
    <name>dfs.namenode.checkpoint.dir</name> 
    <value>/Users/samuel/Documents/hadoop_data/namesecondary</value> 
</property> 
+1

做完這些之後,別忘了格式化你的文件系統,比如:'$ HADOOP_HOME/bin/hdfs namenode -format'。如果未設置var,則將$ HADOOP_HOME環境變量替換爲hadoop的絕對路徑。 – Samuel

相關問題