Hadoop第3周練習--Hadoop2.X編譯安裝和實驗


1    作業題目... 5

2    編譯Hadoop2.X 64bit. 5

2.1     運行環境說明... 5

2.1.1   硬軟件環境... 5

2.1.2   集群網絡環境... 6

2.2     環境搭建... 6

2.2.1   JDK安裝和Java環境變量配置... 6

2.2.2   安裝並設置maven. 8

2.2.3   root用戶使用yum安裝svn. 9

2.2.4   root用戶使用yum安裝autoconf automake libtool cmake. 10

2.2.5   root用戶使用yum安裝ncurses-devel11

2.2.6   root用戶使用yum安裝openssl-devel12

2.2.7   root用戶使用yum安裝gcc*. 13

2.2.8   安裝並設置protobuf13

2.3     編譯Hadoop. 16

2.3.1   下載Hadoop源代碼 Release2.2.0. 16

2.3.2   編譯Hadoop源代碼... 16

2.3.3   驗證編譯是否成功... 17

3    Hadoop2.X 64bit安裝... 18

3.1     運行環境說明... 18

3.1.1   硬軟件環境... 18

3.1.2   集群網絡環境... 18

3.1.3   安裝使用工具... 19

3.2     環境搭建... 21

3.2.1   配置本地環境... 21

3.2.2   設置操作系統環境... 24

3.3     配置Hadooop設置... 32

3.3.1   下載並解壓hadoop安裝包... 32

3.3.2   Hadoop目錄下創建子目錄... 33

3.3.3   配置hadoop-env.sh. 34

3.3.4   配置yarn-env.sh. 35

3.3.5   配置core-site.xml36

3.3.6   配置hdfs-site.xml37

3.3.7   配置mapred-site.xml38

3.3.8   配置yarn-site.xml40

3.3.9   配置slaves文件... 41

3.3.10向各節點分發hadoop程序... 41

3.3.11格式化namenode. 42

3.3.12啟動hdfs43

3.3.13驗證當前進行... 43

3.3.14啟動yarn. 43

3.3.15驗證當前進行... 44

4    實驗性問題解決... 44

4.1     運行環境說明... 44

4.1.1   硬軟件環境... 44

4.1.2   集群網絡環境... 45

4.2     問題1--web監控界面加上安全機制... 45

4.2.1   修改Core-Site.xml文件... 45

4.2.2   手動創建signature-secret文件... 46

4.2.3   把該文件分發到兩個datanode... 47

4.2.4   重新啟動hadoop. 47

4.2.5   驗證訪問... 47

4.3     問題2--模擬namenode崩潰並恢復... 48

4.3.1   刪除NameNodeName目錄下所有文件,模擬崩潰... 48

4.3.2   重啟Hadoop. 48

4.3.3   格式化NameNode. 50

4.3.4   獲取DataNodenamespaceID.. 51

4.3.5   修改NameNodenamespaceID.. 52

4.3.6   刪除NameNodefsimage. 52

4.3.7   SSN中拷貝fsimageNN... 52

4.3.8   重啟Hadoop. 53

4.4     問題3--改變HDFS塊大小... 53

4.4.1   Hadoop中建立/input文件夾... 53

4.4.2   查看當前blocksize. 54

4.4.3   修改hdfs-site.xml配置文件... 54

4.4.4   重啟Hadoop. 55

4.4.5   再次查看當前blocksize. 55

4.5     問題4--SNNNN的分離... 56

4.5.1   復制虛擬機... 56

4.5.2   設置SNN虛擬機IP地址... 56

4.5.3   設置SNN虛擬機名稱... 57

4.5.4   所有節點hosts 文件加入SNN IP對應信息... 57

4.5.5   所有節點masters文件加入SNN信息... 57

4.5.6   所有節點中修改hdfs-site.xml58

4.5.7   重啟所有虛擬機... 59

4.5.8   配置ssh免密碼登錄... 59

4.5.9   重新格式化NameNode. 61

4.5.10啟動Hadoop. 61

4.5.11驗證... 61

4.6     問題5--再次格式化namenode,此時datanode是否能加入... 62

4.6.1   停止Hadoop並格式化... 62

4.6.2   啟動Hadoop,並查看datanode狀態... 62

4.6.3   查看datanode日志... 63

4.6.4   解決辦法... 63

4.6.5   重啟集群,查看datanode狀態... 64

4.7     問題6--控制namenode檢查點發生的頻率... 65

4.7.1   core-site.xml中修改檢查點頻率... 65

4.7.2   重啟集群,查看檢查點更新頻率... 65

4.7.3   觀察checkpoint 前后 namenode的變化... 66

4.7.4   基本原理... 66

5    問題解決... 67

5.1     安裝CentOS64位虛擬機 This host supports Intel VT-x, but Intel VT-x is disabled. 67

5.2     *** is not in the sudoers file解決方法... 67

5.3     yum無法下載... 68

5.4     CentOS 64bit安裝Hadoop2.2.0中出現文件編譯位數異常... 69

5.5    編譯Hadoop2.2.0出現代碼異常... 70

 

1 作業題目

1.  部署Hadoop 2.x,建議嘗試64位系統下進行本地編譯的安裝方式

2.  Hadoop 1.x上進行探索性的實驗研究,以下問題62

(1) 能否給web監控界面加上安全機制,怎樣實現?抓圖過程

(2)模擬namenode崩潰,例如將name目錄的內容全部刪除,然后通過secondary namenode恢復namenode,抓圖實驗過程

(3) 怎樣改變HDFS塊大小?實驗驗證並抓圖過程

(4) secondary namenodenamenode分離,部署到單獨的節點,抓圖實驗過程

