Hadoop集羣搭建

Hadoop集羣搭建java

 

 搭建文檔:node

https://pan.baidu.com/s/1dPUHiwhcDNrMsKNIgOjj0Qlinux

1、實驗環境

虛擬機數量:3臺web

操做系統:Ubuntu 14.04shell

Hadoop:Hadoop 2.6.5apache

Java:java version "1.7.0_51"ubuntu

 

2、實驗內容及步驟vim

爲方便闡述,本實驗只搭建一個有三臺主機的小集羣。瀏覽器

三臺機器的具體分工命名以下:服務器

IP

主機名

功能角色

10.49.23.127

 Master

namenode(控制節點)、JobTracker(工做分配)

10.49.23.134

 slave1

datanode(數據節點)、TaskTracker(任務執行)

10.49.23.129

 slave2

datanode(數據節點)、TaskTracker(任務執行)

 

 

(一)JDK安裝

一、解壓
tar –zxvf jdk-7u67-linux-x64.tar.gz

 二、修改/etc/profile文件

1)vim /etc/profile

文件末尾加:

export JAVA_HOME=/home/ubuntu/jdk1.7.0_51

export JRE_HOME=/home/ubuntu/jdk1.7.0_51/jre  

export PATH=$PATH:/home/ubuntu/jdk1.7.0_51/bin  

export CLASSPATH=./:/home/ubuntu/jdk1.7.0_51/lib

 

1-2

2)使/etc/profile文件生效:

source /etc/profile

 

 

3)驗證JDK安裝成功:

java –version

 

1-4 

4)按此步驟在集羣剩餘服務器中配置好JDK

(二)SSH安裝

一、單臺安裝ssh.

 1)apt-get install ssh.

2)進入.ssh目錄下面,在每臺機器上執行:ssh-keygen -t  dsa  以後一路回車,產生密鑰;若是沒有.ssh目錄則在/home文件mkdir .ssh

 

2-1

3)完成第二步後會產生兩個文件:

id-dsa     #私鑰

id-dsa.pub   #公鑰

4)在第一臺機器的目錄.ssh下執行命令,cat id_dsa.pub >> authorized_keys;此後.ssh下面會出現authorized_keys文件。

5)而後將第一臺機器的.ssh目錄下面的authorized_keys文件拷貝到第二臺計算機的.ssh目錄下,如:scp authorized_keys slaver1:~/.ssh/

6)再轉到第二臺機器的.ssh目錄下,會發現剛剛傳輸過來的文件-authorized_keys,而後執行命令,將第二臺計算機的公鑰也加進來,如:cat id_dsa.pub >> authorized_keys.

7)將第二臺計算機新生成的authorized_keys傳輸第三臺計算機,將第三臺計算機的公鑰-id-rsa.pub添加到從第二臺計算機傳過來的authorized_keys裏面。

8)依次類推,直至集羣中的最後一臺計算機。

9)在集羣的最後一臺計算機執行完添加後,生成的authorized_keys文件就包含集羣中全部計算機的公鑰,若是之後還有機器加進到集羣中來,能夠直接添加到文件-authorized_keys。最後,將最後生成的authorized_keys複製到集羣中的每一臺計算機的.ssh目錄下,覆蓋掉以前的authorized_keys。

10)完沉第九步後,就能夠在集羣中任意一臺計算機上,免密碼ssh登陸到其餘計算了。

(三)Hadoop搭建

1.在三臺主機上分別設置/etc/hostname:vim /etc/hostname修改成對應的master或slavehosts文件用於定義主機名與IP地址之間的對應關係(三臺主機配置相同)。

修改/etc/hostsvim /etc/hosts

 

 

圖3-1

 

三臺hadoop文件配置相同,因此配置完一臺後,能夠把整個hadoop複製過去就好了,如今開始配置master主機的hadoop文件。

2.須要配置的文件涉及到的有7個(mapred-site.xml.tmplate除外)以下圖標示部分:

mapred-site.xml默認不存在的,能夠複製相應的template文件得到。

1)配置文件1:hadoop-env.sh

修改JAVA_HOME值以下圖:

 

3-3

2)配置文件2:yarn-env.sh

末尾添加JAVA_HOME值以下圖:

 

3-4

3)配置文件3:slaves(保存全部slave節點)刪除localhost寫入slave1,slave2:

 

3-5

