HADOOP安裝指南-Ubuntu15.10和hadoop2.7.2

Ubuntu15.10中安裝hadoop2.7.2安裝手冊html

太初java

目錄node

1.      Hadoop單點模式... 2linux

1.1        安裝步驟... 2web

0.環境和版本... 2正則表達式

1.在ubuntu中建立hadoop用戶... 2shell

2.安裝ssh. 3apache

3.安裝java環境... 3ubuntu

4.安裝hadoop. 4vim

5.測試... 5

2.      Hadoop僞分佈式... 5

2.1        安裝步驟... 5

0.環境和版本... 6

1.      配置core-site.xml文件... 6

2.      配置hdfs-site.xml文件... 6

3.      格式化namenode. 7

4.      啓動HADOOP. 7

5.      JPS命令驗證HADOOP進程... 8

6.      WEB界面查HDFS信息... 8

7.      經過命令操做HDFS文件系統... 9

8.      測試... 9

3.      Hadoop僞分佈式(+YARN)... 10

3.1        安裝步驟... 10

4.      Hadoop集羣... 12

4.1        安裝步驟... 12

5.      其餘補充... 18

6.1        LINUX經驗... 18

6.1.1         開啓bash的自動完成功能... 18

6.1.2         開啓ubuntu虛擬機和win10宿主機的vmware tool(共享文件)... 18

6.1.3         Ubuntu的Terminal快捷方式... 19

6.1.4         Find命令舉例... 19

6.1.5         PATH變量簡述... 19

6.1.6         Ubuntu中安裝vmware tools. 19

6.2        雜... 19

6.2.1         如何保存被禁止拷貝或存盤的HTML?... 19

6.      資料... 20

 

 

 

 

特別說明:

本文檔是筆者研究了大量網絡資料,而後本身實踐成功後,彙總各方資料的結果。總結和分享的目的只有一個,讓其餘學友能少走彎路,集中精力解決業務問題,而不是環境搭建問題。在本文中引用了不少網絡資料,圖片,名稱,信息等內容,若是涉及版權問題,請原做者及時聯繫並告知。謝謝。

       「資料」章節收納了本文用到後未用到的資源和鏈接,用於分享。

        因能力所限,錯漏之處敬請見諒。

 感謝網絡各位大神的信息分享,是大家的努力推進者技術的發展!

[Spark安裝運行手冊隨後貼上,謝謝!]

 

1.   Hadoop單點模式

1.1   安裝步驟

0.環境和版本

ubuntu 15.10

jdk 1.8.84

hadoop 2.7.2

1.在ubuntu中建立hadoop用戶

(備註:在GUI(圖形)界面中可用「ctrl+Alt+T」快捷鍵打開Terminal(終端窗口),並輸入下列命令。)

在Ubuntu終端窗口中,複製粘貼的快捷鍵須要加上 shift,粘貼是 ctrl+shift+v;拷貝是ctrl+shift+c;等等)

$ sudo useradd -m hadoop -s /bin/bash //新建hadoop用戶

$ sudo passwd hadoop //修改密碼爲hadoop,等於帳號,方便操做;

$ sudo adduser hadoop sudo //爲hadoop增長管理員的權限,以避免以後出現權限問題。