(5) Hadoop集群實施成功后,再次格式化名稱節點,請問此時datanode還能加入集群不?如果不能加入怎樣解決?模擬過程並抓圖

(6) 怎樣控制namenode檢查點發生的頻率,用實驗模擬檢查點發生的前后過程,並抓圖發生前和發生后的元數據情況進行比較,說明之

2  編譯Hadoop2.X 64bit

2.1  運行環境說明

2.1.1硬軟件環境

l  主機操作系統:Windows 64 bit,雙核4線程,主頻2.2G6G內存

l  虛擬軟件:VMware® Workstation 9.0.0 build-812388

l  虛擬機操作系統:CentOS 6.5 64位,單核,1G內存

l  JDK1.7.0_55 64

l  HadoopRelease 2.3.0 source

2.1.2集群網絡環境

集群只包含一個節點,設置IP地址為192.168.1.200

2.2  環境搭建

2.2.1JDK安裝和Java環境變量配置

1.     下載JDK1.7 64bit安裝包

打開JDK1.7 64bit安裝包下載鏈接為:

http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html

打開界面之后,先選中 Accept License Agreement ,然后下載 jdk-7u55-linux-x64.tar.gz,如下圖所示:

clip_image002

 

2.     賦予hadoop用戶/usr/lib/java目錄可讀寫權限,使用命令如下:

sudo chmod -R 777 /usr/lib/java

clip_image004

3.     把下載的安裝包,使用ssh工具上傳到/usr/lib/java 目錄下,使用如下命令進行解壓

tar -zxvf jdk-7u55-linux-x64.tar.gz

clip_image006

解壓后目錄如下圖所示:

clip_image008

4.     使用root用戶配置 /etc/profile,該設置對所有用戶均生效

vi /etc/profile

clip_image010

export JAVA_HOME=/usr/lib/java/jdk1.7.0_55

export PATH=$JAVA_HOME/bin:$PATH

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

clip_image012

5.     重新登錄並驗證

logout

java -version

clip_image014

2.2.2安裝並設置maven

1.     下載maven安裝包,建議安裝3.0以上版本,本次安裝選擇的是maven3.0.5的二進制包,下載地址如下

http://mirror.bit.edu.cn/apache/maven/maven-3/

clip_image016

2.     使用ssh工具把maven包上傳到/home/hadoop/Downloads目錄

clip_image018

3.     解壓縮apache-maven-3.0.5-bin.tar.gz

tar -zxvf apache-maven-3.0.5-bin.tar.gz

clip_image020

4.     apache-maven-3.0.5目錄移到/usr/local目錄下

sudo mv apache-maven-3.0.5 /usr/local

clip_image022

5.     /etc/profile配置文件中加入如下設置

export PATH=$JAVA_HOME/bin:/usr/local/apache-maven-3.0.5/bin:$PATH

clip_image024

6.     編輯/etc/profile文件並驗證配置是否成功:

source /etc/profile

mvn -version

clip_image026

2.2.3root用戶使用yum安裝svn

yum install svn

clip_image028

clip_image030

2.2.4root用戶使用yum安裝autoconf automake libtool cmake

yum install autoconf automake libtool cmake

clip_image032

clip_image034

2.2.5root用戶使用yum安裝ncurses-devel

yum install ncurses-devel

clip_image036

2.2.6root用戶使用yum安裝openssl-devel

yum install openssl-devel

clip_image038

clip_image040

2.2.7root用戶使用yum安裝gcc*

yum install gcc*

clip_image042

clip_image044

2.2.8安裝並設置protobuf

注:該程序包需要在gcc安裝完畢后才能安裝,否則提示無法找到gcc編譯器。

1.     下載protobuf安裝包

下載鏈接為: https://code.google.com/p/protobuf/downloads/list

clip_image046

2.     使用ssh工具把protobuf-2.5.0.tar.gz包上傳到/home/hadoop/Downloads目錄

clip_image048

3.     解壓安裝包

tar -zxvf protobuf-2.5.0.tar.gz

clip_image050

clip_image052

4.     protobuf-2.5.0目錄轉移到/usr/local目錄下

sudo mv protobuf-2.5.0 /usr/local

clip_image054

5.     進行目錄運行命令

進入目錄以root用戶運行如下命令:

./configure

make

make check

make install

clip_image056

clip_image058

6.     驗證是否安裝成功

運行成功之后,通過如下方式來驗證是否安裝成功

protoc

clip_image060

2.3  編譯Hadoop

2.3.1下載Hadoop源代碼 Release2.2.0

通過SVN獲取Hadoop2.2.0源代碼,在/home/hadoop/Downloads目錄下命令:

svn checkout http://svn.apache.org/repos/asf/hadoop/common/tags/release-2.2.0

獲取時間較長,大小約75.3M

clip_image062

2.3.2編譯Hadoop源代碼

:) 由於hadoop2.2.0svnpom.xml有點問題,會造成編譯中出錯,可先參考5.5修復該問題。在Hadoop源代碼的根目錄執行如下命令:

mvn package -Pdist,native -DskipTests –Dtar

(注意:這行命令需要手工輸入,如果復制執行會報異常!)

clip_image064

耗費的時間較長,總共花費了32分鍾,在編譯過程需要聯網,從網絡中下載所需要的資料。

clip_image066

clip_image068

2.3.3驗證編譯是否成功

hadoop-dist/target/hadoop-2.2.0/lib/native 目錄中查看libhadoop.so.1.0.0屬性:

file ./libhadoop.so.1.0.0

該文件為ELF 64-bit LSB則表示文件成功編譯為64

clip_image070

hadoop-dist/target目錄中已經打包好了hadoop-2.2.0.tar.gz,該文件作為Hadoop2.X 64位安裝包。

clip_image072

3    Hadoop2.X 64bit安裝

3.1  運行環境說明

3.1.1硬軟件環境

l  主機操作系統:Windows 64 bit,雙核4線程,主頻2.2G6G內存

l  虛擬軟件:VMware® Workstation 9.0.0 build-812388

l  虛擬機操作系統:CentOS 64位,單核,1G內存

l  JDK1.7.0_55 64

l  Hadoop2.2.0

3.1.2集群網絡環境

集群包含三個節點:1namenode2datanode,其中節點之間可以相互ping通。節點IP地址和主機名分布如下:

序號

IP地址

機器名

類型

用戶名

1

10.88.147.226

hadoop1

名稱節點

hadoop

2

10.88.147.227

hadoop2

數據節點

hadoop

3

10.88.147.228

hadoop3

數據節點

hadoop

所有節點均是CentOS6.5 64bit系統,防火牆均禁用,所有節點上均創建了一個hadoop用戶,用戶主目錄是/usr/hadoop。所有節點上均創建了一個目錄/usr/local/hadoop,並且擁有者是hadoop用戶。因為該目錄用於安裝hadoop,用戶對其必須有rwx權限。(一般做法是root用戶在/usr/local下創建hadoop目錄,並修改該目錄擁有者為hadoop(chown R hadoop /usr/local/hadoop),否則通過SSH往其他機器分發Hadoop文件會出現權限不足的提示。

3.1.3安裝使用工具

3.1.3.1Linux文件傳輸工具

Linux系統傳輸文件推薦使用SSH Secure File Transfer,該工具頂部為工具的菜單和快捷方式,中間部分左面為本地文件目錄,右邊為遠程文件目錄,可以通過拖拽等方式實現文件的下載與上傳,底部為操作情況監控區,如下圖所示:

clip_image074

3.1.3.2Linux命令行執行工具

l  SSH Secure Shell

SSH Secure工具的SSH Secure Shell提供了遠程命令執行,如下圖所示:

 

clip_image076

l  SecureCRT

SecureCRT是常用遠程執行Linux命令行工具,如下圖所示:

clip_image078

 

 

 

 

3.2  環境搭建

本次安裝集群分為三個節點,節點設置按照2.1.2章節進行設置。環境搭建分為兩部分,具體為配置本地環境和設置操作系統環境。

3.2.1配置本地環境

該部分對服務器的配置需要在服務器本地進行配置,配置完畢后需要重啟服務器確認配置是否生效,特別是遠程訪問服務器需要設置固定IP地址。

3.2.1.1設置IP地址

1.     點擊System-->Preferences-->Network Connections,如下圖所示:

clip_image080

2.     修改或重建網絡連接,設置該連接為手工方式,設置如下網絡信息:

      IP地址:    10.88.147.*

      子網掩碼: 255.255.255.0

      網關:     10.88.*.*

      DNS     10. **.***.** (上網需要設置DNS服務器)

      注意:網關、DNS等根據所在網絡實際情況進行設置,並設置連接方式為"Available to all users",否則通過遠程連接時會在服務器重啟后無法連接服務器

clip_image082

3.     在命令行中,使用ifconfig命令查看設置IP地址信息,如果修改IP不生效,需要重啟機器再進行設置(如果該機器在設置后需要通過遠程訪問,建議重啟機器,確認機器IP是否生效):

clip_image084

3.2.1.2設置機器名

root用戶登錄,使用 vi /etc/sysconfig/network 打開配置文件,根據實際情況設置該服務器的機器名,新機器名在重啟后生效

clip_image086

3.2.1.3設置Host映射文件

1.     使用root身份編輯/etc/hosts映射文件,設置IP地址與機器名的映射,設置信息如下:

vi /etc/hosts

l     10.88.147.226 hadoop1

l     10.88.147.227 hadoop2

l     10.88.147.228 hadoop3

clip_image088

2.     使用如下命令對網絡設置進行重啟

/etc/init.d/network restart

clip_image090

3.     驗證設置是否成功

clip_image092

3.2.1.4上網配置

第一步   root用戶使用vi /etc/profile命令打開配置文件,如下圖所示:

clip_image010[1]

第二步   在該文件設置如下配置:

export http_proxy=proxy.*****:8080

export no_proxy="localhost,10.88.*hadoop*"

export https_proxy=proxy.*****:8080

clip_image094

3.2.2設置操作系統環境

3.2.2.1關閉防火牆

Hadoop安裝過程中需要關閉防火牆和SElinux,否則會出現異常

1.     service iptables status 查看防火牆狀態,如下所示表示iptables已經開啟

clip_image096

2.     root用戶使用如下命令關閉iptables

chkconfig iptables off

clip_image098

3.2.2.2關閉SElinux

1.     使用getenforce命令查看是否關閉

clip_image100

2.     修改/etc/selinux/config 文件

SELINUX=enforcing改為SELINUX=disabled,執行該命令后重啟機器生效

clip_image102

3.2.2.3JDK安裝及配置

7.     下載JDK1.7 64bit安裝包

打開JDK1.7 64bit安裝包下載鏈接為:

http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html

打開界面之后,先選中 Accept License Agreement ,然后下載 jdk-7u55-linux-x64.tar.gz,如下圖所示:

clip_image002[1]

 

8.     賦予hadoop用戶/usr/lib/java目錄可讀寫權限,使用命令如下:

sudo chmod -R 777 /usr/lib/java

clip_image004[1]

該步驟有可能遇到問題5.2,可參考解決辦法處理

9.     把下載的安裝包,使用2.1.3.1介紹的ssh工具上傳到/usr/lib/java 目錄下,使用如下命令進行解壓

tar -zxvf jdk-7u55-linux-x64.tar.gz

clip_image006[1]

解壓后目錄如下圖所示:

clip_image008[1]

10.  使用root用戶配置 /etc/profile,該設置對所有用戶均生效

vi /etc/profile

clip_image010[2]

export JAVA_HOME=/usr/lib/java/jdk1.7.0_55

export PATH=$JAVA_HOME/bin:$PATH

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

clip_image012[1]

11.  重新登錄並驗證

logout

java -version

clip_image014[1]

3.2.2.4更新OpenSSL

C自帶的OpenSSL存在bug,如果不更新OpenSSLAmbari部署過程會出現無法通過SSH連接節點,使用如下命令進行更新:

yum update openssl

clip_image104

 

clip_image106

該步驟有可能遇到問題5.3,可參考解決辦法處理

3.2.2.5SSH無密碼驗證配置

1.     root用戶使用vi /etc/ssh/sshd_config,打開sshd_config配置文件,開放三個配置,如下圖所示:

RSAAuthentication yes

PubkeyAuthentication yes

AuthorizedKeysFile .ssh/authorized_keys

clip_image108

2.     配置后重啟服務

service sshd restart

clip_image110

3.     完成以上步驟后,復制該虛擬機兩份,分別為hadoop2hadoop3數據節點,IP設置參見1.2章節

4.     使用hadoop用戶登錄在三個節點中使用如下命令生成私鑰和公鑰;

ssh-keygen -t rsa

clip_image112

5.     進入/home/hadoop/.ssh目錄在三個節點中分別把公鑰命名為authorized_keys_hadoop1authorized_keys_hadoop2authorized_keys_hadoop3,使用命令如下:

cp id_rsa.pub authorized_keys_hadoop1

clip_image114

6.     把兩個從節點(hadoop2hadoop3)的公鑰使用scp命令傳送到hadoop1節點的/home/hadoop/.ssh文件夾中;

scp authorized_keys_hadoop2 hadoop@hadoop1:/home/hadoop/.ssh

clip_image116

clip_image118

7.     把三個節點的公鑰信息保存到authorized_key文件中

使用cat authorized_keys_hadoop1 >> authorized_keys 命令

clip_image120

8.     把該文件分發到其他兩個從節點上

使用scp authorized_keys hadoop@hadoop2:/home/hadoop/.ssh把密碼文件分發出去

clip_image122

clip_image124

9.     在三台機器中使用如下設置authorized_keys讀寫權限

chmod 400 authorized_keys

clip_image126

10.  測試ssh免密碼登錄是否生效

clip_image128

3.3  配置Hadooop設置

3.3.1下載並解壓hadoop安裝包

 

1.     Apache網站上提供Hadoop2.X安裝包只支持32位操作系統安裝,在64位服務器安裝會出現5.4的錯誤異常。我們使用上一步驟編譯好的hadoop-1.1.2-bin.tar.gz文件作為安裝包(也可以從網上下載native文件夾或者打包好的64hadoop安裝包),使用2.1.3.1介紹的ssh工具上傳到/home/hadoop/Downloads 目錄下

clip_image130

2.     在主節點上解壓縮

cd /home/hadoop/Downloads/

tar -xzvf hadoop-2.2.0.tar.gz

clip_image132

clip_image134

3.     hadoop-2.2.0目錄移到/usr/local目錄下

sudo mv hadoop-2.2.0 /usr/local

cd /usr/local

ls

clip_image136

4.     使用chown命令遍歷修改hadoop-1.1.2目錄所有者為hadoop

sudo chown -R hadoop /usr/local/hadoop-2.2.0

clip_image138

 

3.3.2Hadoop目錄下創建子目錄

使用hadoop用戶在hadoop-2.2.0目錄下創建tmpnamedata目錄,保證目錄所有者為hadoop

mkdir tmp

mkdir name

mkdir data

ls

clip_image140

3.3.3配置hadoop-env.sh

1.     打開配置文件hadoop-env.sh

cd etc/hadoop

sudo vi hadoop-env.sh

clip_image142

2.     加入配置內容,設置了hadoopjdkhadoop/bin路徑

export JAVA_HOME=/usr/lib/java/jdk1.7.0_55

export PATH=$PATH:/usr/local/hadoop-2.2.0/bin

clip_image144

3.     編譯配置文件hadoop-env.sh,並確認生效

source hadoop-env.sh

hadoop version

clip_image146

3.3.4配置yarn-env.sh

1.     /usr/local/hadoop-2.2.0/etc/hadoop打開配置文件yarn-env.sh

cd /usr/local/hadoop-2.2.0/etc/hadoop

sudo vi yarn-env.sh

clip_image148

2.     加入配置內容,設置了hadoopjdkhadoop/bin路徑

export JAVA_HOME=/usr/lib/java/jdk1.7.0_55

clip_image150

3.     編譯配置文件yarn-env.sh,並確認生效

source yarn-env.sh

clip_image152

3.3.5配置core-site.xml

1.     使用如下命令打開core-site.xml配置文件

sudo vi core-site.xml

clip_image154

2.     在配置文件中,按照如下內容進行配置

<configuration>

  <property>

    <name>fs.default.name</name>

    <value>hdfs://hadoop1:9000</value>

  </property>

  <property>

    <name>fs.defaultFS</name>

    <value>hdfs://hadoop1:9000</value>

  </property>

  <property>

    <name>io.file.buffer.size</name>

    <value>131072</value>

  </property>

  <property>

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

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

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

  </property>

  <property>

    <name>hadoop.proxyuser.hduser.hosts</name>

    <value>*</value>

  </property>

  <property>

    <name>hadoop.proxyuser.hduser.groups</name>

    <value>*</value>

  </property>

</configuration>

clip_image156

3.3.6配置hdfs-site.xml

1.     使用如下命令打開hdfs-site.xml配置文件

sudo vi hdfs-site.xml

clip_image158

2.     在配置文件中,按照如下內容進行配置

<configuration>

  <property>

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

   <value>hadoop1:9001</value>

  </property>

  <property>

   <name>dfs.namenode.name.dir</name>

   <value>file:/usr/local/hadoop-2.2.0/name</value>

  </property>

  <property>

   <name>dfs.datanode.data.dir</name>

   <value>file:/usr/local/hadoop-2.2.0/data</value>

  </property>

  <property>

   <name>dfs.replication</name>

   <value>2</value>

  </property>

  <property>

   <name>dfs.webhdfs.enabled</name>

   <value>true</value>

  </property>

</configuration>

clip_image160

3.3.7配置mapred-site.xml

1.     默認情況下不存在mapred-site.xml文件,可以從模板拷貝一份

cp mapred-site.xml.template mapred-site.xml

clip_image162

2.     使用如下命令打開mapred-site.xml配置文件

sudo vi mapred-site.xml

clip_image164

3.     在配置文件中,按照如下內容進行配置

<configuration>

  <property>

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

    <value>yarn</value>

  </property>

  <property>

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

    <value>hadoop1:10020</value>

  </property>

  <property>

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

    <value>hadoop1:19888</value>

  </property>

</configuration>

clip_image166

3.3.8配置yarn-site.xml

1.     使用如下命令打開yarn-site.xml配置文件

sudo vi yarn-site.xml

clip_image168

2.     在配置文件中,按照如下內容進行配置

<configuration>

  <property>

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

    <value>mapreduce_shuffle</value>

  </property>

  <property>

    <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>

    <value>org.apache.hadoop.mapred.ShuffleHandler</value>

  </property>

  <property>

    <name>yarn.resourcemanager.address</name>

    <value>hadoop1:8032</value>

  </property>

  <property>

    <name>yarn.resourcemanager.scheduler.address</name>

    <value>hadoop1:8030</value>

  </property>

  <property>

    <name>yarn.resourcemanager.resource-tracker.address</name>

    <value>hadoop1:8031</value>

  </property>

  <property>

    <name>yarn.resourcemanager.admin.address</name>

    <value>hadoop1:8033</value>

  </property>

  <property>

    <name>yarn.resourcemanager.webapp.address</name>

    <value>hadoop1:8088</value>

  </property>

</configuration>

clip_image170

3.3.9配置slaves文件

1.     設置從節點

sudo vi slaves

hadoop2

hadoop3

clip_image172 

clip_image174

3.3.10   向各節點分發hadoop程序

1.     hadoop2hadoop3機器中創建/usr/local/hadoop-2.2.0目錄,然后修改該目錄所有權限

sudo mkdir /usr/local/hadoop-2.2.0

sudo chown R hadoop /usr/local/hadoop-2.2.0

clip_image176

2.     hadoop1機器上進入/usr/local/hadoop-2.2.0目錄,使用如下命令把hadoop文件夾復制到hadoop2hadoop3機器

使用命令scp -r * hadoop@hadoop2:/usr/local/hadoop-2.2.0

clip_image178

 

3.     在從節點查看是否復制成功

clip_image180

3.3.11   格式化namenode

./bin/hdfs namenode -format

 

clip_image182

 

clip_image184

3.3.12   啟動hdfs

cd hadoop-2.2.0/sbin

./start-dfs.sh

clip_image186

如果服務器操作系統為32位時,出現問題5.4異常,可以參考解決

3.3.13   驗證當前進行

此時在hadoop1上面運行的進程有:namenodesecondarynamenode

clip_image188

hadoop2hadoop3上面運行的進程有:datanode

clip_image190

3.3.14   啟動yarn

./start-yarn.sh

clip_image192

3.3.15   驗證當前進行

此時在hadoop1上運行的進程有:namenodesecondarynamenoderesourcemanager

clip_image194

hadoop2hadoop3上面運行的進程有:datanodenodemanager

clip_image196

clip_image198

4    實驗性問題解決

4.1  運行環境說明

以下實驗性問題解決是在第1~2周搭建的環境下進行解決,即在Hadoop1.1.2版本下模擬問題的發生和解決。

4.1.1硬軟件環境

l  主機操作系統:Windows 64 bit,雙核4線程,主頻2.2G6G內存

l  虛擬軟件:VMware® Workstation 9.0.0 build-812388

l  虛擬機操作系統:三個節點均為CentOS6.5 64位,單核,1G內存

l  JDK1.7.0_55 64

l  Hadoop1.1.2

4.1.2集群網絡環境

集群包含三個節點:1namenode2datanode,其中節點之間可以相互ping通。節點IP地址和主機名分布如下:

序號

IP地址

機器名

類型

用戶名

運行進程

1

10.88.147.221

hadoop1

名稱節點

hadoop

NNSNNJobTracer

2

10.88.147.222

hadoop2

數據節點

hadoop

DNTaskTracer

3

10.88.147.223

hadoop3

數據節點

hadoop

DNTaskTracer

所有節點均是CentOS系統,防火牆均禁用,所有節點上均創建了一個hadoop用戶,用戶主目錄是/usr/hadoop。所有節點上均創建了一個目錄/usr/local/hadoop,並且擁有者是hadoop用戶。

4.2  問題1--web監控界面加上安全機制

4.2.1修改Core-Site.xml文件

clip_image200

以下為配置添加部分:

  <property>

    <name>hadoop.http.filter.initializers</name>

    <value>org.apache.hadoop.security.AuthenticationFilterInitializer</value>

    <description>HTTP Authentication document in hadoop tar file</description>

  </property>

  <property>

    <name>hadoop.http.authentication.type</name>

    <value>simple</value>

    <description>authentication type for web UI</description>

  </property>

  <property>

    <name>hadoop.http.authentication.token.validity</name>

    <value>36000</value>

    <description>how long authentication token is valid before it needs to be renewed</description>

  </property>

  <property>

    <name>hadoop.http.authentication.signature.secret.file</name>

    <value>/usr/local/hadoop-1.1.2/signature-secret</value>

    <description>signature secret for signing authentication tokens</description>

  </property>

  <property>

    <name>hadoop.http.authentication.cookie.domain</name>

    <value></value>

    <description>domain to use for the http cookie that stores authentication token</description>

  </property>

  <property>

    <name>hadoop.http.authentication.simple.anonymous.allowed</name>

    <value>false</value>

    <description>anonymous web UI requests enabled or disabled</description>

  </property>

4.2.2手動創建signature-secret文件

/usr/local/hadoop-1.1.2目錄下創建signature-secret文件,使用如下命令:

echo hadoop >signature-secret

clip_image202

 

4.2.3把該文件分發到兩個datanode

namenode創建需要把這個文件分發到各個datanode,使用如下命令:

scp signature-secret hadoop@hadoop2:/usr/local/hadoop-1.1.2

clip_image204

4.2.4重新啟動hadoop

clip_image206

4.2.5驗證訪問

使用http://10.88.147.221:50030/jobtracker.jsp訪問jobtracker頁面出現如下錯誤:

clip_image208

http訪問地址加入?user.name=hadoop就能夠訪問了,不過存在問題是user.name是可以隨意輸入,在http中明碼傳遞,還是不安全!

clip_image210

4.3  問題2--模擬namenode崩潰並恢復

4.3.1刪除NameNodeName目錄下所有文件,模擬崩潰

NameNode節點中name目錄為 /usr/local/hadoop-1.1.2/hdfs/name,使用如下命令刪除該文件夾下所有文件:

cd /usr/local/hadoop-1.1.2/hdfs/name

rm -R *

clip_image212

4.3.2重啟Hadoop

使用./stop-all.sh停止Hadoop,然后使用./start-all.sh啟動Hadoop,通過jps命令可以看到namenode進程無法啟動

cd /usr/local/hadoop-1.1.2/bin

./stop-all.sh

./start-all.sh

clip_image214

通過hadoop命令查看hdfs文件時無法連接,如下圖所示:

hadoop fs -ls

clip_image216

查看logs文件夾下NameNode對應日志文件hadoop-hadoop-jobtracker-hadoop1.log,出現如下錯誤:

INFO org.apache.hadoop.mapred.JobTracker: Problem connecting to HDFS Namenode... re-trying

java.net.ConnectException: Call to hadoop1/10.88.147.221:9000 failed on connection exception: java.net.ConnectException: Connection refused

clip_image218

4.3.3格式化NameNode

停止Hadoop后,通過如下命令格式化Hadoop

./stop-all.sh

./hadoop namenode -format

clip_image220

4.3.4獲取DataNodenamespaceID

通過ssh連接到hadoop2節點,進入DataNode存放數據的文件夾 /usr/local/hadoop-1.1.2/hdfs/data/current,通過如下命令查看VERSION文件內容:

ssh hadoop2

cd /usr/local/hadoop-1.1.2/hdfs/data/current

ls

cat VERSION

獲取namespaceID

clip_image222

4.3.5修改NameNodenamespaceID

修改hadoop1機器NameNode目錄/usr/local/hadoop-1.1.2/hdfs/name/currentVERSION文件中namespaceID值為上一步驟DataNode所對應的值,結果如下圖所示:

cd /usr/local/hadoop-1.1.2/hdfs/name/current

vi VERSION

clip_image224

clip_image226

4.3.6刪除NameNodefsimage

通過如下命令刪除NameNodefsimage

cd /usr/local/hadoop-1.1.2/hdfs/name/current

rm fsimage

clip_image228

4.3.7SSN中拷貝fsimageNN

NameNodeSSN路徑為/usr/local/hadoop-1.1.2/tmp/dfs/namesecondary,把current文件夾下得fsimage拷貝到NN所在路徑中,命令如下:

cd /usr/local/hadoop-1.1.2/tmp/dfs/namesecondary

cp fsimage /usr/local/hadoop-1.1.2/hdfs/name/current/

clip_image230

4.3.8重啟Hadoop

啟動Hadoop,使用jps命令查看,namenode進程正常啟動

cd /usr/local/hadoop-1.1.2/bin

./start-all.sh

clip_image232

4.4  問題3--改變HDFS塊大小

4.4.1Hadoop中建立/input文件夾

使用如下命令在Hadoop中創建/input文件夾,把start開始的sh腳本文件放到該文件中:

cd /usr/local/hadoop-1.1.2/bin

./hadoop fs -mkdir /input

./hadoop fs -put *.sh /input

./hadoop fs -ls /input

clip_image234

4.4.2查看當前blocksize

查看hadoop2節點數據塊大小情況,如下圖所示:

clip_image236

4.4.3修改hdfs-site.xml配置文件

NameNode節點hadoop1中修改hdfs-site.xml配置文件,加入如下配置:

  <property>

    <name>dfs.block.size</name>

      <value>134217728</value>

  </property>

clip_image238

4.4.4重啟Hadoop

重新啟動Hadoop程序

./stop-all.sh

./start-all.sh

clip_image206[1]

4.4.5再次查看當前blocksize

使用如下命令在Hadoop中創建/input1文件夾並復制文件到該文件夾覆蓋之前操作的文件:

./hadoop fs -mkdir /input1

./hadoop fs -put *.sh /input1

再次在查看block size,如下圖所示

clip_image240

4.5  問題4--SNNNN的分離

4.5.1復制虛擬機

復制NameNode節點所在虛擬機作為SecondaryNameNode運行虛擬機

clip_image242

4.5.2設置SNN虛擬機IP地址

設置該虛擬機IP地址為:10.88.147.224

clip_image244

4.5.3設置SNN虛擬機名稱

設置SNN虛擬機名稱為:hadoop4

sudo vi /etc/sysconfig/network

clip_image246

clip_image248

4.5.4所有節點hosts 文件加入SNN IP對應信息

在所有節點/etc/hosts文件中加入SNNIP地址10.88.147.224對應hadoop4

sudo vi /etc/hosts

clip_image250

4.5.5所有節點masters文件加入SNN信息

在所有節點masters文件中加入SNN機器名信息,使用如下命令:

sudo vi /usr/local/hadoop-1.1.2/conf/masters

master文件中加入SNN機器名

clip_image252

4.5.6所有節點中修改hdfs-site.xml

使用如下命令編輯hdfs-site.xml配置文件:

sudo vi /usr/local/hadoop-1.1.2/conf/hdfs-site.xml

hdfs-site.xml文件中加入如下信息:

  <property>

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

      <value>hadoop4:50090</value>

  </property>

clip_image254

4.5.7重啟所有虛擬機

clip_image256

4.5.8配置ssh免密碼登錄

1.     hadoop410.88.147.244)節點中使用ssh-keygen -t rsa生成私鑰和公鑰;

clip_image258

2.     hadoop410.88.147.244)節點中公鑰信息加入到authorized_keys文件中;

ll

chmod 400 -R /home/hadoop/.ssh

cat id_rsa.pub >> authorized_keys

cat authorized_keys

clip_image260

3.     authorized_keys分發到各個節點上;

scp authorized_keys hadoop@hadoop1:/home/hadoop/.ssh

clip_image262

4.     驗證是否能夠免登錄到各個節點;

clip_image264

4.5.9重新格式化NameNode

/usr/local/hadoop-1.1.2/bin目錄下使用如下命令進行格式化:

./hadoop namenode -format

clip_image266

4.5.10   啟動Hadoop

使用如下命令啟動Hadoop

cd /usr/local/hadoop-1.1.2/bin

./start-all.sh

clip_image268

4.5.11   驗證

1.     hadoop1NN)查看進程情況,啟動了NameNodeJobTracker兩個進程:

clip_image270

2.     hadoop2hadoop3查看進程情況,啟動了TraskTracker進程:

clip_image272

(注意這個節點上DataNode並沒有啟動,這個問題是由於NameNodeDataNode之間的namespaceID不一致造成的,該問題的解決方法如4.6所描述)

3.     hadoop4SNN)查看進程情況,啟動了SecondaryNameNode進程:

