Hadoop

出自 Arch Linux 中文维基

本文或本節需要翻譯。要貢獻翻譯,請訪問簡體中文翻譯團隊

附註: Not updated since 2018, directly references systemctl commands(在 Talk:Hadoop# 中討論)

Apache Hadoop 是一個支持在商業硬件大型集群上運行應用程式框架。Hadoop框架透明地提供應用程式可靠性和數據傳輸。Hadoop實現了一個名為Map/Reduce計算模式,應用程式被劃分成許多小片段,這些小片段可能在集群中的任何節點上被執行或反覆執行。此外,它提供了一個分佈式文件系統(HDFS)來存儲在計算節點上的數據,它使集群有非常高的帶寬。MapReduce和Hadoop分佈式文件系統使框架能自行處理失效節點。

安裝[編輯 | 編輯原始碼]

安裝 hadoopAUR包。

配置[編輯 | 編輯原始碼]

默認情況下, hadoop已經被配置成偽分佈模式。在一些不同環境下要修改文件 /etc/profile.d/hadoop.sh中的和傳統Hadoop不同的變量。

環境變量 描述 權限
HADOOP_CONF_DIR /etc/hadoop 存放配置文件 Read
HADOOP_LOG_DIR /tmp/hadoop/log 存放日誌文件 Read and Write
HADOOP_SLAVES /etc/hadoop/slaves 命名遠程從屬主機 Read
HADOOP_PID_DIR /tmp/hadoop/run 存放pid文件 Read and Write

你需要正確設置下列文件。

/etc/hosts
/etc/hostname 
/etc/locale.conf

你必須在 /etc/hadoop/hadoop-env.sh告訴hadoop你的JAVA_HOME因為它並不自己找它自己安裝的的地方:

/etc/hadoop/hadoop-env.sh
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk/

用下面命令檢查安裝:

hadoop version

如果你得到警告信息"WARNING: HADOOP_SLAVES has been replaced by HADOOP_WORKERS. Using value of HADOOP_SLAVES." 那麼用下面的語句替換掉替換掉/etc/profile.d/hadoop.shexport HADOOP_SLAVES=/etc/hadoop/slaves:

export HADOOP_WORKERS=/etc/hadoop/workers

單節點設置[編輯 | 編輯原始碼]

注意: 這個部分內容基於 Hadoop官方文檔

獨立操作[編輯 | 編輯原始碼]

默認地, Hadoop被配置為非分佈式模式,作為一個單獨的Java進程. 這對調試很有幫助.

下面的例子複製了解壓縮的conf目錄來用作輸入然後尋找並展示每個匹配正則表達式的結果。輸出被寫入給定的輸出目錄。

$ HADOOP_CONF_DIR=/usr/lib/hadoop/orig_etc/hadoop/
$ mkdir input
$ cp /etc/hadoop/*.xml input
$ hadoop jar /usr/lib/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.0.0.jar grep input output 'dfs[a-z.]+'
$ cat output/*

偽分佈式操作[編輯 | 編輯原始碼]

Hadoop 能在偽分佈式模式下運行在單一節點,這樣每個hadoop守護進程運行在不同的Java進程.

默認地,hadoop將會以root用戶運行。你可以改變默認用戶,在 /etc/conf.d/hadoop裡的:

HADOOP_USERNAME="<your user name>"

設置無需密碼的ssh[編輯 | 編輯原始碼]

確定你的 sshd服務啟用了, 或者用systemctl enable sshd手動開啟. 現在確定你能不用密碼連接到localhost:

$ ssh localhost

如果你不能用ssh無密碼連接到localhost, 執行下面的命令:

$ ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ chmod 0600 ~/.ssh/authorized_keys

確定/etc/ssh/sshd_config文件裡的下面這行被註釋了

/etc/ssh/sshd_config
#AuthorizedKeysFile .ssh/authorized_keys

執行[編輯 | 編輯原始碼]

格式化一個新的分佈式文件系統:

$ hadoop namenode -format

開啟hadoop守護進程:

# systemctl start hadoop-datanode
# systemctl start hadoop-jobtracker
# systemctl start hadoop-namenode
# systemctl start hadoop-secondarynamenode
# systemctl start hadoop-tasktracker

hadoop守護進程的日誌輸出寫在 ${HADOOP_LOG_DIR}目錄(默認在 /var/log/hadoop).

為NameNode和JobTracker流量網絡接口; 默認它們在:

複製輸入文件到分佈式文件系統:

$ hadoop fs -put /etc/hadoop input

運行一些提供的例子:

$ hadoop jar /usr/lib/hadoop/hadoop-examples-*.jar grep input output 'dfs[a-z.]+'

檢查輸出文件:

複製分佈式文件系統的輸出文件到本地文件系統並檢查它們:

$ hadoop fs -get output output
$ cat output/*

或者

在分佈式文件系統瀏覽輸出文件:

$ hadoop fs -cat output/*

當你結束後停止以下守護進程:

# systemctl stop hadoop-datanode
# systemctl stop hadoop-jobtracker
# systemctl stop hadoop-namenode
# systemctl stop hadoop-secondarynamenode
# systemctl stop hadoop-tasktracker