(備註:也可打開sudoers文件,給hadoop用戶賦予和root同樣的權限:$sudo gedit /etc/sudoers  ;而後編輯增添以下那句hadoop   ALL(ALL:ALL)  ALL

【重要】GUI中註銷當前帳戶(root或Ubuntu安裝初始用戶,我這裏是ya),並隨後用hadoop再次登錄。

(可選:$sudo apt-get update //由於會用apt按照其餘軟件,若是未更新apt,有可能沒法安裝其餘軟件,可選!)

若出現以下 「Hash校驗和不符」 的提示,可經過更改軟件源來解決。若沒有該問題,則不須要更改。

解決辦法:【系統設置】(齒輪圖標),選擇【軟件和更新】,點擊 「下載自」 右側的方框,選擇【其餘節點】,選擇服務器,在列表中選中【mirrors.aliyun.com】,並點擊右下角的【選擇服務器】,會要求輸入用戶密碼,輸入便可。點擊關閉後,此時會提示列表信息過期,點擊【從新載入】,耐心等待更新緩存。完成會自動關閉【軟件和更新】這個窗口。再嘗試按照apt。若是仍是提示錯誤,請選擇其餘服務器節點如 mirrors.163.com再嘗試。更新成功後,再次執行 sudo apt-get update 就正常了。

 

2.安裝ssh

$sudo apt-get install openssh-server //在Terminal中容許命令,下同

(備註:用yes來continue繼續安裝,通常install安裝包默認都選y或yes就可)

(備註:Ubuntu 默認已安裝了 SSH client,此外還須要安裝 SSH server

$sudo /etc/init.d/ssh start //安裝好ssh服務後就打開它(還沒有放入自啓動!)

$ ps -e | grep ssh  //查看ssh服務是否正確啓動

$ ssh-keygen -t rsa -P ""   //設置免密碼登陸,【在輸入路徑那兒直接回車!】

(備註:原理多是設定空字符串爲基礎來生成的密鑰對!)

(備註:在/home/hadoop/.ssh裏面生成兩個文件 id_rsa、id_rsa.pub,前者是私鑰,後者是公鑰)

$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys  //將公鑰追加到authorized_keys裏面

(備註:它保存全部容許以當前用戶身份登陸到ssh客戶端用戶的公鑰內容;「~」波折號表明用戶主文件夾;)

$ssh hadoop@localhost //登陸ssh(其餘linux的Terminal重也可嘗試如此操做:ssh hadoop@(IP|HOSTNAME);

(備註:第一次須要輸入yes,確認初次登陸,後續不用。)

$exit //退出ssh

(備註:userA@linuxPC1經過ssh登陸了userB@linuxPC2,那麼就登陸uesrA得到了userB的權限,並等價於userB經過Terminal在linuxPC2上執行命令,此爲ssh方便功能之一)

 

3.安裝java環境

下載jdk二進制編譯包

下載用wget軟件,wget軟件在ubuntu下的安裝命令以下:

sudo apt-get install wget  //按照wget程序,可直接經過「wget url連接 -o 輸出文件名」來下載「*.tar.gz」。

(備註:舉例用wget下載jdk包的命令格式爲:wget http://download.oracle.com/otn-pub/java/jdk/8u51-b16/jdk-8u51-linux-x64.tar.gz?AuthParam=1437810421_1d235bda6e9428e1caa05d0fd7951c6d -o jdk-x64.tar.gz

(備註:建議直接在百度搜索「oracle JDK download」找到合適OS/64/32的JDK並直接經過瀏覽器下載到Ubuntu,再進行以下操做更放心!)

(備註:在Ubuntu的GUI中經過firefox下載JDK,默認保存路徑在「/home/hadoop/下載」中,path含有中文,若是Ubuntu配置了「雙拼/拼音」輸入法,則能夠在Terminal下使用中文!)

 

$sudo cp jdk-x64.tar.gz /usr/local/   //因hadoop權限不夠,用sudo拷貝JDK到合適目錄

$cd /usr/local/    //進入JDK包所在目錄

$sudo tar xzvf jdk-x64.tar.gz  //sudo來釋放JDK

(備註:本人下載是當時最新的JDK1.8.0_74,故在/usr/local/目錄下解壓生成的jdk目錄是/usr/local/jdk1.8.0_74

 

$sudo apt-get install vim  //Ubuntu15.10下默認vim下載但未安裝,請下載安裝,確保vim可用;

$sudo vim /etc/profile    //配置以下JDK相關路徑到profile

(備註:這幾行配置應該加載到/etc/profile文件的「if [ -d /etc/profile.d ]; then」這一章節中,「done」行以後,「unset i行以前!另外,linux配置等號兩邊不能空格!)

export JAVA_HOME=/usr/local/jdk1.8.0_74

export PATH=$JAVA_HOME/bin:$PATH

export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

 

(備註:vim打開文本文件後,提示符默認在左上角且爲命令模式,請立刻輸入「i」則進入「插入」模式;則可上下左右移動提示符並修改文本;

 完成後立刻用esc退出插入模式;隨後用「shift+冒號」進入底部命令行模式,用wq命令保存並退出,q直接退出(若是未作任何修改);若是修改

 則沒法q,而必須用q!來強制直接退出(不保存);其餘請詳查web資料;)

 

$source /etc/profile    //使修改的profile當即生效

$java –version   //測試jdk是否安裝成功;能正確顯示JDK版本的就算安裝成功;

 

 

4.安裝hadoop

$sudo cp hadoop-2.7.2.tar.gz /usr/local/     //從hadoop官網下載最新hadoop包,好比2.7.2並拷貝到目的目錄

$cd /usr/local

$sudo tar xzvf hadoop-2.7.2.tar.gz  //解壓;只能下載tar.gz給Ubuntu用;rpm格式是redhat專用

$sudo mv hadoop-2.7.2 hadoop   //更名爲hadoop方便後續操做

$sudo chown hadoop:hadoop -R -f /usr/local/hadoop/   //修改目錄主人

$sudo vim /etc/profile   //vim可用後,再次編輯profile,添加配置;

 

export HADOOP_INSTALL=/usr/local/hadoop

export PATH=$PATH:$HADOOP_INSTALL/bin:$HADOOP_INSTALL/sbin

export HADOOP_MAPRED_HOME=$HADOOP_INSTALL

export HADOOP_COMMON_HOME=$HADOOP_INSTALL

export HADOOP_HDFS_HOME=$HADOOP_INSTALL

export YARN_HOME=$HADOOP_INSTALL

export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_INSTALL/lib/native

export HADOOP_OPTS="-Djava.library.path=$HADOOP_INSTALL/lib"

 

$ /usr/local/hadoop/bin/hadoop version //查看hadoop的版本及校驗和等信息!

 

(備註: 若是安裝了vmware tool並啓用了共享目錄,則能夠從宿主PC拷貝文本和文件到虛擬機中;或經過teamviewer等軟件拷貝文本和晚間!)

 

特別說明:校驗MD5

$cat ~/下載/hadoop-2.7.2.tar.gz.mds | grep 'MD5'  //可列出md5檢驗值

$head -n 6 ~/下載/hadoop-2.7.2.tar.gz.mds   //也可列出2.7.2校驗值

md5sum ~/下載/hadoop-2.7.2.tar.gz | tr "a-z" "A-Z"   //可根據二進制包來計算md5值並轉爲大寫方便比較;

若文件不完整則這兩個值通常差異很大,可簡單對比前幾個字符和後幾個字符便可。

 

補充:

Ubuntu15.10包含:md5sum,sha1sum,sha256sum等命令,經過man來查他們用法,既能夠生成一個二進制文件的校驗和,也能夠驗證校驗和是否正確要求校驗和關聯的二進制文件放在同一個目錄)。

好比校驗hadoop文件可用命令: sha256sum  --check  hadoop-2.7.2-tar.gz.mds  (若是它是正確的SHA256格式,sha256sum會找到它內部指向的原始二進制文件,好比hadoop-2.7.2-tar.gz,併爲它生成臨時的SHA256來比較是否一致!)

目前看hadoop上下載的2.7.2二進制安裝包是好的,但它的SHA256文件是不可視的亂碼文件(非ANSI或UTF-8,也許是Unicode),因此可能以上命令及用法及猜測都是有問題的,畢竟hadoop網站不會錯!

 

5.測試

進入 hadoop目錄:

$cd /usr/local/hadoop  //進入hadoop目錄

$mkdir ./input    //example WordCount不會自動創建input目錄,因此須要手動創建;

$cp *.txt ./input/    //拷貝若干文本文件到input讓WordCount程序能夠統計詞頻;

$rm -f -r /usr/local/hadoop/output/

     //WordCount程序不會自動刪除output,每次啓動若是沒有手動刪除output就出錯!

$./bin/hadoop jar share/hadoop/mapreduce/sources/hadoop-mapreduce-examples-2.7.2-sources.jar org.apache.hadoop.examples.WordCount input output   //wordcountl例子,統計input目錄下全部文件可讀詞彙的詞頻並寫入output中

$cat ./output/*          //查看運行結果

 

$./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar grep ./input ./output 'dfs[a-z.]+' // grep 例子,將 input 文件夾中的全部文件做爲輸入,篩選當中符合正則表達式 dfs[a-z.]+ 的單詞並統計出現的次數,最後輸出結果到 output 文件夾中

$cat ./output/*          //查看運行結果

 

$ ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar //查看更多Hadoop 附帶的例子說明,包括 wordcount、terasort、join、grep 等。

 

 

(備註:運行官方測試樣例如上;遇到問題請添加input目錄,刪除output目錄;結果在output\part-r-00000中;)

(備註:特別注意,若是經過VMware的共享目錄,放了一些window的文本文件到hadoop的input目錄,由於「文件結果linux和win不一樣」則hadoop會報錯,但初看仍然會繼續執行獲得結果!)

 

#####至此,單點hadop的安裝和demo測試完成!(不含hdfs/yarn僞分佈式安裝內容) #####

 

2.   Hadoop僞分佈式

僞分佈式模式是基於單機模式順利安裝測試經過後的進階嘗試;

其使用的軟件版本和環境都和單機模式沒有區別,僅是經過新增配置來使僞分佈模式起效並取代單機模式的運行;

後面有關於模式之間切換的介紹;

2.1   安裝步驟

0.環境和版本

(徹底和單機模式一致)

ubuntu 15.10

jdk 1.8.84

hadoop 2.7.2

1.    配置core-site.xml文件

(說明:Hadoop 能夠在單節點上以僞分佈式的方式運行;Hadoop 進程以分離的 Java 進程來運行,節點既做爲 NameNode 也做爲 DataNode,同時,讀取的是 HDFS 中的文件,而再也不是Ubuntu操做系統的ext4下面的文件;)

 

Hadoop 的配置文件位於 /usr/local/hadoop/etc/hadoop/中,僞分佈式須要修改2個配置文件 core-site.xml 和 hdfs-site.xml。配置文件是 xml 格式,每一個配置以聲明 property 的 name 和 value 的方式來實現。修改配置文件 core-site.xml原來內容爲空的標籤「<configuration></configuration>」

(備註:由於是XML文件,不是普通INI/CONF/TXT等配置文件,因此不能夠用#井號作備註,應該用<!—XXX -->來添加註釋!)

修改成下面配置:

<configuration>

        <property>

             <name>hadoop.tmp.dir</name>

             <value>file:/usr/local/hadoop/tmp</value>

             <description>Abase for other temporary directories.</description>

        </property>

        <property>

             <name>fs.defaultFS</name>

             <value>hdfs://localhost:9000</value>

        </property>

</configuration>

 

 

2.    配置hdfs-site.xml文件

一樣修改配置文件 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>

XML

 

 

(說明:雖然官方教程只需配置 fs.defaultFS 和 dfs.replication兩項就能夠運行hadoop,但若沒有配置 hadoop.tmp.dir 參數,則默認使用的臨時目錄爲 /tmp/hadoo-hadoop,而這個目錄在重啓時有可能被系統清理掉,致使必須從新執行 format 才行。因此咱們進行了設置,同時也指定 dfs.namenode.name.dir 和 dfs.datanode.data.dir,不然在接下來的步驟中可能會出錯。)

 

3.    格式化namenode

./bin/hdfs  namenode –format    //配置完成後,需格式化 NameNode方能使用;

(備註:成功的話,會看到 「successfully formatted」 和 「Exitting with status 0″ 的提示;若爲 「Exitting with status 1″ 則是出錯。)

 

 

(注意:這一步若提示 Error: JAVA_HOME is not set and could not be found. 的錯誤,則須要在文件 ./etc/hadoop/hadoop-env.sh 中設置 JAVA_HOME 變量;好比找到「export JAVA_HOME=${JAVA_HOME}」,改成「export JAVA_HOME=/usr/local/jdk1.8.0_74,並從新嘗試格式化便可。最好老是添加!

 

4.    啓動HADOOP

./sbin/start-dfs.sh    //開啓 NameNode 和 DataNode 守護進程

(備註:出現SSH提示,輸入yes便可)

 

 

 

注意:啓動時可能會出現以下 WARN 提示:WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable WARN 提示能夠忽略,並不會影響正常使用。但最好修復它;

解決方法是編輯hadoop-env.sh, 在最後添加「export HADOOP_OPTS="-Djava.library.path=$HADOOP_INSTALL/lib:$HADOOP_INSTALL/lib/native」

 

 

5.    JPS命令驗證HADOOP進程

啓動完成後,能夠經過命令 jps 來判斷是否成功啓動,若成功啓動則會列出以下進程: 「NameNode」、」DataNode」 和 「SecondaryNameNode」;JPS命令之後會屢次用於yarn和真實分佈式模式中;

 

Jps  //經過jps查看啓動的Hadoop進程

 

 

錯誤1:若是 SecondaryNameNode 沒有啓動,請運行 sbin/stop-dfs.sh 關閉進程,而後再次嘗試啓動嘗試

錯誤2:若是沒有 NameNode 或 DataNode ,那就是配置不成功,請仔細檢查以前步驟,經過查看啓動日誌排查緣由。

錯誤3:若是DataNode沒啓動,通常狀況下,可嘗試以下方法恢復。但這會刪除 HDFS中原有數據,請謹慎!):

./sbin/stop-dfs.sh   //關閉hadoop(hdfs)

rm -r ./tmp  //刪除 tmp 文件,這會刪除 HDFS 中原有的全部數據

./bin/hdfs namenode -format  //從新格式化 NameNode

./sbin/start-dfs.sh  //重啓

 

排錯方法:可查啓動日誌來排查緣由,注意幾點:

啓動時會提示形如 「DBLab-XMU: starting namenode, logging to /usr/local/hadoop/logs/hadoop-hadoop-namenode-DBLab-XMU.out」,其中 DBLab-XMU 對應你的機器名,但其實啓動日誌信息是記錄在 /usr/local/hadoop/logs/hadoop-hadoop-namenode-DBLab-XMU.log 中,因此應該查看這個後綴爲 .log 的文件;啓動日誌都是追加的,拉到最後查看最新內容,log每行有時間信息。出錯一般寫着 Fatal、Error、Warning 或者 Java Exception 的地方。可在網上搜索出錯信息,找到相關解決方法。

 

6.    WEB界面查HDFS信息

http://localhost:50070/;當成功啓動後,能夠訪問 Web 界面來查看 NameNode 和 Datanode 信息,還可在線查看 HDFS 中的文件。在「Utilities」菜單下「Browse the file system」中可看到在hdfs上創建的目錄「/user/hadoop」等,而在ubuntu的文件系統ext4上看不到!

 

 

7.    經過命令操做HDFS文件系統

單機模式下運行「grep/WordCount」等例子讀取的是Ubuntu的ext4中的本地數據,而僞分佈式讀取的則是 HDFS 上的數據。爲了使用 HDFS,須要在 HDFS 中建立用戶目錄,增刪改查文件和目錄。

./bin/hdfs dfs -mkdir -p /user/hadoop  //在HDFS建立hadoop用戶

./bin/hdfs dfs -mkdir input      //新建hadoop用戶後自動轉到其目錄下,如今新建input目錄,在hadoop目錄下

./bin/hdfs dfs -put ./etc/hadoop/*.xml input   //將Ubuntu的ext4目錄下的xml文件拷貝到hdsf的hadoop\input目錄下;

./bin/hdfs dfs -ls input     //複製完成後,查看文件列表;

 

(說明:僞分佈式模式運行的MapReduce 做業的方式跟單機模式相同,但區別在於僞分佈式讀取的是HDFS中的文件,而不是Ubuntu的ext4下的output和input目錄;能夠將單機模式步驟中建立的本地 input 文件夾,輸出結果 output 文件夾都刪掉來驗證這一點)。

 

8.    測試

執行「grep」example:

hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar grep input output 'dfs[a-z.]+'

$ ./bin/hdfs dfs -cat  output/*      //查看hdfs上的結果;

執行「wordcount」example:

./bin/hadoop jar share/hadoop/mapreduce/sources/hadoop-mapreduce-examples-2.7.2-sources.jar org.apache.hadoop.examples.WordCount input output

(備註:此句和單點運行模式時如出一轍,可是由於hadoop啓動爲僞分佈式,因此從hdfs裏的input讀數據並寫入output中去,不會再訪問ubuntu的文件系統ext4了。結果能夠經過本機50070的portal登錄查看hdfs文件系統的變化,並下載結果到ext4中。)

 

查看運行結果(查看的是位於 HDFS 中的輸出結果):

./bin/hdfs dfs -cat output/*

 

 

也可從HDFS取回運行結果到本地ext:

rm -r ./output    # 先刪除本地的 output 文件夾(若是存在)

./bin/hdfs dfs -get output ./output     # 將 HDFS 上的 output 文件夾拷貝到本機

cat ./output/*

 

(再次運行)Hadoop僞分佈式的grep

./bin/hdfs dfs -rm -r output    # 刪除 output 文件夾

(備註:Hadoop 運行grep或wordcount時,輸出目錄不可存在,不然會提示錯誤 「org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory hdfs://localhost:9000/user/hadoop/output already exists」 ,需先刪除 output 文件夾;在實際開發應用程序時,也可考慮在程序中加上以下代碼,能在每次運行時自動刪除輸出目錄,避免繁瑣的命令行操做,以下:)

Configuration conf = new Configuration();

Job job = new Job(conf);

 /* 刪除輸出目錄 */

Path outputPath = new Path(args[1]);

outputPath.getFileSystem(conf).delete(outputPath, true);

 

 

關閉 Hadoop:

./sbin/stop-dfs.sh

 

再次啓動 hadoop 時,無需進行 NameNode 的初始化,只須要運行 ./sbin/start-dfs.sh 就能夠!

 

3.   Hadoop僞分佈式(+YARN)

3.1   安裝步驟

 

啓動YARN

啓動 Hadoop 後,沒有原來的JobTracker 和 TaskTracker,由於新版Hadoop使用了新的MapReduce V2框架,稱爲 YARN(Yet Another Resource Negotiator)。YARN 從 MapReduce 中分離出來,負責資源管理與任務調度。

YARN 運行於 MapReduce 之上,提供了高可用性、高擴展性。僞分佈式HADOOP能夠不安裝和啓動YARN。

經過 ./sbin/start-dfs.sh啓動Hadoop後,僅是啓動了供MapReduce使用的HDFS環境,爲了啓動 YARN來負責資源管理與任務調度。須要修改配置文件 mapred-site.xml:

mv ./etc/hadoop/mapred-site.xml.template ./etc/hadoop/mapred-site.xml //先從默認template重命名

用vim編輯以下:

<configuration>

        <property>

             <name>mapreduce.framework.name</name>

             <value>yarn</value>

        </property>

</configuration>

再修改配置文件 yarn-site.xml:

<configuration>

        <property>

             <name>yarn.nodemanager.aux-services</name>

             <value>mapreduce_shuffle</value>

            </property>

</configuration>

./sbin/start-yarn.sh      /YARN(需先啓動HDFS/MR)

./sbin/mr-jobhistory-daemon.sh start historyserver  //啓動歷史服務器,才能在Web中查看任務運行狀況;

經過 jps命令查看到(NodeManager,ResourceManager,NameNode,DataNode)進程都啓動了;

啓動 YARN 以後,運行實例的方法仍是同樣,但資源管理方式和任務調度不一樣。觀察日誌信息能夠發現,不啓用 YARN 時,是 「mapred.LocalJobRunner」 在跑任務,啓用 YARN 以後,是 「mapred.YARNRunner」 在跑任務。啓動 YARN的好處是經過Web界面http://localhost:8088/cluster能夠查看任務運行狀況:

 

YARN 主要是爲集羣提供更好的資源管理與任務調度,然而這在單機上體現不出價值,反而會使程序跑得稍慢些。

若是不想啓動 YARN,務必把配置文件 mapred-site.xml重命名,好比改回到mapred-site.xml.template,須要用時再改回來。不然該配置文件存在但未開啓 YARN的狀況下,運行實例程序會提示 「Retrying connect to server: 0.0.0.0/0.0.0.0:8032″ 的錯誤,這就是爲什麼該配置文件初始默認文件名爲 mapred-site.xml.template的緣由。

(備註:先關閉yarn再rename它的配置比較好!Ubuntu用mv而不是rename來修改文件名稱! Ubuntu下面rename是另外一個較爲複雜但強大的正則表達式命令,通常用來批量重命名文件之用)

./sbin/stop-yarn.sh    //關閉YARN

./sbin/mr-jobhistory-daemon.sh stop historyserver    //關閉history服務器,WEB也沒了;

 

補充hdfs命令:

hadoop@ya-chy-pc-vm:/usr/local/hadoop$ hadoop fs -ls -R /        列出虛擬hdfs的根目錄/下全部文件 –R是遞歸

hadoop@ya-chy-pc-vm:/usr/local/hadoop$ ./bin/hdfs dfs -mkdir /user/hadoop/output 新建hdfs指定目錄(絕對路徑)

hadoop@ya-chy-pc-vm:/usr/local/hadoop$ ./bin/hdfs dfs -rm -r /user/hadoop/output 遞歸刪除指定目錄

 

 

4.   Hadoop集羣

4.1   安裝步驟

 

前面已經描述了Hadoop的單點安裝,僞分佈式安裝及YARN的使用,這裏再描述集羣安裝的要點。

咱們基於以前安裝的目錄假設,僅對有區別的作特別提醒,不然請翻看前面內容。

另外,一些注意點和要點,可能也相似,前面提醒過的,無非重要,再也不提醒,假設讀者已經充分熟練掌握前面幾種安裝狀況,並順利運行。

 

筆者的網絡拓撲環境以下:

臺式PC(宿主機/AMDK8/8G/win10):192.168.1.X(路由器DHCP動態分配)

臺式PC(虛擬機/AMDK8/3G/Ubuntu15.10+虛擬機網絡模式爲橋接模式):192.168.1.220(master)固定IP

筆記本PC(E5420/i3/2GB/Ubuntu15.10):192.168.1.201(slave1)固定IP

筆記本PC(E5400/雙核/2GB/Ubuntu15.10):192.168.1.202(slave2)固定IP

兩兩都能ping通,能夠路由獲得彼此,算在一個局域網內。

兩兩創建SSH後,能夠用SCP(以下),將下載好的JDK/HADOOP等拷貝到其餘host主機上。(用有線網絡所在的HOST下載安裝包最快。)

scp hadoop-2.7.2.tar gz hadoop@192.168.1.6:/home/hadoop/  或

scp hadoop-2.7.2.tar gz hadoop@slave1:/home/hadoop/  其餘相似

 

主要流程:

  1. 確認Master/Slave/…等集羣各主機(host)的功能,弄好它們之間的SSH(配置見後),IP,PING,SCP,JDK;

a)         Hostname建議用經常使用且含有明確的master和slave。

  1. 在 Master 節點配好hadoop 用戶,安裝Hadoop並配置;

a)         若是安裝過單點或僞分佈式就已經正確安裝了hadoop,只有配置有些變化而已。

3.      在Slave節點配號 hadoop 用戶;

4.      將 Master節點上的/usr/local/hadoop目錄複製到其餘Slave節點上(爲了快並保持配置一致,這樣比較簡單);

5.      在 Master節點上開啓Hadoop,就啓動了整個Hadoop集羣。

 

準備IP和網絡

(A)有些家庭電信寬帶自帶路由器,但它只提供useradmin權限(也許電話服務商能夠獲取admin權限),這個帳號僅能修改不多配置。卻不能綁定MAC地址,設定DHCP的IP超時時間等;因此家中多個設備如手機,PC,筆記本電腦,如但願保持家庭內網IP不變,只能在設備上設定固定IP;好比在PC或筆記本電腦中設定內網IP,不影響上公網Internet。

(B)若是PC上還有虛擬機(好比筆者WIN10臺式PC上安裝Ubuntu15.10的虛擬機),但用個免費的VMware player,則此免費版本不支持修改「虛擬網絡參數」(好比修改VMNET8的默認192.168.44.XXX虛擬機網段爲192.168.1.XXX等等),但收費的VMware workstations版能夠。因此由於192.168.1.X和192.168.44.X是2個網段,沒法ping通(也許能夠經過增長路由等方式解決,備註以下。),不方便。因此將VMware player中虛擬機改成橋接模式,虛擬機和宿主機共享一個網段,因此虛擬機能夠配置固定IP192.168.1.220;就能夠和家中其餘host通信了;

備註: 1.X或44.X兩個網段中任何一側主機都添加手動路由(相似:route add 192.168.44.0 mask 255.255.0.0 192.168.1.199;假設虛擬機宿主PC是固定IP且在1.X網段;由於宿主機安裝了VMware player,因此自動具備向兩側網絡轉發IP包的能力;詳見http://www.zhihu.com/question/20231472 此法待驗證!),建議用橋接方法,簡單方便。

 

任何配置前,建議都先關閉 Hadoop (/usr/local/hadoop/sbin/stop-dfs.sh),再進行後續集羣配置。

 

sudo vim /etc/hostname     //修改「hostname=master」,其餘slave等集羣機器都要修改;注意大小寫;

sudo vim /etc/hosts         //修改成以下,其餘slave等集羣機器都要修改;注意大小寫;

「192.168.1.201 slave1」

「192.168.1.202 slave2」

「192.168.1.220 master」

「127.0.0.1 localhost」

 

對master和每一個slave機器都作如上hostname和hosts配置,且重啓動(才能體現出hostname)

注意:hosts文件中只有一個 127.0.0.1,對應名爲 localhost,有多餘應刪除,特別不能有 「127.0.0.1 master」等

 

SSH配置

這個和單點相似,只不過要讓master能夠操控各個slave機器,因此額外作以下操做:

cd ~/.ssh              //若是之前安裝hadoop生成過ssh,就會有該目錄;

rm ./id_rsa*            //刪除OLD公匙(由於hostname變化了)

ssh-keygen -t rsa        //一直按回車就能夠(這樣就生成了無密碼的密鑰對)

cat ./id_rsa.pub >> ./authorized_keys    //將公鑰id_rsa.pub寫入認證文件authorized_keys中

ssh master            //嘗試master本機的無密碼SSH登錄,測試經過就繼續後續處理

scp ~/.ssh/id_rsa.pub hadoop@Slave1:/home/hadoop/   //將公鑰也拷貝到slave1機器上;

 

#如下在slave1機器上執行,其餘slave相似

mkdir ~/.ssh        //若是不存在該文件夾需先建立,若已存在則忽略。Slave1若是本身弄過SSH,就會有它。

cat ~/id_rsa.pub >> ~/.ssh/authorized_keys    //將master的公鑰加入本地受權文件;

rm ~/id_rsa.pub    //刪除master公鑰

 

#如下在slave1機器上執行,其餘slave相似

ssh slave1     //在master機器上執行,嘗試無密碼SSH登錄slave1,成功後,其餘slave都配置好測試完。

 

路徑配置

在路徑(etc/profile)中增長行「export PATH=$PATH:/usr/local/hadoop/bin:/usr/local/hadoop/sbin」,若是作過以前的點單等配置,應該已經有了,能夠查全部集羣的相關配置。並source一下,應用更新。

 

設定集羣相關配置文件:

集羣/分佈式模式須要修改/usr/local/hadoop/etc/hadoop 中的5個配置文件,更多設置請查官方說明。這裏僅設置爲了正常啓動所必須的設置項:slaves、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml

 

1.文件slaves

該文件記錄全部DataNode 的主機名,每行一個hostname字符串,默認爲 localhost(僞分佈式模式時,slaves文件默認爲localhost,則節點即做爲NameNode也做爲DataNode)。分佈式配置能夠保留 localhost,也可刪掉,讓master 節點僅做爲 NameNode 使用。

這裏請添加以下內容:

「slave1

slave2」

兩行,master 節點僅做爲NameNode使用,不做爲datanode。請將localhost行刪除。

 

2文件core-site.xml

 

<configuration>

        <property>

                <name>fs.defaultFS</name>

                <value>hdfs://Master:9000</value>

        </property>

        <property>

                <name>hadoop.tmp.dir</name>

                <value>file:/usr/local/hadoop/tmp</value>

                <description>Abase for other temporary directories.</description>

        </property>

</configuration>

 

3文件hdfs-site.xml

咱們有slave1和slave2全部dfs.replication填寫2,它指定dfs分佈式文件系統的replication數目。

<configuration>

        <property>

                <name>dfs.namenode.secondary.http-address</name>

                <value>Master:50090</value>

        </property>

        <property>

                <name>dfs.replication</name>

                <value>2/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>

 

4文件mapred-site.xml

默認安裝完是mapred-site.xml.template,請重命名。

 

<configuration>

        <property>

                <name>mapreduce.framework.name</name>

                <value>yarn</value>

        </property>

        <property>

                <name>mapreduce.jobhistory.address</name>

                <value>master:10020</value>

        </property>

        <property>

                <name>mapreduce.jobhistory.webapp.address</name>

                <value>master:19888</value>

        </property>

</configuration>

備註:注意master大小寫最好一致,幾個配置文件都要注意。

 

5文件yarn-site.xml

 

<configuration>

        <property>

                <name>yarn.resourcemanager.hostname</name>

                <value>master</value>

        </property>

        <property>

                <name>yarn.nodemanager.aux-services</name>

                <value>mapreduce_shuffle</value>

        </property>

</configuration>

 

master複製配置到各slave機器

將 master上/usr/local/Hadoop文件夾複製到各個節點上。若是之前有安裝配置運行過僞分佈式模式,建議在切換到集羣模式前備份(或刪除)以前的臨時文件,以便出現問題。

master 節點上執行

cd /usr/local

sudo rm -r ./hadoop/tmp     //刪除無用臨時文件

sudo rm -r ./hadoop/logs/*   //刪除日誌

tar -zcf ~/hadoop.master.tar.gz ./hadoop   //壓縮

cd ~

scp ./hadoop.master.tar.gz slave1:/home/hadoop  //從master複製目錄壓縮包到slave1機器;

slave1 節點上執行

sudo rm -r /usr/local/hadoop    //刪掉舊的(或mv備份到好比「Hadoop-standalone」等等)

sudo tar -vzxf ~/hadoop.master.tar.gz -C /usr/local  //解壓縮

sudo chown -R hadoop:hadoop /usr/local/hadoop    //變動目錄owner權限,讓hadoop用戶可用此目錄

 

一樣對其餘slave進行處理。

 

首次運行:

 

首次啓動須要先在master節點執行NameNode的格式化:

在master節點上運行:

hdfs namenode -format       //首次運行須要執行初始化(一大堆log輸出,開啓NameNode,格式化並再次關閉)

 

關閉防火牆:

Ubuntu15.10若是是desktop默認配置的防火牆不會影響hadoop各類模式的運行。但若是是server版本,好比centOS這種偏服務器的版本,可能默認/etc/init.d/iptables會啓動,能夠停掉它,請查相關資料。

 

 

 

啓動Hadoop集羣:

在 Master 節點上執行:

start-dfs.sh  //通常在/usr/local/hadoop/sbin,下同;

start-yarn.sh

mr-jobhistory-daemon.sh start historyserver

經過命令jps能夠查看各個節點所啓動的進程。正確的話,在Master節點上能夠看到 NameNode、ResourceManager、SecondrryNameNode、JobHistoryServer 進程。在Slave節點能夠看到 DataNode 和 NodeManager 進程。缺乏任一進程都表示出錯。

還可在Master節點上經過「hdfs dfsadmin –report」查看DataNode是否正常啓動,Live datanodes爲2(2個slave機器都是datanode),則說明集羣啓動成功。

 

經過Web查看集羣狀態:

http://master:50070/ 查看DataNode,NameNode 的狀態。若是不成功,經過啓動日誌排錯。Log4j應該配置好(前面有詳述,不在累贅)。

 

運行分佈式集羣的例子:

方法和僞分佈式同樣(僞分佈式就是爲了讓你聯繫分佈式的,因此理應差異不大)。

hdfs dfs -mkdir -p /user/hadoop           //首先建立HDFS上的用戶目錄

hdfs dfs -mkdir input              //爲hdfs分佈式系統創建input目錄

hdfs dfs -put /usr/local/hadoop/etc/hadoop/*.xml input    //從Ubuntu本地ext4文件系統拷貝文件到hdfs

http://localhost:50070/      //web查看DataNode的狀態(佔用大小會改變),文件確實複製到了DataNode中

 

hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar grep input output 'dfs[a-z.]+'    //運行MapReduce做業

說明:上述命令hadoop位於/usr/local/hadoop/bin/hadoop,由於設定過PATH,因此能夠直接執行;運行時的輸出信息與僞分佈式相似,會顯示Job 的進度。可能會有點慢,但若是遲遲沒有進度,好比 5 分鐘都沒看到進度,那不妨重啓 Hadoop 再試試。若重啓還不行,則頗有多是內存不足引發,建議增大虛擬機的內存,或者經過更改 YARN 的內存配置解決。

 

查看job運行狀況:

經過Web界面查看JOB進度http://master:8088/cluster ,點擊 「Tracking UI」這列的 History 鏈接,可看任務運行信息。

 

關閉集羣:

stop-yarn.sh    //在master節點上關閉yarn

stop-dfs.sh     //再master節點上關閉hdfs分佈式文件系統

mr-jobhistory-daemon.sh stop historyserver          //在master上關閉跟蹤信息

備註:你一樣也能夠和僞分佈式相似而選擇不啓動YARN,但除了不start-yarn.sh以外,要記得改掉mapred-site.xml 的文件名,好比將它mv爲原來的mapred-site.xml.template。

 

至此,基本上分佈式hadoop集羣最基本的搭建運行和啓停都算弄了一下。還有大量的配置和調優工做須要研究。

提醒:千萬不要爲了調優和調優,分佈式計算系統(包括之後將介紹的SPARK)主要是爲了解決問題,先跑通解決問題是一個領域或維度;而調優並讓問題解決的更漂亮是另一個維度和領域,二者並沒有必然的聯繫;建議仍是先用上分佈式(hadoopspark),再考慮必定數據量和計算量狀況下的調優。這是兩個工種,如同研發工程師和產業化工程師的區別

 

 

Hadoop各類模式切換及說明:

 

1僞分佈式安裝的說明:

請參考相關文檔,配置起效hdfs,則input和output目錄都放到hdfs中,實現正在的基於hdfs高層文件格式之上的分佈式;但由於實在一臺PC或虛擬機的Ubuntu上操做,因此叫僞分佈式,任務並未分發給不一樣的PC節點!

2僞分佈式安裝的yarn說明:

僞分佈式容許可單獨靠hadoop;也可升級安裝yarn來支持hadoop,則有更方便查看的web界面來觀察yarn的分佈式容許;

3分佈式安裝說明:

請虛擬或實際配置至少2或多個PC節點,來測試真實分佈式hadoop系統;配置和容許和僞分佈式差很少,只是多了ssh/SCP/HOSTNAME配置等內容,原理相似;

4單點和僞分佈式切換:

  備份並確保文件(mapred-site.xml.template)不存在;備份並確保文件(core-site.xml)爲初始狀態,就是「configuration標籤內部是空的!」;則能夠按照單點模型運行mapreduce的WordCount例子,並在單點所在的ext4的Ubuntu系統內發現output文件輸出(而不會輸出到hdfs上);

5僞分佈式是否啓動YARN

  按正常命令關閉YARN;備份並確保文件(mapred-site.xml.template)不存在;則會運行不帶YARN的僞分佈式模式,不然即便不啓動yarn,run的時候也會出錯!

6僞分佈式和分佈式切換:

二者無本質區別,只是將namenode,datanode,hdfs,各種manager等網元配置分不到不一樣的PC上而已;其實「僞分佈式模型」等價於啓動hadoop+hdfs+yarn的最小網元集合,而網元們都指向或曰安裝在同一個PC上。

1.      從分佈式切換到僞分佈式時,不要忘記修改 slaves 配置文件;

2.      在二者之間切換時,若遇到沒法正常啓動的狀況,能夠刪除所涉及節點的臨時文件夾,這樣雖然以前的數據會被刪掉,但能保證集羣正確啓動。因此若是集羣之前能啓動,但後來啓動不了,特別是 DataNode 沒法啓動,不妨試着刪除全部節點(包括 Slave 節點)上的 /usr/local/hadoop/tmp 文件夾,再從新執行一次 hdfs namenode -format,再次啓動試試。

 

 

 

5.   其餘補充

6.1   LINUX經驗

6.1.1      開啓bash的自動完成功能

$sudo vim /etc/bash.bashrc   //修改此文件;按需輸入密碼

 

找到文件中的以下腳本片斷,去掉本小節第一行外的全部前導#號;

這就開啓了目錄/文件自動補全和完成的智能功能,大大提高terminal中bash命令的運行效率。

 

#enable bash completion in interactive shells

#if ! shopt -oq posix; then

#      if [-f  /usr/share/bash-completion/bash_completion ]; then

#          . /usr/share/bash-completion/bash_completion

#      elif [ -f /etc/bash_completion]; then

#           . /etc/bash_completion

#      fi

#fi

 

6.1.2      開啓ubuntu虛擬機和win10宿主機的vmware tool(共享文件)

若是不是真實PC,而是用虛擬機且是VMware,那麼能夠安裝VMware tool,並使用共享目錄,在宿主機和虛擬機上傳遞文件,拷貝文字等;

網絡鏈接:http://blog.csdn.net/zybasjj/article/details/7401808 (VMware虛擬機安裝Ubuntu使用share folders共享windows目錄的方法)

 

步驟:

1.關閉ubuntu虛擬機後,在虛擬機配置中設定CD/DVD-ROM指向vmware安裝目錄下的」linux.iso」(若是是win虛擬機則指向windows.iso);

2.啓動ubuntu虛擬機發現taskbar上有VMware Tools的光盤圖標;雙擊查看;

3.發現多個文件,好比:manifest.txt和 VMwareTools-10.0.5-3228253.tar.gz等,將套們都拷貝到 /tmp 下;

4.進入cd /tmp;並解壓縮tar zxvf VMwareTools-8.4.5-324285.tar.gz;

5.進入cd vmware-tools-distrib(進入解壓後對應文件夾);

6.sudo ./vmware-install.pl 命令來安裝VMware tool;會提示輸入登錄用戶的密碼;而後有不斷的提示,主要都按回車,最後會出現: Enjoy,   --the VMware team,就算按照完畢!

7.在宿主機(好比win10)上對vmware中的ubuntu虛擬機的配置中「共享目錄」進行設定,通常不勾選只讀;進入ubuntu虛擬機後會在 /mnt/hgfs/xxx 下發現win10上的文件了!(xxx就是win10宿主機上設定的共享目錄)

8.注意win和linux的文件結尾不一樣,尤爲是帶回車換行的文本文件等;二進制文件可能好點;

 

6.1.3      Ubuntu的Terminal快捷方式

Ubuntu下Ctrl+Alt+T調用出Terminal界面。

6.1.4      Find命令舉例

sudo find / -name 'mapred-site.xml' //在根目錄查找此文件名的文件

6.1.5      PATH變量簡述

 

可執行 echo $PATH(或export $PATH,看用的什麼shell環境了) 查看它是包含了不少目錄的字符串。例如咱們在主文件夾 ~ 中執行 ls 這個命令時,實際執行的是 /bin/ls 這個程序,而不是 ~/ls 這個程序。系統是根據 PATH 這個環境變量中包含的目錄位置,逐一進行查找,直至在這些目錄位置下找到匹配的程序(若沒有匹配的則提示該命令不存在)。

咱們通常先進入/usr/local/hadoop 目錄中,再執行 sbin/hadoop,實際上等同於運行 /usr/local/hadoop/sbin/hadoop。咱們能夠將 Hadoop 命令的相關目錄加入到 PATH 環境變量中,這樣就能夠直接經過 start-dfs.sh 開啓 Hadoop,也能夠直接經過 hdfs 訪問 HDFS 的內容,方便平時的操做。

咱們若是在 ~/.bashrc 中設置PATH,好比「export PATH=$PATH:/usr/local/hadoop/sbin:/usr/local/hadoop/bin」,並用source ~/.bashrc使設置生效;以後在任意目錄中,均可以直接使用 hdfs 等命令。比較方便。

 

6.1.6      Ubuntu中安裝vmware tools

若是要升級或安裝,能夠經過$sudo apt-get install open-vm-tools 來安裝和升級;

也能夠從網絡下載「linux.iso」的vmware tools的鏡像光盤,放入虛擬機的DVD/CDROM中,啓動後多出一個盤,位於「/media/username/VMware tool/」目錄中,而後將「VMwareTools-10.0.0-2977863.tar.gz」文件拷貝到好比/tmp目錄,解壓並運行「./install.pl」就能安裝了。

別忘記啓動虛擬機配置中設定外界的宿主系統(好比WIN10)的一個目錄(好比叫sharedfolder)爲共享目錄,進入虛擬機後,自動mount掛在到「/mnt/hgfs/sharedfolder」這樣能夠共享文件了。

 

6.2   雜

6.2.1      如何保存被禁止拷貝或存盤的HTML?

當html或mht等頁面禁止保存或拷貝內容的時候,能夠查看源碼並保存爲html後綴文件。

而後本地打開拷貝黏貼其內容。

若是是zh-cn而非通用的3字節utf-8編碼,則能夠用諸如notepad++等軟件打開html並轉換爲utf8,保存再次打開,就能拷貝黏貼了。

 

 

6.   資料

本文內容是筆者從網絡資料中收集,整理,實踐,修訂,備註而成。

一爲整理學習,方便之後查閱參考;

二爲方便他人學習交流之用;

如下羅列資料只有部分研究過,僅供參考,並沒有傾向性推薦。

 

 

感謝開放的網絡。感謝網絡上各位的分享!

ubuntu15.04安裝hadoop2.6.0及eclipse開發環境配置:http://www.linuxdiyf.com/linux/12474.html

Ubuntu15.04單機/僞分佈式安裝配置Hadoop與Hive試驗機:http://www.linuxdiyf.com/linux/11858.html

Ubuntu下安裝Hadoop(單機版):http://www.linuxdiyf.com/linux/11372.html

 

http://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/SingleCluster.html

http://www.cnblogs.com/xia520pi/archive/2012/05/16/2503949.html

http://www.micmiu.com/bigdata/hadoop/hadoop-2x-ubuntu-build/

http://www.powerxing.com/install-hadoop/ 筆記Hadoop

 

Hadoop集羣安裝配置教程_Hadoop2.6.0_Ubuntu/CentOS

使用命令行編譯打包運行本身的MapReduce程序 Hadoop2.6.0

使用Eclipse編譯運行MapReduce程序 Hadoop2.6.0_Ubuntu/CentOS

Hadoop-in-Practice第四章MapReduce-Join代碼運行問題

Hadoop安裝配置簡略教程

Hadoop安裝教程_單機/僞分佈式配置_CentOS6.4/Hadoop2.6.0

 

大數據教材推薦

林子雨老師(研究生導師)編著的《大數據技術原理與應用》,該教程是針對高校學生打造的入門級教材,目前已被多所高校做爲大數據課程指定教材。

林子雨編著《大數據技術原理與應用》官網

林子雨主講入門級大數據在線課程(視頻)

《大數據技術原理與應用》教材配套學習指南

《大數據技術原理與應用》教材配套上機練習題目

相關文章
相關標籤/搜索