帶你快速搭建Hadoop運行環(huán)境
Hadoop 是一個分布式系統(tǒng)基礎(chǔ)架構(gòu),在大數(shù)據(jù)領(lǐng)域被廣泛的使用,它將大數(shù)據(jù)處理引擎盡可能的靠近存儲,Hadoop 最核心的設(shè)計就是 HDFS 和 MapReduce,HDFS 為海量的數(shù)據(jù)提供了存儲,MapReduce 為海量的數(shù)據(jù)提供了計算。這篇文章主要就是介紹一下如何搭建一個 Hadoop 運行環(huán)境。

我們使用 Linux 操作系統(tǒng)來搭建環(huán)境,下面的信息是用來準備搭建 Hadoop 環(huán)境的電腦環(huán)境信息。
- hadoop@ubuntu:~$ cat /etc/os-release
- NAME="Ubuntu"
- VERSION="14.04.5 LTS, Trusty Tahr"
- ID=ubuntu
- ID_LIKE=debian
- PRETTY_NAME="Ubuntu 14.04.5 LTS"
- VERSION_ID="14.04"
- HOME_URL="http://www.ubuntu.com/"
- SUPPORT_URL="http://help.ubuntu.com/"
- BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
緊接著來新建一個用戶,這一步其實也可以省略的,可以根據(jù)實際情況來決定,這里是新建了一個叫 hadoop 的新用戶。
- #創(chuàng)建新用戶
- sudo useradd -m hadoop -s /bin/bash
- #設(shè)置密碼
- sudo passwd hadoop
- #為hadoop用戶增加管理員權(quán)限
- sudo adduser hadoop sudo
- #切換到hadoop用戶
- su hadoop
我們首先來設(shè)置一下 SSH 無密碼登錄,這一步建議都設(shè)置一下,因為分布式系統(tǒng)環(huán)境都是由多臺服務(wù)器構(gòu)成的,設(shè)置免密碼登錄會方便使用。
- #先檢查下是否可以在沒有密碼的情況下ssh到localhost
- ssh localhost
- #如果在沒有密碼的情況下無法ssh到localhost,請執(zhí)行以下命令
- ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
- cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
- chmod 0600 ~/.ssh/authorized_keys
上面是一些準備工作,接下來就正式開始部署 Hadoop 環(huán)境了。我們先在 Apache 官網(wǎng)(http://hadoop.apache.org)這里下載最新的穩(wěn)定版本的 Hadoop 發(fā)行版,然后解壓到指定目錄并進入這個目錄,執(zhí)行 ./bin/hadoop 和 ./bin/hadoop version 可以分別顯示 hadoop 腳本的使用文檔和版本信息,然后修改一下 ./etc/hadoop/core-site.xml 和 ./etc/hadoop/hdfs-site.xml這兩個配置文件,配置修改分別如下所示。
修改 ./etc/hadoop/core-site.xml 配置文件,添加如下配置:
- <configuration>
- <property>
- <name>fs.defaultFS</name>
- <value>hdfs://localhost:9090</value>
- </property>
- <property>
- <name>hadoop.tmp.dir</name>
- <value>file:/opt/bigdata/hadoop/tmp</value>
- <description>A base for other temporary directories.</description>
- </property>
- </configuration>
修改 ./etc/hadoop/hdfs-site.xml 配置文件,添加如下配置:
- <configuration>
- <property>
- <name>dfs.replication</name>
- <value>1</value>
- </property>
- <property>
- <name>dfs.namenode.name.dir</name>
- <value>file:/opt/bigdata/hadoop/tmp/dfs/name</value>
- </property>
- <property>
- <name>dfs.datanode.data.dir</name>
- <value>file:/opt/bigdata/hadoop/tmp/dfs/data</value>
- </property>
- </configuration>
配置修改好之后,執(zhí)行格式化文件系統(tǒng),操作如下。
- hadoop@ubuntu:/opt/bigdata/hadoop$ ./bin/hdfs namenode -format
- #執(zhí)行后輸出會比較多,看到下邊這條信息表示成功
- INFO common.Storage: Storage directory /opt/bigdata/hadoop/tmp/dfs/name has been successfully formatted.
在格式化 NameNode 的時候可能會遇到下面這樣的兩個問題。
- 提示 Error: JAVA_HOME is not set and could not be found. 的錯誤,這說明 JAVA_HOME 環(huán)境變量沒有配置好,重新配置一下,或者修改 ./etc/hadoop/hadoop-env.sh 文件把 export JAVA_HOME=${JAVA_HOME} 直接修改成絕對目錄 export JAVA_HOME=/usr/lib/jvm/java-8 既可解決。
- 提示 ERROR namenode.NameNode: java.io.IOException: Cannot create directory /opt/bigdata/hadoop/tmp/dfs/name/current 的錯誤,這是因為配置的 /opt/bigdata/hadoop/tmp 目錄的寫入權(quán)限有問題,可以直接執(zhí)行 sudo chmod -R a+w /home/hadoop/tmp 即可解決。
接下來執(zhí)行 ./sbin/start-dfs.sh 來開啟 NameNode 和 DataNode 守護進程,然后檢查 NameNode、DataNode 和 SecondaryNameNode 是否都已經(jīng)啟動成功,操作如下:
- hadoop@ubuntu:/opt/bigdata/hadoop$ jps
- 4950 Jps
- 3622 SecondaryNameNode
- 3295 DataNode
- 2910 NameNode
啟動成功之后可以用瀏覽器來打開 http://localhost:50070/ 瀏覽 NameNode 的Web界面。

到此為止,Hadoop 單節(jié)點集群(偽分布式)環(huán)境搭建就已經(jīng)成功了, 接下來運行一個 Hadoop 偽分布式實例。因為 Hadoop 單機模式是運行的本地文件系統(tǒng),(偽)分布式模式則是運行的 HDFS 上的數(shù)據(jù)。我們現(xiàn)在 HDFS 中創(chuàng)建用戶目錄,執(zhí)行目命令 ./bin/hdfs dfs -mkdir -p /user/hadoop 即可,執(zhí)行如下命令將輸入文件復制到分布式文件系統(tǒng)中。
- #這個可以不執(zhí)行,因為會自動創(chuàng)建好目錄的
- #./bin/hdfs dfs -mkdir input
- ./bin/hdfs dfs -put etc/hadoop input
- #查看復制到HDFS的文件列表
- ./bin/hdfs dfs -ls input
接下來運行一個 Hadoop 自帶的 mapreduce 實例看看效果吧,直接執(zhí)行如下命令。
- ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-
- 2.9.1.jar grep input output 'dfs[a-z.]+'
使用 ./bin/hdfs dfs -cat output/* 命令查看運行后在 HDFS 上的輸出文件列表,或者使用下面的命令拷貝到本地查看。
- ./bin/hdfs dfs -get output output
- ./cat output/*
關(guān)閉 Hadoop 直接使用 ./sbin/stop-dfs.sh 命令即可。

這里介紹了 Hadoop 環(huán)境搭建的最基本最簡單的方法,我建議最好是邊看邊動手操作一下,這樣可以加深印象和理解,更加有利于掌握相關(guān)知識點。當然,Hadoop 環(huán)境搭建還有其他一些方法,也是實際開發(fā)中常用的方法,比如基于 Yarn、Mesos 等資源調(diào)度系統(tǒng)搭建、使用 Docker 搭建等等,有興趣的朋友們可以嘗試一下這些方法,也歡迎留言交流。