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


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

太初

目錄

1.      Hadoop單點模式... 2

1.1        安裝步驟... 2

0.環境和版本... 2

1.在ubuntu中創建hadoop用戶... 2

2.安裝ssh. 3

3.安裝java環境... 3

4.安裝hadoop. 4

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

 

大數據教材推薦

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

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

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

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

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM