(1)Host OS:Win7 64bitjava
(2)IDE:Eclipse Version: Luna Service Release 2 (4.4.2)node
(3)虛擬機:VMware 10mysql
(4)Client OS:CentOS 6.4 32bit。linux
注意:sql
如果CentOS 64bit,則在啓動hadoop時,會報出警告。apache
緣由:Hadoop的本地庫($HADOOP_HOME/lib/native/libhadoop.so.1.0.0)是在32 bit平臺編譯的,只支持32bit,並不支持64bit的,所以,若在64bit的CentOS上啓動就會報出警告,以下所示。vim
INFO namenode.NameNode: createNameNode [-format]windows Java HotSpot(TM) Server VM warning: You have loaded library /home/hadoop/app/hadoop-2.4.1/lib/native/libhadoop.so.1.0.0 which might have disabled stack guard.網絡 The VM will try to fix the stack guard now.app It's highly recommended that you fix the library with 'execstack -c <libfile>', or link it with '-z noexecstack'. WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable |
(5)JDK版本:jdk-7u55-linux-i586.tar
(6)Hadoop Version:hadoop-2.4.1
(7)Hadoop集羣配置參數
本集羣共三個節點,一個是Namenode節點,剩餘兩個爲Datanode節點。
7.1)Namenode節點參數
IP:192.168.234.8
主機名:namenode01
7.2)第一個DataNode節點參數
IP:192.168.234.11
主機名:datanode01
7.3)第二個DataNode節點參數
IP:192.168.234.12
主機名:datanode02
Hadoop的僞分佈式安裝主要歸納爲如下步驟:
Linux環境的配置(IP, 主機名,hosts映射),安裝配置JDK,安裝配置hadoop,配置SSH免登錄等。
1.1修改適配器設置
點擊VMware快捷方式,右鍵打開文件所在位置 -> 雙擊vmnetcfg.exe -> VMnet1 host-only ->修改subnet ip 設置網段:192.168.234.255 子網掩碼:255.255.255.0 -> apply -> ok
回到windows --> 打開網絡和共享中心 -> 更改適配器設置 -> 右鍵VMnet8(NAT鏈接方式) -> 屬性 -> 雙擊IPv4 -> 設置windows的IP:192.168.234.1 子網掩碼:255.255.255.0 -> 點擊肯定
在虛擬軟件上 --My Computer -> 選中虛擬機 -> 右鍵 -> settings -> network adapter -> host only -> ok
1.2關閉防火牆
查看防火牆狀態
# service iptables status
關閉防火牆
# service iptables stop
查看防火牆開機啓動狀態
# chkconfig iptables --list
關閉防火牆開機啓動
# chkconfig iptables off
1.3修改IP、主機名和hosts文件
1.3.1修改IP
兩種方式:
第一種:經過Linux圖形界面進行修改(強烈推薦)
進入Linux圖形界面 -> 右鍵點擊右上方的兩個小電腦 -> 點擊Edit connections -> 選中當前網絡System eth0 -> 點擊edit按鈕 -> 選擇IPv4 -> method選擇爲manual -> 點擊add按鈕 -> 添加IP:192.168.1.101 子網掩碼:255.255.255.0 網關:192.168.1.1 -> apply
第二種:修改配置文件方式(屌絲程序猿專用)
vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
BOOTPROTO="static" ###
HWADDR="00:0C:29:3C:BF:E7"
IPV6INIT="yes"
NM_CONTROLLED="yes"
ONBOOT="yes"
TYPE="Ethernet"
UUID="ce22eeca-ecde-4536-8cc2-ef0dc36d4a8c"
IPADDR="192.168.234.8" ###
NETMASK="255.255.255.0" ###
GATEWAY="192.168.234.255" ###
1.3.2修改主機名
(1)編輯/etc/sysconfig/network文件
# vim /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=namenode01 ###
(2)使用hostname
# hostname namenode01
(3)從新登陸使得新主機名生效
# logout
注意:修改datanode01和datanode02的節點的主機名也是這個步驟。
1.3.3修改主機名和IP的映射關係
編輯/etc/hosts文件。
# vim /etc/hosts
192.168.234.8 namenode01 (Namenode的IP地址與域名的映射)
192.168.234.11 datanode01 (第一個Datanode的IP地址與域名的映射)
192.168.234.12 datanode02 (第二個Datanode的IP地址與域名的映射)
1.4建立hadoop用戶、用戶組以及賦予權限
(1)建立用戶和組
建立hadoop用戶組hadoopGroup
# groupadd hadoopGroup
建立hadoop用戶,併爲其指定用戶組,用戶家目錄
# useradd hadoop -g hadoopGroup -d /home/hadoop
(2)爲hadoop用戶賦予sudo權限
編輯「/etc/sudoers」文件,添加相關命令。
Allow root to run any commands anywhere root ALL=(ALL) ALL hadoop ALL=(ALL) ALL |
1.4重啓Linux
# shutdown -h now
二、安裝JDK
2.1在【SecureSRT】中,按下「alt+p」後出現sftp窗口,而後put d:\xxx\yy\ll\jdk-7u_65-i585.tar.gz
2.2解壓jdk
建立文件夾
# mkdir /home/hadoop/app
解壓
# tar -zxvf jdk-7u55-linux-i586.tar.gz -C /home/hadoop/app
2.3將java添加到環境變量中
# vim /etc/profile
在文件最後添加
export JAVA_HOME=/home/hadoop/app/jdk1.7.0_55
export PATH=$PATH:$JAVA_HOME/bin
刷新配置
# source /etc/profile
注意01:在安裝以前,要確保每臺機器上都安裝了JDK,配置了環境變量等。
注意02:將用戶切換到hadoop用戶。
注意03:hadoop2.x的配置文件$HADOOP_HOME/etc/hadoop僞分佈式安裝須要修改5個配置文件。
3.1配置hadoop(僅僅在單一節點配置,hadoop-server01)
第一個:hadoop-env.sh
vim hadoop-env.sh
#第27行
export JAVA_HOME=/usr/java/jdk1.7.0_65
注意:原來的配置爲「export JAVA_HOME=${ JAVA_HOME }」 ,是靈活的,在此要將其寫死,由於原配置中,Hadoop可能會沒法識別JAVA_HOME這個環境變量。
第二個:core-site.xml
core-site.xml
該文件中配置了Hadoop運行時的一些「公共的參數」。
<configuration> <!-- 指定HADOOP所使用的文件系統schema(URI),HDFS的老大(NameNode)的地址 --> <property> <name>fs.defaultFS</name> <!-- 配置namenode --> <value>hdfs://namenode01:9000</value> </property>
<!-- 指定hadoop運行時產生文件的存儲目錄 --> <property> <name>hadoop.tmp.dir</name> <value>/home/hadoop/app/hadoop-2.4.1/tmp</value> </property> </configuration> |
解釋1:
「hdfs://namenode01:9000」是一個URI,就像mysql的URI同樣「jdbc:mysql://host:3306/db?if..」。
其中:
「hdfs://」和「jdbc:mysql://」這兩個開頭都是一個「Schema」,「hdfs://」是Hadoop的協議。
解釋2:
「hdfs://namenode01:9000」,Schema後邊的部分爲「namenode的地址(或者域名、主機名)和端口號」。
namenode01:爲Namenode節點主機的主機名。
解釋3:
「hadoop.tmp.dir」爲hadoop的工做目錄。Hadoop運行過程當中產生的中間目錄都放置在該文件夾下。
具體的參數配置,請參考:
http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/core-default.xml
第三個:hdfs-site.xml
<!-- 指定HDFS副本的數量 --> <property> <name>dfs.replication</name> <value>1</value> </property> |
hdfs-site.xml:具體規定hadoop工做的一些細節。
dfs.replication:指定HDFS副本的數量。
第四個:mapred-site.xml (mv mapred-site.xml.template mapred-site.xml)
$ mv mapred-site.xml.template mapred-site.xml
$ vim mapred-site.xml
<!-- 指定mr運行在yarn上 --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> |
第五個:yarn-site.xml
<!-- 指定YARN的老大(ResourceManager)的地址 --> <property> <name>yarn.resourcemanager.hostname</name> <value>namenode01</value> </property> <!-- reducer獲取數據的方式 --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> |
解釋:
(1) 「yarn.nodemanager.aux-services」:規定一些「從節點」的行爲。
第六個:配置」 etc/hadoop/slave」文件
做用:決定Hadoop在啓動時,是否自動去啓動從節點「datanode」。
$ vim slaves
輸入下列內容
namenode01
datanode01
datanode02
(1)將從節點「datanode」的信息寫入到該文件中。
由於上邊五個xml文件配置的都是namenode,或者yarn或者resourceManager等相關的信息,並無配置與「從節點datanode」相關的信息,所以,在slaves中須要配置相關從節點的信息。
(2) 該文件不是必須配置的。
若配置該文件,則在Hadoop啓動的時候,能夠Hadoop會自動啓動「從節點datanode」,若沒有配置,則能夠經過手工的形式啓動「從節點」。
3.2將hadoop添加到環境變量
# vim /etc/proflie
export JAVA_HOME=/home/hadoop/app/jdk1.7.0_55
export HADOOP_HOME=/home/hadoop/app/hadoop-2.4.1
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
# source /etc/profile
3.3遠程拷貝:將已經配置完的單一節點的Hadoop配置拷貝到另外兩臺節點中
(1)已配置好的節點:
namenode01
(2)未配置的節點:
datanode01
datanode02
(3)目標:
將「namenode01」節點中已經配置好的Hadoop文件(/home/hadoop/app/hadoop-2.4.1)拷貝到節點「datanode01」和節點「datanode02」所對應的目錄下。
(4)命令
[hadoop@ namenode01 app]$ pwd
/home/hadoop/app/hadoop-2.4.1
[hadoop@ namenode01 app]$ ls
hadoop-2.4.1
[hadoop@ namenode01 hadoop]$
scp -r hadoop-2.4.1/ hadoop@datanode01:/home/hadoop/app
命令解析:
①scp:「Secure Copy」,通常用於「遠程拷貝」。
②「hadoop@ datanode01」:表示拷貝到「datanode01」這臺主機中的「hadoop用戶」下目錄「/home/hadoop/app」中去。
若沒有「hadoop」這個字符串,則表示將文件拷貝到其餘節點上的與「當前執行命令的用戶名」相同的那個用戶目錄下。
拷貝以前注意:
注意01:在執行遠程拷貝以前,在遠程機器上,必須確保已經完成了初步的環境配置:
配置完IP,hostname,IP與域名的映射文件,hadoop用戶和用戶組,hadoop用戶密碼等,hadoop用戶主目錄的權限。
注意02:若主拷貝方節點與目標拷貝方節點上的兩個用戶之間的權限不同,則沒法完成系統拷貝。。
注意03:若另外一臺節點中沒有「app」目錄,則要先建立該目錄,再執行遠程拷貝。
3.4格式化namenode(是對namenode進行初始化)
切換到目錄:$HADOOP_HOME/bin中,使用其中的命令「hdfs」。
注意:在使用可以分佈式文件系統(即啓動hadoop)以前,必定可以要先格式化。
# hdfs namenode -format
若出現下述命令,則說明hadoop文件系統的格式化已經成功了。
15/03/20 13:07:38 INFO common.Storage: Storage directory /app/ha doop-2.4.1/tmp/dfs/name has been successfully formatted. 15/03/20 13:07:39 INFO namenode.NNStorageRetentionManager: Going to retain 1 images with txid >= 0 15/03/20 13:07:39 INFO util.ExitUtil: Exiting with status 0 15/03/20 13:07:39 INFO namenode.NameNode: SHUTDOWN_MSG: /************************************************************ SHUTDOWN_MSG: Shutting down NameNode at namenode01/192.168.234.8 ************************************************************/ |
所謂格式化也就是在用戶本身建立的「$HADOOP/tmp」目錄下,寫入一些初始的元數據文件。格式化完畢後,會在$HADOOP_HOME/tmp/current目錄下,生成HDFS的相關數據文件,以下所示。
[hadoop@namenode01 current]$ pwd /home/hadoop/app/hadoop-2.4.1/tmp/dfs/name/current [hadoop@namenode01 current]$ ls edits_0000000000000000001-0000000000000000002 edits_0000000000000000003-0000000000000000005 fsimage_0000000000000000018 fsimage_0000000000000000018.md5 fsimage_0000000000000000020 fsimage_0000000000000000020.md5 seen_txid VERSION |
3.5啓動hadoop
注意:在使用可以分佈式文件系統以前,必定可以要先格式化。
先啓動HDFS
sbin/start-dfs.sh
再啓動YARN
sbin/start-yarn.sh
或者也能夠經過以下Web界面來確認HDFS是否啓動成功:
若沒有啓動「start-dfs.sh」,則該界面是不可以成功啓動的。
http://192.168.234.8:50070 (HDFS管理界面,顯示NameNode信息)
http:// 192.168.234.8:8088 (MR管理界面)
3.6驗證是否啓動成功
使用jps命令驗證
27408 NameNode
28218 Jps
27643 SecondaryNameNode
28066 NodeManager
27803 ResourceManager (這個進程表明YARN,是一個分佈式的資源管理系統)
27512 DataNode
4.1 生成ssh免登錄密鑰
進入到個人home目錄
cd ~/.ssh
ssh-keygen -t rsa (四個回車)
執行完這個命令後,會生成兩個文件id_rsa(私鑰)、id_rsa.pub(公鑰)
4.2拷貝公鑰
將公鑰拷貝到要免密登錄的目標機器上和本機上。
①ssh-copy-id datanode01
②ssh-copy-id datanode02
③ssh-copy-id namenode01
注意:千萬不能忘了將密鑰拷貝到「本機」上,在此,本機的主機名爲:namenode01,不然,該配置將不會成功。