本文翻譯自 Hadoop 的官方文檔,原文 Hadoop: Setting up a Single Node Cluster
目的
本文介紹了如何快速的搭建一個(gè) Hadoop 單機(jī)運(yùn)行環(huán)境,以便你使用 MapReduce 和 Hadoop 分布式文件系統(tǒng) (HDFS) 運(yùn)行一些簡(jiǎn)單的作業(yè)。
前提
平臺(tái)支持
- GNU/Linux是產(chǎn)品開(kāi)發(fā)和運(yùn)行的平臺(tái)。 Hadoop已在有2000個(gè)節(jié)點(diǎn)的GNU/Linux主機(jī)組成的集群系統(tǒng)上得到驗(yàn)證。
- Windows 平臺(tái)也支持 Hadoop,但后續(xù)步驟僅適用于 Linux。關(guān)于如何在 Windows 上配置 Hadoop 請(qǐng)看 這里。
所需軟件
對(duì) Linux 平臺(tái)來(lái)說(shuō),所需軟件如下:
- Java?,推薦使用的 Java 版本請(qǐng)參考 HadoopJavaVersions。
- ssh,并且 sshd 服務(wù)必須正常運(yùn)行,以便用 Hadoop 腳本管理遠(yuǎn)端 Hadoop 守護(hù)進(jìn)程。
安裝軟件
如果你的集群中尚未安裝所需軟件你必須先安裝它們。
以 Ubuntu Linux 為例:
安裝 Java
參考 JDK 的正確安裝姿勢(shì)安裝 ssh
$ sudo apt-get install ssh
$ sudo apt-get install rsync
下載
在這里下載 Hadoop 的發(fā)行版。
運(yùn)行 Hadoop 集群的準(zhǔn)備工作
解壓下載好的安裝文件(我這里下載的是 hadoop-2.7.3.tar.gz):
$ tar zxvf hadoop-2.7.3.tar.gz
編輯 etc/hadoop/hadoop-env.sh
文件,將 JAVA_HOME
修改為你的 Java 安裝目錄:
export JAVA_HOME="你的 Java 安裝目錄"
試試如下命令:
$ bin/hadoop
這將顯示 hadoop 腳本的用法。
現(xiàn)在,準(zhǔn)備工作已經(jīng)做好了。你可以使用下面任意一種方法開(kāi)始集群的搭建:
- 本地(單機(jī))模式
- 偽分布式模式
- 完全分布式模式
單機(jī)模式
Hadoop 默認(rèn)作為一個(gè)獨(dú)立的 Java 進(jìn)程運(yùn)行在非分布式模式下。這對(duì)調(diào)試來(lái)說(shuō)很有幫助。
下面的這個(gè)例子演示了如何在單機(jī)模式下運(yùn)行 Hadoop(所有操作路徑均相對(duì)于 Hadoop 安裝目錄):
// 創(chuàng)建 input 目錄
$ mkdir input
// 復(fù)制一些文件到 input 目錄作為輸入
$ cp etc/hadoop/*.xml input
// 執(zhí)行一個(gè) mapreduce 作業(yè),該作業(yè)將 input 目錄下的所有文件作為輸入,將匹配到模式 'dfs[a-z.]+' 的字符串作為輸出
$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar grep input output 'dfs[a-z.]+'
// 查看輸出結(jié)果
$ cat output/*
偽分布式模式
Hadoop 同樣可以在一個(gè)節(jié)點(diǎn)以偽分布式模式運(yùn)行,此時(shí)每個(gè) Hadoop 守護(hù)進(jìn)程分別以獨(dú)立的 Java 進(jìn)程運(yùn)行。
配置
進(jìn)行如下配置:
etc/hadoop/core-site.xml
:
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
etc/hadoop/hdfs-site.xml
:
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
設(shè)置 ssh 免密碼登錄
嘗試輸入以下命令:
$ ssh localhost
如果你在不輸入密碼的情況下無(wú)法通過(guò) ssh 連接到 localhost 的話,請(qǐng)執(zhí)行以下命令:
$ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ chmod 0600 ~/.ssh/authorized_keys
執(zhí)行
接下來(lái)介紹了如何執(zhí)行一個(gè)本地的 MapReduce 作業(yè)。
- 格式化文件系統(tǒng):
$ bin/hdfs namenode -format
- 啟動(dòng) NameNode 守護(hù)進(jìn)程和 DataNode 守護(hù)進(jìn)程:
$ sbin/start-dfs.sh
Hadoop 守護(hù)進(jìn)程會(huì)將日志寫入 $HADOOP_LOG_DIR
目錄中(默認(rèn)情況下是 $HADOOP_HOME/logs
目錄)
- 通過(guò) web 接口在瀏覽器中查看 Hadoop 的運(yùn)行情況;默認(rèn)可以通過(guò)如下地址訪問(wèn):
- NameNode - http://localhost:50070/
- 在 HDFS 中創(chuàng)建目錄,MapReduce 作業(yè)需要從這些目錄中讀取數(shù)據(jù):
$ bin/hdfs dfs -mkdir /user
$ bin/hdfs dfs -mkdir /user/<username>
- 從本地上傳文件到 HDFS 中:
$ bin/hdfs dfs -put etc/hadoop input
- 運(yùn)行 Hadoop 提供的示例:
$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar grep input output 'dfs[a-z.]+'
- 將輸出文件從 HDFS 中下載到本地并且檢驗(yàn)結(jié)果是否正確:
$ bin/hdfs dfs -get output output
$ cat output/*
或者直接在 HDFS 上查看輸出文件:
$ bin/hdfs dfs -cat output/*
- 完成之后可以通過(guò)如下命令停止守護(hù)進(jìn)程:
$ sbin/stop-dfs.sh
以 YARN 架構(gòu)運(yùn)行
你只需進(jìn)行很少的配置就可以以 YARN 架構(gòu)在偽分布式模式下執(zhí)行 MapReduce 作業(yè)。此外,ResourceManager 守護(hù)進(jìn)程 和 NodeManager 守護(hù)進(jìn)程也會(huì)啟動(dòng)。
下述步驟基于上一節(jié)中的 1 ~ 4 步。
- 進(jìn)行如下配置:
etc/hadoop/mapred-site.xml
:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
etc/hadoop/yarn-site.xml
:
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
- 啟動(dòng) ResourceManager 守護(hù)進(jìn)程 和 NodeManager 守護(hù)進(jìn)程:
$ sbin/start-yarn.sh
- 在瀏覽器中查看 ResourceManager 是否正常運(yùn)行;默認(rèn)在 8088 端口:
- ResourceManager - http://localhost:8088/
- 執(zhí)行 MapReduce 作業(yè)。
- 執(zhí)行完畢可以通過(guò)如下命令停止守護(hù)進(jìn)程:
$ sbin/stop-yarn.sh
完全分布式模式
請(qǐng)參考 Hadoop 完全分布式環(huán)境搭建