clip_image274

4.6  問題5--再次格式化namenode,此時datanode是否能加入

4.6.1停止Hadoop並格式化

使用如下命令停止Hadoop並格式化:

./stop-all.sh

./hadoop namenode -format

clip_image276

4.6.2啟動Hadoop,並查看datanode狀態

使用./start-all.sh啟動Hadoop

clip_image268[1]

datanode中使用jps查看啟動狀態:

clip_image272[1]

4.6.3查看datanode日志

查看datanode節點hadoop2日志文件夾下日志內容:

cd /usr/local/hadoop-1.1.2/logs

cat hadoop-hadoop-datanode-hadoop2.log

clip_image278

報錯信息為namenodedatanode之間的namespaceID不一致:

2014-09-30 10:04:41,890 ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.io.IOException: Incompatible namespaceIDs in /usr/local/hadoop-1.1.2/hdfs/data: namenode namespaceID = 87263132; datanode namespaceID = 1318122769

        at org.apache.hadoop.hdfs.server.datanode.DataStorage.doTransition(DataStorage.java:232)

        at org.apache.hadoop.hdfs.server.datanode.DataStorage.recoverTransitionRead(DataStorage.java:147)

        at org.apache.hadoop.hdfs.server.datanode.DataNode.startDataNode(DataNode.java:399)

        at org.apache.hadoop.hdfs.server.datanode.DataNode.<init>(DataNode.java:309)

        at org.apache.hadoop.hdfs.server.datanode.DataNode.makeInstance(DataNode.java:1651)

        at org.apache.hadoop.hdfs.server.datanode.DataNode.instantiateDataNode(DataNode.java:1590)

        at org.apache.hadoop.hdfs.server.datanode.DataNode.createDataNode(DataNode.java:1608)

        at org.apache.hadoop.hdfs.server.datanode.DataNode.secureMain(DataNode.java:1734)

        at org.apache.hadoop.hdfs.server.datanode.DataNode.main(DataNode.java:1751)

4.6.4解決辦法

有兩個解決辦法:

Ø  修改所有datanode/usr/local/hadoop-1.1.2/tmp/dfs/data/current/VERSION 文件的namespaceID namenodenamespaceID(采用該方法)

Ø  刪除datanode /usr/local/hadoop-1.1.2/tmp/dfs/data 目錄

 

登錄到hadoop1節點上,獲取該節點NameNodenamespaceID

cd /usr/local/hadoop-1.1.2/hdfs/name/current

cat VERSION

clip_image280

登錄到hadoop2hadoop3節點上,修改DataNodenamespaceIDNameNodenamespaceID的值:

cd /usr/local/hadoop-1.1.2/hdfs/data/current

vi VERSION

clip_image282

4.6.5重啟集群,查看datanode狀態

namenode節點hadoop1使用./start-all.sh啟動Hadoop

./start-all.sh

clip_image284

datanode節點hadoop2中使用jps查看啟動狀態:

clip_image286

datanode進程已經啟動

4.7  問題6--控制namenode檢查點發生的頻率

4.7.1core-site.xml中修改檢查點頻率

系統默認為1個小時即3600秒,在namenode節點中修改core-site.xml文件,加入如下配置內容:

  <property>

    <name>fs.checkpoint.period</name>

      <value>180</value>

  </property>

clip_image288

4.7.2重啟集群,查看檢查點更新頻率

namenode節點的目錄 /usr/local/hadoop-1.1.2/hdfs/name/current fsimageedits等的更新頻率。每隔4分鍾查看,發現namenode 每隔 180 checkpoint 進行更新一次:

clip_image290

4.7.3觀察checkpoint 前后 namenode的變化

1.     檢查點發生前:

l  namenodefsimageedits 最后修改時間為1639

l  16:40 hdfs系統加入 input 文件,namenode 中的edits 記錄這次操作,其修改時間為16:40

2.     檢查點發生后

l  namenode 中的fsimagefsimagefstimeVERSION等文件在16:42進行了檢查點更新

clip_image292

 

4.7.4基本原理

當距離上個checkpoint 時間 為${fs.checkpoint.period} 時:

1. SSN請求NN滾動edits文件,使新的edits log 放到另一個新生成的edits文件。

2. SSN通過 HTTP GET 獲取NNfsimageedits文件

3. SSNfsimage文件載入內存,並應用edits 文件中的每一項操作,這樣就創建了一個新的合成的fsimage 文件。

4. SSN采用 HTTP POST 方式 將剛合成的fsimage 發送回NN

5. NN用剛從SSN收到的fsimage代替老一版本的fsimage, 並用第一步中產生的edits 代替原先的edits,同時將fctime文件更新到checkpoint發生的時間

最終,名稱節點就有了一份最新的fsimage文件和一個更短的edits文件(該edits文件不一定空,當SSN在執行checkpoint操作時,edits 可能已經記錄下了一些hdfs系統的操作)

5    問題解決

5.1  安裝CentOS64位虛擬機 This host supports Intel VT-x, but Intel VT-x is disabled

在進行Hadoop2.X 64bit編譯安裝中由於使用到64位虛擬機,安裝過程中出現下圖錯誤:

clip_image294

F1 鍵進入BIOS 設置實用程序 使用箭頭鍵security面板下找virtualizationEnter 鍵 進去Intel  VirtualizationTechnology改成EnabledF10 鍵保存並退出 選擇YesEnter 鍵 完全關機(關閉電源)等待幾秒鍾重新啟動計算機此Intel虛擬化技術開啟成功

5.2  *** is not in the sudoers file解決方法

當使用hadoop用戶需要對文件夾進行賦權,使用chmod命令出現hadoop is not in the sudoers file.  This incident will be reported錯誤,如下所示:

clip_image296

 

1.     使用su命令進入root用戶

clip_image298

2.     添加文件的寫權限,操作命令為:chmod u+w /etc/sudoers

clip_image300

3.     編輯/etc/sudoers文件,使用命令"vi /etc/sudoers"進入編輯模式,找到:"root ALL=(ALL) ALL"在起下面添加"hadoop ALL=(ALL) ALL",然后保存退出。

clip_image302

5.3  yum無法下載

1.     /etc/yum.conf中加入proxy=htt://XX.XXX.XX:PORT

clip_image304

2.     重啟網絡

clip_image306

3.     再次運行yum install ambari-server則能夠正常下載

clip_image308

5.4  CentOS 64bit安裝Hadoop2.2.0中出現文件編譯位數異常

在安裝hadoop2.2.0過程中出現如下異常:Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

clip_image310

通過分析是由於lib/native目錄中有些文件是在32位編譯,無法適應CentOS 64位環境造成

clip_image312

有兩種辦法解決:

l  重新編譯hadoop,然后重新部署

l  暫時辦法是修改配置,忽略有問題的文件

clip_image314

5.5  編譯Hadoop2.2.0出現代碼異常

目前的2.2.0 Source Code 壓縮包解壓出來的code有個bug 需要patch后才能編譯。否則編譯hadoop-auth 會提示下面錯誤:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.5.1:testCompile (default-testCompile) on project hadoop-auth: Compilation failure: Compilation failure:

[ERROR] /home/hadoop/Downloads/release-2.2.0/hadoop-common-project/hadoop-auth/src/test/java/org/apache/hadoop/security/authentication/client/AuthenticatorTestCase.java:[88,11] error: cannot access AbstractLifeCycle

[ERROR] class file for org.mortbay.component.AbstractLifeCycle not found

[ERROR] /home/hadoop/Downloads/release-2.2.0/hadoop-common-project/hadoop-auth/src/test/java/org/apache/hadoop/security/authentication/client/AuthenticatorTestCase.java:[96,29] error: cannot access LifeCycle

[ERROR] class file for org.mortbay.component.LifeCycle not found

clip_image316

直接修改hadoop-common-project/hadoop-auth/pom.xml,其實就是少了一個包,添加一個dependency

<dependency>

      <groupId>org.mortbay.jetty</groupId>

      <artifactId>jetty-util</artifactId>

      <scope>test</scope>

</dependency>

clip_image318


免責聲明!

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



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