--整理來源:《hadoop權威指南第三版》、《hadoop官網doc文檔》
--本文原創,轉載請註明
看了好多前人們在hadoop配置上留下的足跡,一時沒有發現一篇全面、通熟易懂的,的確讓我這個新手菜鳥十分苦惱。所以將一些資料進行了整理並加上了自己的理解。能夠幫助後繼者快速完成Hadoop安裝,以便對Hadoop分佈式文件系統(HDFS)和Map-Reduce框架有所體會。
筆者的配置環境:
- Linux distributions:CentOS 7.1 64位,VM虛擬機
- Hadoop 2.7.1(Stable)
-->先決條件
Hadoop目前同時支持Linux與Windows平臺,在Linux上已經得到了較好的運行與驗證。在Windows下需要安裝Cygwin(https://www.cygwin.com/)插件提供除了JDK,SSH之外的shell支持。前面的linux知識中也提到Window優勢在於用戶界面的親和,系統操作容易上手,網上也有大牛在windows上玩得十分的爽快,鑑於自己先天性的手抽綜合症,還是選擇了大衆化的虛擬機+Linux,不然玩着玩着把整個windows玩崩了,就是在玩火了。
- GNU/Linux是產品開發和運行的平臺。 Hadoop已在有2000個節點的GNU/Linux主機組成的集羣系統上得到驗證。
- Win32平臺是作爲開發平臺支持的。由於分佈式操作尚未在Win32平臺上充分測試,所以還不作爲一個生產平臺被支持。
-->需要的環境
- JavaTM1.5.x,必須安裝,建議選擇Sun公司發行的Java版本。
- ssh 必須安裝並且保證 sshd一直運行,以便用Hadoop 腳本管理遠端Hadoop守護進程。
-->需要準備
- 下載最近發佈的hadoop穩定版(http://hadoop.apache.org/releases.html),可以從鏡像網站上下載。這樣速度可能會快一些。記得是在CentOS
linux系統中的瀏覽器下載,windows中的文件是無法像平時鼠標一拖直接扔過去的。圖中source指的是源代碼,需要編譯之後才能使用,binary指的是已經編譯好的二進制文件,能直接解壓縮使用,所以我們直接下載binary(約200M)。
- 虛擬機的聯網環境。Centos通過yum來安裝軟件,需要聯網的環境。這裏就要吐槽一下使用銳捷客戶端的校園網了,網卡地址衝突,目前已經不想解決了,放棄校園網了。
-->瞭解Hadoop的三種安裝模式
- 單機模式
(standalone):
單機模式是Hadoop的默認模式。當首次解壓Hadoop的源碼包時,Hadoop無法瞭解硬件安裝環境,便保守地選擇了最小配置。在這種默認模式下所有3個XML文件均爲空。當配置文件爲空時,Hadoop會完全運行在本地。因爲不需要與其他節點交互,單機模式就不使用HDFS,也不加載任何Hadoop的守護進程。該模式主要用於開發調試MapReduce程序的應用邏輯。
- 僞分佈式模式
(Pseudo-Distributed Mode):在單節點上以一種僞分佈式模式運行。就是假裝是分佈式多臺機,實際上只有一個節點,
所有的守護進程都運行在同一臺機器上。有點像古語裏面的”草木皆兵“,適合個人在沒有硬件的情況下去搭建hadoop集羣,入門學習。所以接下來的主要都是使用僞分佈式去搭建集羣的過程。
- 完全分佈式模式 (Fully Distributed Mode):就是真正意義上的集羣了,部署在多臺機上,有待學習研究,再來更新。
-->安裝SSH
首先最好先爲CentOS Linux創建一個hadoop的用戶,在以後的漫漫學習長路上,如果只使用單個用戶說不定就劈腿了,我想還是很有必要的。
- 在終端(文字界面)中輸入"su",按下回車。
- 輸入root賬戶的密碼,這個是在安裝linux的過程中設定的,注意一點:屏幕中不會顯示輸入的內容,實際上是有輸入的,所以看着鍵盤一鼓作氣輸完它,不要停頓。。
- 接着在root用戶中輸入
useradd -m hadoop -s /bin/bash,創建hadoop用戶,接着輸入“passwd
hadoop”爲該用戶設置登錄密碼。
-
可爲 hadoop 用戶增加管理員權限,方便部署,避免一些對新手來說比較棘手的權限問題,在當前的root用戶執行:“visudo”,按下Esc鍵,輸入:98,回車,然後如圖下增加一行內容。再按下Esc鍵,輸入":wq",按下回車鍵即可。
幾個注意點:
- vi是一種編輯器,輸入“:wq”是保存編輯器修改的方法。
- 完成之後,切換用戶或者重啓虛擬機,選擇hadoop用戶登錄。
- 之後使用“su”/"su hadoop"可實現用戶的快速切換。
CentOS 使用yum來進行軟件的在線安裝,CentOS linux已經默認安裝了SSH client與SSH server,所以可以不必再安裝,若沒有安裝則可以在終端中輸入下面兩行來完成聯網安裝:
sudo yum install openssh-clients
sudo yum install openssh-server
輸入"ssh localhost"測試是否可用,第一次登錄需要輸入“yes”,接着輸入hadoop用戶的密碼,登錄到本機。每次都輸入密碼十分地麻煩,所以可以配置免密鑰登錄。先改變當前目錄,生成祕鑰,加入到授權中,這樣省去帶上路徑的麻煩。下面兩種都是可行的。
幾點說明:
- ~表示的是用戶的主文件夾,即“/home/用戶名”,例如現在你使用hadoop用戶,即表示“/home/hadoop”。
- -t rsa/-t dsa 指的是生成祕鑰的類型,即加密的方式。上網查DSA 用於簽名,而 RSA 可用於簽名和加密。具體可以上網找下資料,指的是加密的算法。兩種都可以在這裏使用。強迫症患者可以放心了。
- 設置好之後,再次輸入“ssh localhost”,就可以免密登錄了。輸入“exit”退出ssh登錄。
-->安裝Java環境
建議選擇Sun公司發行的Java版本,同樣地,CentOS 7.1中也默認安裝了
OpenJDK ,但是CentOS默認安裝的只是
Java JRE,即運行環境,而不是 JDK,我們可以在終端中輸入“java -version”與“rpm -qa | grep java”來查看當前安裝的版本與詳細信息。搬磚之路任重道遠,爲了今後有不時之需,這裏還是需要重新去安裝JDK。
上面我們已經通過“rpm -qa | grep java”輸出了linux自帶jdk的具體信息,接着在終端【root】中輸入命令來卸載openjdk,不斷版本的centos自帶的openjdk型號也不同,大家要寫準版本號。
[root@localhost ~]# rpm -e --nodeps java-1.7.0-openjdk-headless-1.7.0.75-2.5.4.2.el7_0.x86_64
[root@localhost ~]# rpm -e --nodeps java-1.7.0-openjdk-1.7.0.75-2.5.4.2.el7_0.x86_64
在網上看到有出現這樣的情況,還是記錄下來:如果出現找不到openjdk source的話,那麼還可以這樣卸載
yum -y remove java-1.7.0-openjdk-headless-1.7.0.75-2.5.4.2.el7_0.x86_64
yum -y remove java-1.7.0-openjdk-1.7.0.75-2.5.4.2.el7_0.x86_64
- 直接在虛擬機的瀏覽器中下載,並存放在/usr/local/目錄下。
- 在windows上下載,通過ftp的方式上傳至linux的/usr/local/目錄。再次吐槽一下校園網,虛擬機連不上網,所以用這個方式更加簡單粗暴了。windows與虛擬機linux通信需要設置靜態IP/防火牆/ftp等,後續會更新。
下載完成後,在終端中輸入“ rpm -ivh jdk-7u79-linux-x64.rpm”來執行安裝命令,JDK默認安裝在/usr/java下。完成後,可以輸入
"javac" "java"“java -version”等命令來驗證。
與我們熟悉的windows操作系統類似,需要設置好系統的環境變量,就像地鐵裏面功能齊全的指示一樣,告訴行人怎樣坐車怎樣出站。在root用戶下輸入“vi /etc/profile ”,在最後加入以下幾行:
JAVA_HOME=/usr/java/jdk1.7.0_71
CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME CLASS_PATH PATH
當然也可以像windows一樣直接找到這個配置文件在圖形界面編輯,但建議還是多用用命令行的方式,選擇了linux,騷年,還是入鄉隨俗吧,不要過多地依賴圖形界面。執行下面命令立即生效#source /etc/profile,也可以#
reboot 重啓機器,喝個水/走一走。
-->安裝Hadoop
準備好之前瀏覽器中已經下載好的hadoop-2.7.1.tar.gz文件,或者通過ftp從windows本機中上傳至linux文件目錄中,確保文件的完整性。
在終端中輸入命令將hadoop的發行版進行解壓,我們這將其安裝到/usr/local中。輸入“
sudo tar -zxf ~/下載/hadoop-2.7.1.tar.gz -C /usr/local“。解壓完成後進入hadoop的安裝目錄,更換文件名,方便今後使用,同時也可以進入bin目錄下查看hadoop的版本信息。
sudo mv ./hadoop-2.7.1/
./hadoop
cd .
/hadoop/bin
hadoop version
Hadoop默認的模式爲單機模式,完成了以上即相當於搭建好了hadoop的單機模式,不需要其它的配置即可運行,弄到這可以先在網上找些例子刷下成就感再往下。
搭建僞分佈式還需要完成一些配置, Hadoop 的配置文件位於 /usr/local/hadoop/etc/hadoop/
中,僞分佈式需要修改三個配置文件 core-site.xml ,
hdfs-site.xml 和conf/mapred-site.xml
。
--以下的conf指的是/usr/local/hadoop/etc/hadoop/
- 配置conf/hadoop-env.sh文件:
編輯 conf/hadoop-env.sh文件,添加一行export JAVA_HOME=/usr/java/jdk1.7.0_71
- 配置hadoop環境變量:類似JDK配置環境變量一樣,爲了方便以後使用Hadoop的命令,可以配置hadoop的環境變量“vi /etc/profile ”,添加後執行“source /etc/profile”生效。
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_INSTALL=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
3. 配置 conf/core-site.xml,輸入“vi /usr/local/hadoop/etc/hadoop/core-site.xml
”
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/tmp</value>
<description>A base for other temporary directories.</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
4. 配置 conf/hdfs-site.xml,與上面的方法相同。
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/data</value>
</property>
</configuration>
5. 配置 conf/mapred-site.xml
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>hadoop-test1:9001</value>
</property>
</configuration>
- 格式化一個新的分佈式文件系統:$
.bin/hadoop namenode -format
- 啓動Hadoop守護進程:$ bin/start-all.sh,表示同時啓動HDFS與Map/Reduce,也可以使用$ bin/start-dfs.sh與$ bin/start-mapred.sh分別來啓動HDFS與MapReduce。
- 觀察啓動日誌,啓動完成後可輸入“jps”來判斷是否啓動成功,若啓動不成功,可使用“bin/stop-all.sh
”來停止守護進程,再次嘗試啓動。
-
可以瀏覽NameNode和JobTracker的網絡接口,它們的地址默認爲:
這樣hadoop的僞分佈式模式就算是啓動成功了, 與上面的單機模式讀取本機數據不同的是,僞分佈式讀取的是 HDFS 上的數據。我們就可以在hadoop僞分佈式上運行hadoop實例了。
1.將輸入文件拷貝到分佈式文件系統:
$
./bin/hdfs dfs -mkdir input
$
./bin/hdfs dfs -put ./etc/hadoop/*.xml input
2.運行發行版提供的示例程序:
$
bin/hadoop jar hadoop-*-examples.jar grep input output 'dfs[a-z.]+'
3.查看輸出文件:將輸出文件從分佈式文件系統拷貝到本地文件系統查看:
$
bin/hdfs dfs -get output output
$ cat output/*
或者在分佈式文件系統上查看輸出文件:
$ bin/hdfs dfs -cat output/*
到這裏,恭喜你向hadoop已經成功邁出了一步,人生是個持續/不斷積累的過程,小象到了最後就會跳舞了。