hadoop集羣搭建【僞分佈式】

--整理來源:《hadoop權威指南第三版》、《hadoop官網doc文檔》
--本文原創,轉載請註明


看了好多前人們在hadoop配置上留下的足跡,一時沒有發現一篇全面、通熟易懂的,的確讓我這個新手菜鳥十分苦惱。所以將一些資料進行了整理並加上了自己的理解。能夠幫助後繼者快速完成Hadoop安裝,以便對Hadoop分佈式文件系統(HDFS)和Map-Reduce框架有所體會。 

筆者的配置環境:
  1. Linux distributions:CentOS 7.1 64位,VM虛擬機
  2. 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守護進程。

-->需要準備

  1. 下載最近發佈的hadoop穩定版(http://hadoop.apache.org/releases.html),可以從鏡像網站上下載。這樣速度可能會快一些。記得是在CentOS linux系統中的瀏覽器下載,windows中的文件是無法像平時鼠標一拖直接扔過去的。圖中source指的是源代碼,需要編譯之後才能使用,binary指的是已經編譯好的二進制文件,能直接解壓縮使用,所以我們直接下載binary(約200M)。
  2. 虛擬機的聯網環境。Centos通過yum來安裝軟件,需要聯網的環境。這裏就要吐槽一下使用銳捷客戶端的校園網了,網卡地址衝突,目前已經不想解決了,放棄校園網了。




-->瞭解Hadoop的三種安裝模式

  • 單機模式 (standalone) 單機模式是Hadoop的默認模式。當首次解壓Hadoop的源碼包時,Hadoop無法瞭解硬件安裝環境,便保守地選擇了最小配置。在這種默認模式下所有3個XML文件均爲空。當配置文件爲空時,Hadoop會完全運行在本地。因爲不需要與其他節點交互,單機模式就不使用HDFS,也不加載任何Hadoop的守護進程。該模式主要用於開發調試MapReduce程序的應用邏輯。
  • 僞分佈式模式 (Pseudo-Distributed Mode)在單節點上以一種僞分佈式模式運行。就是假裝是分佈式多臺機,實際上只有一個節點, 所有的守護進程都運行在同一臺機器上。有點像古語裏面的”草木皆兵“,適合個人在沒有硬件的情況下去搭建hadoop集羣,入門學習。所以接下來的主要都是使用僞分佈式去搭建集羣的過程。
  • 完全分佈式模式 (Fully Distributed Mode)就是真正意義上的集羣了,部署在多臺機上,有待學習研究,再來更新。


-->安裝SSH

  • 創建用戶
首先最好先爲CentOS Linux創建一個hadoop的用戶,在以後的漫漫學習長路上,如果只使用單個用戶說不定就劈腿了,我想還是很有必要的。
  1. 在終端(文字界面)中輸入"su",按下回車。
  2. 輸入root賬戶的密碼,這個是在安裝linux的過程中設定的,注意一點:屏幕中不會顯示輸入的內容,實際上是有輸入的,所以看着鍵盤一鼓作氣輸完它,不要停頓。。
  3. 接着在root用戶中輸入 useradd -m hadoop -/bin/bash,創建hadoop用戶,接着輸入“passwd hadoop”爲該用戶設置登錄密碼。
  4. 可爲 hadoop 用戶增加管理員權限,方便部署,避免一些對新手來說比較棘手的權限問題,在當前的root用戶執行:“visudo”,按下Esc鍵,輸入:98,回車,然後如圖下增加一行內容。再按下Esc鍵,輸入":wq",按下回車鍵即可。



幾個注意點:
  1. vi是一種編輯器,輸入“:wq”是保存編輯器修改的方法。
  2. 完成之後,切換用戶或者重啓虛擬機,選擇hadoop用戶登錄。
  3. 之後使用“su”/"su hadoop"可實現用戶的快速切換。

  • 安裝SSH(Secure Shell)
CentOS 使用yum來進行軟件的在線安裝,CentOS linux已經默認安裝了SSH client與SSH server,所以可以不必再安裝,若沒有安裝則可以在終端中輸入下面兩行來完成聯網安裝:
    sudo yum install openssh-clients
    sudo yum install openssh-server

輸入"ssh localhost"測試是否可用,第一次登錄需要輸入“yes”,接着輸入hadoop用戶的密碼,登錄到本機。每次都輸入密碼十分地麻煩,所以可以配置免密鑰登錄。先改變當前目錄,生成祕鑰,加入到授權中,這樣省去帶上路徑的麻煩。下面兩種都是可行的。


幾點說明:
  1. ~表示的是用戶的主文件夾,即“/home/用戶名”,例如現在你使用hadoop用戶,即表示“/home/hadoop”。
  2. -t rsa/-t dsa 指的是生成祕鑰的類型,即加密的方式。上網查DSA 用於簽名,而 RSA 可用於簽名和加密。具體可以上網找下資料,指的是加密的算法。兩種都可以在這裏使用。強迫症患者可以放心了。
  3. 設置好之後,再次輸入“ssh localhost”,就可以免密登錄了。輸入“exit”退出ssh登錄。


-->安裝Java環境

建議選擇Sun公司發行的Java版本,同樣地,CentOS 7.1中也默認安裝了  OpenJDK ,但是CentOS默認安裝的只是 Java JRE,即運行環境,而不是 JDK,我們可以在終端中輸入“java -version”與“rpm -qa | grep java”來查看當前安裝的版本與詳細信息。搬磚之路任重道遠,爲了今後有不時之需,這裏還是需要重新去安裝JDK。




  • 卸載原來的openjdk
上面我們已經通過“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

  • 安裝JDK
在oracle官網上下載linux版的JDK(http://www.oracle.com/technetwork/cn/java/javase/downloads/jdk7-downloads-1880260.html ),根據CentOS的版本選擇位數,x86指的是32位,x64指的是64位。我們選擇64位。有兩種方式來下載:
  1. 直接在虛擬機的瀏覽器中下載,並存放在/usr/local/目錄下。
  2. 在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
在終端中輸入命令將hadoop的發行版進行解壓,我們這將其安裝到/usr/local中。輸入“sudo tar -zxf ~/下載/hadoop-2.7.1.tar.gz -C /usr/local“。解壓完成後進入hadoop的安裝目錄,更換文件名,方便今後使用,同時也可以進入bin目錄下查看hadoop的版本信息。

cd /usr/local/
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/

  1. 配置conf/hadoop-env.sh文件: 編輯 conf/hadoop-env.sh文件,添加一行export JAVA_HOME=/usr/java/jdk1.7.0_71
  2. 配置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>

  • 啓動Hadoop
  1. 格式化一個新的分佈式文件系統: .bin/hadoop namenode -format
  2. 啓動Hadoop守護進程:$ bin/start-all.sh,表示同時啓動HDFS與Map/Reduce,也可以使用$ bin/start-dfs.sh與$ bin/start-mapred.sh分別來啓動HDFS與MapReduce。
  3. 觀察啓動日誌,啓動完成後可輸入“jps”來判斷是否啓動成功,若啓動不成功,可使用“bin/stop-all.sh ”來停止守護進程,再次嘗試啓動。
  4. 可以瀏覽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已經成功邁出了一步,人生是個持續/不斷積累的過程,小象到了最後就會跳舞了。
























發佈了35 篇原創文章 · 獲贊 220 · 訪問量 22萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章