4)配置文件4:core-site.xml

添加配置內容以下圖:

<property>

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

<value>hdfs://master:9000</value>

</property>

<property>

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

<value>/home/software/hdfs_all/tmp</value>

</property>

 

3-6 

5)配置文件5:hdfs-site.xml

<property>

<name>dfs.replication</name>

<value>2</value>

</property>

<!-- 如下兩個參數能夠不進行配置,在2.20版本中只要在core-site.xml

文件中指定了hadoop.tmp.dir如下目錄會自動生成在tmp目錄中,可是爲

了維護方便,有必要將其路徑明確指定在配置文件中 -->

<property>

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

<value>file:/home/software/hdfs_all/dfs/name</value>

</property>

<property>

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

<value>file:/home/software/hdfs_all/dfs/data</value>

</property> 

圖3-7

6)配置文件6:mapred-site.xml

<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>

圖3-8

 

 

7)配置文件7:yarn-site.xml

<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>master:8032</value>

</property>

<property>

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

<value>master:8030</value>

</property>

<property>

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

<value>master:8031</value>

</property>

<property>

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

<value>master:8033</value>

</property>

<property>

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

<value>master:8088</value>

</property>

 

圖3-9

上面配置完畢後,基本上完成了90%的工做,剩下的就是複製。咱們能夠把整個hadoop複製過去使用命令以下:

 scp -r hadoop-2.6.5/ slave1:/home/

scp -r hadoop-2.6.5/ slave2:/home/

爲方便用戶和系統管理使用hadoop、hdfs相關命令,須要在/etc/environment配置系統環境變量,使用命令:vim /etc/environment

配置內容爲hadoop目錄下的bin、sbin路徑,具體以下

 

圖3-10

添加完後執行生效命令:source /etc/environment

下面要作的就是啓動驗證,建議在驗證前,把以上三臺機器重啓,使其相關配置生效。

(四)啓動驗證

在maser節點格式化namenode:

hadoop  namenode -format

啓動hadoop:

start-all.sh

使用Jps命令master有以下進程,說明配置正確

 

圖4-1

使用Jps命令slave一、slave2有以下進程,說明配置正確

 

4-2

 

 

 

 

 

 

 

 

 

 

 

查看分佈式文件系統:http://master:50070

 

圖4-3

查看MapReduce:http://master:8088

 

 

 

 

 

 

Zookeeper的安裝與配置

 

 

實驗學時1學時

虛擬機個數:3

實驗環境:Ubuntu14.04系統3虛擬機

1、 實驗目的

1 .可靠性:具備簡單、健壯、良好的性能,若是消息m被到一臺服務器接受,那麼它將被全部的服務器接受。
2 .實時性:Zookeeper保證客戶端將在一個時間間隔範圍內得到服務器的更新信息,或者服務器失效的信息。但因爲網絡延時等緣由,Zookeeper不能保證兩個客戶端能同時獲得剛更新的數據,若是須要最新數據,應該在讀數據以前調用sync()接口。
3.等待無關(wait-free):慢的或者失效的client不得干預快速的client的請求,使得每一個client都能有效的等待。
4.原子性:更新只能成功或者失敗,沒有中間狀態。
5 .順序性:包括全局有序和偏序兩種:全局有序是指若是在一臺服務器上消息a在消息b前發佈,則在全部Server上消息a都將在消息b前被髮布;偏序是指若是一個消息b在消息a後被同一個發送者發佈,a必將排在b前面。

2、實驗原理

Zookeeper 是分佈式服務框架,主要是用來解決分佈式應用中常常遇到的一些數據管理問題. Zookeeper 的核心是廣播,這個機制保證了各個Server之間的同步。實現這個機制的協議叫作Zab協議。Zab協議有兩種模式,它們分別是恢復模式(選主)和廣播 模式(同步)。當服務啓動或者在領導者崩潰後,Zab就進入了恢復模式,當領導者被選舉出來,且大多數Server完成了和leader的狀態同步之後, 恢復模式就結束了。狀態同步保證了leaderServer具備相同的系統狀態。爲了保證事務的順序一致性,zookeeper採用了遞增的事務id號 (zxid)來標識事務。全部的提議(proposal)都在被提出的時候加上了zxid。實現中zxid是一個64位的數字,它高32位是epoch用 來標識leader關係是否改變,每次一個leader被選出來,它都會有一個新的epoch,標識當前屬於那個leader的統治時期。低32位用於遞 增計數。

3、實驗內容

三臺ubuntu系統中搭建好Zookeeper

4、實驗指導

1、解壓zooker-3-4-5.tar.gz

解壓:#  tar -zxf zookeeper-3.4.5.tar.gz

更更名字爲zookeeper#  mv zookeeper-3.4.5  u-zookeeper

2、修改zoo.cfg配置文件

Zookeeper集羣環境下只要一半以上的機器正常啓動了,那麼Zookeeper服務將是可用的。所以,集羣上部署Zookeeper最好使用奇數臺機器,這樣若是有5臺機器,只要3臺正常工做則服務將正常。
下面咱們將對Zookeeper的配置文件的參數進行設置 

進入到u-zookeeperconf目錄下將zoo_sample.cfg文件拷貝一份,命名爲爲:zoo.cfg

進入目錄 # cd u-zookeeper/conf

拷貝

命名#  mv  zoo_sample.cfg zoo.cfg

vim  zoo.cfg修改內容以下:

配置文件裏面的目錄須要本身建立

 

4# vim /etc/environment

 

5遠程複製分發安裝文件

接下來將上面的安裝文件拷貝到集羣中的其餘機器上對應的目錄下:

 

 

master節點/roor/u-zookeeper/data/裏面建立myid文件

echo "1" > /roor/u-zookeeper/data/myid

同理拷貝/etc/profile/etc/environmentslaver1,slaver2,拷貝完成後修改對 應的機器上的myid。例如修改slaver1中的myid以下:

echo "2" > /roor/u-zookeeper/data/myid

cat  /roor/u-zookeeper/data/myid

結果: 2

 

Slaver2中的myid以下:

echo "3" > /roor/u-zookeeper/data/myid

cat  /roor/u-zookeeper/data/myid

結果: 3

 

 

 

 

以上操做完成後,請全部節點服務器重啓。

6啓動zookeeper集羣

ZooKeeper集羣的每一個結點上,執行啓動ZooKeeper服務的腳本:zkServer.sh start

以下圖所示:

 

其中,QuorumPeerMainzookeeper進程,啓動正常。

如上依次啓動了全部機器上的Zookeeper以後能夠經過ZooKeeper的腳原本查看啓動狀態,包括集羣中各個結點的角色(或是Leader,或是Follower),以下所示,是在ZooKeeper集羣中的每一個結點上查詢的結果:

 

 

 

經過上面狀態查詢結果可見,slaver1是集羣的Leader,其他的兩個結點是Follower

另外,能夠經過客戶端腳本,鏈接到ZooKeeper集羣上。對於客戶端來講,ZooKeeper是一個總體(ensemble),鏈接到ZooKeeper集羣實際上感受在獨享整個集羣的服務,因此,你能夠在任何一個結點上創建到服務集羣的鏈接,例如:

 

 

7中止zookeeper進程

#  zkServer.sh stop

至此,Zookeeper集羣安裝完成!

 

 

四、HBase的安裝和配置

# tar -zxvf hbase-0.96.0.tar.gz

更更名字爲hbasemv hbase-0.96.0 /soft/hbase

4.1 配置conf/hbase-env.sh

 

圖4-1 配置HBase配置文件

 

圖4-2 配置HBase配置文件

 

export JAVA_HOME==/usr/lib/jvm/jdk1.7.0_51

export HBASE_CLASSPATH=~/u/etc/hadoop

export HBASE_PID_DIR=/soft/hbase/pids

修改:

export HBASE_MANAGES_ZK=false

一個分佈式運行的Hbase依賴一個zookeeper集羣。全部的節點和客戶端都必須可以訪問zookeeper。默認的狀況下Hbase會管理一個zookeep集羣,即Hbase默認自帶一個zookeep集羣。這個集羣會隨着Hbase的啓動而啓動。而在實際的商業項目中一般本身管理一個zookeeper集羣更便於優化配置提升集羣工做效率,但須要配置Hbase。須要修改conf/hbase-env.sh裏面的HBASE_MANAGES_ZK 來切換。這個值默認是true的,做用是讓Hbase啓動的時候同時也啓動zookeeper.在本實驗中,咱們採用獨立運行zookeeper集羣的方式,故將其屬性值改成false

 

4.2 配置conf/hbase-site.xml

配置效果圖以下:

 

圖4-3 hbase-site.xml配置文件

 

要想運行徹底分佈式模式,加一個屬性 hbase.cluster.distributed 設置爲 true 而後把 hbase.rootdir 設置爲HDFS的NameNode的位置

hbase.rootdir:這個目錄是region server的共享目錄,用來持久化Hbase。URL須要是'徹底正確'的,還要包含文件系統的scheme

hbase.cluster.distributed :Hbase的運行模式。false是單機模式,true是分佈式模式。若爲false,Hbase和Zookeeper會運行在同一個JVM裏面。

hbase-site.xml配置zookeeper:當Hbase管理zookeeper的時候,你能夠經過修改zoo.cfg來配置zookeeper,對於zookeepr的配置,你至少要在 hbase-site.xml中列出zookeepr的ensemble servers,具體的字段是 hbase.zookeeper.quorum.在這裏列出Zookeeper集羣的地址列表,用逗號分割。

hbase.zookeeper.property.clientPortZooKeeper的zoo.conf中的配置,客戶端鏈接的端口。

hbase.zookeeper.property.dataDirZooKeeper的zoo.conf中的配置。

對於獨立的Zookeeper,要指明Zookeeper的host和端口。須要在 hbase-site.xml中設置。

 

4.3 配置conf/regionservers

寫入:slaver一、slaver2

 

圖4-4 配置集羣信息

 

在這裏列出了你但願運行的所有 HRegionServer,一行寫一個host (就像Hadoop裏面的 slaver 同樣). 列在這裏的server會隨着集羣的啓動而啓動,集羣的中止而中止

 

4.4 hadoop配置文件拷入

# cp ~/u/etc/hadoop/hdfs-site.xml /soft/hbase/conf

# cp ~/u/etc/hadoop/core-site.xml /soft/hbase/conf

 

4.5 分發hbase

# scp  -r  /soft/hbase slaver1:/soft/hbase

# scp  -r  /soft/hbase slaver2:/soft/hbase

 

4.6 運行和測試

master上執行:

(1)、# start-dfs.sh  

(2)、# start-yarn.sh

(3)、# zkServer.sh  start(各個節點均執行)

(4)、# start-hbase.sh  (涵蓋web管理界面的啓動)

使用jps查看進程,在master上:

 

圖4-5 master進程列表

 

 

圖4-6 從節點進程列表

 

 

圖4-7 從節點進程列表

 

經過瀏覽器查看60010,60030端口查看端口號改爲了16010和16030

http://192.168.60.190:60010/

 

圖4-8 瀏覽器主節點信息

 

http://192.168.60.199:60030/rs-status

 

圖4-9 瀏覽器從節點信息

 

4.7 多節點啓動HMaster

root@master:/soft/hbase/bin# hbase-daemon.sh start master

在其餘子節點同時啓動HMaster

能夠作等待備份做用;

 

五、HBase簡單操做

Hbase腳本

啓動:hbase shell

 

圖5-1 啓動HBase

 

1) status命令

hbase(main):008:0> status

1 servers, 0 dead, 3.0000 average load

 

2) version命令

hbase(main):007:0> version

0.94.12, r1524863, Fri Sep 20 00:25:45 UTC 2013

 

3) create 命令

建立一個名爲 test 的表,這個表只有一個列爲 cf。其中表名、列都要用單引號括起來,並以逗號隔開。

hbase(main):001:0> create 'test', 'cf'

0 row(s) in 10.3830 seconds

 

4) list 命令

查看當前 HBase 中具備哪些表。

hbase(main):009:0> list

TABLE                                                                           

test                                                                            

1 row(s) in 0.3590 seconds

 

六、備註

問題解決:

一、在安裝完HBase後,啓動hbase時會報slf4j-log4j的錯誤,這是由於hadoop的slf4j-log4j與HBase中的slf4j-log4j啓衝突。

二、在web上查看HBase時,以前用的時:

http://master:60010/

http://slaver1:60030/

可是存在問題,不能打開頁面進行查看HBase裏邊的信息。是由於在HBase1.X以後的版本中端口號改爲了16010和16030

 

 

 

運行PI實例:

root@master:/home/hadoop-2.6.5/share/hadoop/mapreduce# hadoop jar hadoop-mapreduce-examples-2.6.5.jar pi 2 10

相關文章
相關標籤/搜索