Hadoop集羣(一) Zookeeper搭建

做爲Hadoop初學者,天然要從安裝入手。而hadoop的優點就是分佈式,因此,也必定要安裝分佈式的系統。java

總體安裝步驟,包括Zookeeper+HDFS+Hbase,爲了文章簡潔,我會分三篇blog記錄個人安裝步驟。node

本文記錄的是集羣環境準備,zookeeper的安裝步驟。python

~~~~~~~~~~~環境準備部分~~~~~~~~~~~~~~~~~linux

IP部署規劃(準備了三個虛擬機,操做系統是Centos6.7)apache

Zookeeper主機分配bash

192.168.67.101 c6701192.168.67.102 c6702192.168.67.103 c6703session

 

HDFS主機分配ssh

192.168.67.101 c6701 --Namenode+datanode192.168.67.102 c6702 --datanode192.168.67.103 c6703 --datanodesocket

 

Hbase主機分配分佈式

192.168.67.101 c6701 --Master + region192.168.67.102 c6702 --region192.168.67.103 c6703 --region

 

1. 爲了分別管理各個服務,我爲每一個服務,都單首創建了用戶.

建立的用戶有:

zk

hdfs

hbase

 

2. 爲每個用戶建立ssh免密,並分發到所有節點,這樣,我就只在C6701上執行命令,經過遠程的方式安裝C6702和C6703

ssh-keygen -t rsa -f ~/.ssh/id_rsa

 

拷貝密鑰到所有節點便可(只有c6701訪問02和03不須要密碼,反向訪問是須要密碼的)

ssh-copy-id  c6701  

ssh-copy-id  c6702

ssh-copy-id  c6703

 

3. 強調一下,/etc/hosts 須要設置

[root@c6701 ~]# more /etc/hosts 192.168.67.101 c6701.org c6701192.168.67.102 c6702.org c6702192.168.67.103 c6703.org c6703

 

4. 下面在C6701執行,中間會調用ssh遠程執行一些命令,驗證ssh免密是否生效

ssh c6702 "cat /proc/cpuinfo"

ssh c6702 "hostname"

 

5. 下載安裝軟件(內網地址)

cd /tmp/software

wget http://192.21.104.48/deploy/jdk-8u144-linux-x64.tar.gz

wget http://192.21.104.48/deploy/zookeeper-3.4.6.tar.gz

wget http://192.21.104.48/deploy/hbase-1.1.3.tar.gz

wget http://192.21.104.48/deploy/hadoop-2.6.0-EDH-0u2.tar.gz

wget http://192.21.104.48/deploy/hadoop-2.7.1.tar.gz

 

6. 安裝JDK,所有節點都要安裝

#tar -xzvf  jdk-8u144-linux-x64.tar.gz -C /usr/local

 

7. 添加下面信息到.bash_profile

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

export JRE_HOME=/usr/local/jdk1.8.0_144/jre

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

export PATH=$JAVA_HOME/bin:$PATH

source /etc/profile

 

8. 檢查版本信息

# java -version

java version "1.8.0_144"

Java(TM) SE Runtime Environment (build 1.8.0_144-b01)

Java HotSpot(TM) 64-Bit Server VM (build 25.144-b01, mixed mode)

 

 

~~~~~~~~~~~zookeeper的安裝部分~~~~~~~~~~~~~~~~~

1. 在C6701安裝Zookeeper

useradd zk

echo "zk:zk" | chpasswd

su - zk

mkdir zk

tar -zxvf /tmp/software/zookeeper-3.4.6.tar.gz -C /home/zk/zk

 

~~~~~~~~~~~~~zoo.cfg的配置~~~~~~~~~~~~~~~

$ pwd/home/zk/zk/zookeeper-3.4.6/conf/zoo.cfg

$ cat /home/zk/zk/zookeeper-3.4.6/conf/zoo.cfg |grep -v '^#'

tickTime=2000

initLimit=10

syncLimit=5

dataDir=/data/zookeeper/data

dataLogDir=/data/zookeeper/log

clientPort=2181

autopurge.snapRetainCount=3

autopurge.purgeInterval=6

server.1=c6701:2888:3888

server.2=c6702:2888:3888

server.3=c6703:2888:3888~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

2. 根據zoo.cfg建立data和log兩個文件夾

#mkdir -p /data/zookeeper/data#mkdir -p /data/zookeeper/log#chown -R zk:zk /data/zookeeper#chown -R zk:zk /data/zookeeper/data#chown -R zk:zk /data/zookeeper/log

 

3.在zookeeper的目錄中,建立上述兩個文件夾。進入zkdata文件夾,建立文件myid,填入1。這裏寫入的1,是在zoo.cfg文本中的server.1中的1。當咱們把全部文件都配置完畢,咱們把hadoop1中yarn目錄複製到其它機器中,咱們在修改每臺機器中對應的myid文本,hadoop2中的myid寫入2。其他節點,安照上面配置,依此寫入相應的數字。Zkdatalog文件夾,是爲了指定zookeeper產生日誌指定相應的路徑。

# su - zk -c "echo 1 > /data/zookeeper/data/myid"

 

4. 添加環境變量,在/etc/profile目錄中,將ZOOKEEPER_HOME/bin在原有的PATH後面加入":$ZOOKEEPER_HOME/bin"

 

關於環境變量修改/etc目錄下的profile文件,也能夠在根目錄下的.bashrc目錄下添加環境變量。這二者有什麼區別:.bashrc是對當前目錄用戶的環境變量,profile文件是對全部用戶都開放的目錄。當系統加載文件中,先從profile找相應的路勁,若是沒有會在.bashrc文件中找對應的環境變量路徑。這二者你們稍至瞭解。

而後 source /etc/profile

 

5. 安裝c6702的zookeeper

#ssh c6702 "useradd zk"#ssh c6702 "echo "zk:zk" | chpasswd"

 

zk用戶ssh免密

#ssh-copy-id  zk@c6702

 

拷貝軟件

#scp -r /tmp/software/hadoop-* root@c6702:/tmp/software#ssh c6702 "chmod 777 /tmp/software/*"

 

建立目錄,解壓軟件

#ssh zk@c6702 "mkdir zk"#ssh zk@c6702 "tar -zxvf /tmp/software/zookeeper-3.4.6.tar.gz -C /home/zk/zk"#ssh zk@c6702 "ls -al zk"#ssh zk@c6702 "ls -al zk/zookeeper*"#ssh zk@c6702 "rm /home/zk/zk/zookeeper-3.4.6/conf/zoo.cfg"#scp -r /home/zk/zk/zookeeper-3.4.6/conf/zoo.cfg zk@c6702:/home/zk/zk/zookeeper-3.4.6/conf/.#ssh zk@c6702 "cat /home/zk/zk/zookeeper-3.4.6/conf/zoo.cfg |grep -v '^#'"

根據zoo.cfg建立目錄#ssh c6702 "mkdir -p /data/zookeeper/data"#ssh c6702 "chown -R zk:zk /data/zookeeper"#ssh c6702 "chown -R zk:zk /data/zookeeper/data"#ssh c6702 "mkdir -p /data/zookeeper/log" #ssh c6702 "chown -R zk:zk /data/zookeeper/log"

建立文件myid,填入2

ssh zk@c6702  "echo 2 > /data/zookeeper/data/myid"

 

6. 安裝c6703的zookeeper

#ssh c6703 "useradd zk"#ssh c6703 "echo "zk:zk" | chpasswd"

 

zk用戶ssh免密

ssh-copy-id  zk@c6703

 

拷貝軟件

#scp -r /tmp/software/hadoop-* root@c6703:/tmp/software#ssh c6703 "chmod 777 /tmp/software/*"

 

建立目錄,解壓軟件

#ssh zk@c6703 "mkdir zk"#ssh zk@c6703 "tar -zxvf /tmp/software/zookeeper-3.4.6.tar.gz -C /home/zk/zk"#ssh zk@c6703 "ls -al zk"#ssh zk@c6703 "ls -al zk/zookeeper*"#ssh zk@c6703 "rm /home/zk/zk/zookeeper-3.4.6/conf/zoo.cfg"#scp -r /home/zk/zk/zookeeper-3.4.6/conf/zoo.cfg zk@c6703:/home/zk/zk/zookeeper-3.4.6/conf/.#ssh zk@c6703 "cat /home/zk/zk/zookeeper-3.4.6/conf/zoo.cfg |grep -v '^#'"

 

根據zoo.cfg建立目錄

#ssh c6703 "mkdir -p /data/zookeeper/data"#ssh c6703 "chown -R zk:zk /data/zookeeper"#ssh c6703 "chown -R zk:zk /data/zookeeper/data"#ssh c6703 "mkdir -p /data/zookeeper/log" #ssh c6703 "chown -R zk:zk /data/zookeeper/log"

建立文件myid,填入3

ssh zk@c6703  "echo 3 > /data/zookeeper/data/myid"

 

7. 啓動ZK

/home/zk/zk/zookeeper-3.4.6/bin/zkServer.sh start/home/zk/zk/zookeeper-3.4.6/bin/zkServer.sh status

 

遠程啓動命令

ssh zk@c6702 "/home/zk/zk/zookeeper-3.4.6/bin/zkServer.sh\ start"

ssh zk@c6703 "/home/zk/zk/zookeeper-3.4.6/bin/zkServer.sh\ start"

ssh zk@c6702 "/home/zk/zk/zookeeper-3.4.6/bin/zkServer.sh\ status"

ssh zk@c6703 "/home/zk/zk/zookeeper-3.4.6/bin/zkServer.sh\ status"

 

 

8. 沒有所有啓動三個ZK前的狀態

[vagrant@c7003 bin]$ ./zkServer.sh status

ZooKeeper JMX enabled by defaultUsing config: /home/vagrant/zookeeper-3.4.10/bin/../conf/zoo.cfg

Error contacting service. It is probably not running.

 

9. 須要將三個ZK全啓動以後,才能選舉出leader

$ ./zkServer.sh status

ZooKeeper JMX enabled by defaultUsing config: /home/vagrant/zookeeper-3.4.10/bin/../conf/zoo.cfgMode: follower[vagrant@c7002 bin]$ ./zkServer.sh status

ZooKeeper JMX enabled by defaultUsing config: /home/vagrant/zookeeper-3.4.10/bin/../conf/zoo.cfgMode: leader

 

=======2018.1.13更新==========

客戶端鏈接方式

客戶端是隨機順序的方式鏈接server的,沒法指定,或者優先讀哪一個一個zookeeper server。

./zkCli.sh -server c6701:2181,c6702:2181,c6703:2181

輸出以下:

第一次鏈接,鏈接到c6701上

[zookeeper@c6702 bin]$ /usr/local/hadoop/zookeeper-3.4.6/bin/zkCli.sh -server c6701:2181,c6702:2181,c6703:2181

Connecting to c6701:2181,c6702:2181,c6703:2181......2018-01-11 21:07:30,797 [myid:] - INFO  [main:ZooKeeper@438] - Initiating client connection, connectString=c6701:2181,c6702:2181,c6703:2181 sessionTimeout=30000 watcher=org.apache.zookeeper.ZooKeeperMain$MyWatcher@4b4bc1e

Welcome to ZooKeeper!2018-01-11 21:07:30,830 [myid:] - INFO  [main-SendThread(c6701.python279.org:2181):ClientCnxn$SendThread@975] - Opening socket connection to server c6701.python279.org/192.168.67.101:2181. Will not attempt to authenticate using SASL (unknown error)

JLine support is enabled2018-01-11 21:07:30,873 [myid:] - INFO  [main-SendThread(c6701.python279.org:2181):ClientCnxn$SendThread@852] - Socket connection established to c6701.python279.org/192.168.67.101:2181, initiating session2018-01-11 21:07:30,916 [myid:] - INFO  [main-SendThread(c6701.python279.org:2181):ClientCnxn$SendThread@1235] - Session establishment complete on server c6701.python279.org/192.168.67.101:2181, sessionid = 0x160e70285f70001, negotiated timeout = 30000

WATCHER::

WatchedEvent state:SyncConnected type:None path:null

 

第二次鏈接,鏈接到c6702上

Connecting to c6701:2181,c6702:2181,c6703:2181......2018-01-11 21:10:18,442 [myid:] - INFO  [main:ZooKeeper@438] - Initiating client connection, connectString=c6701:2181,c6702:2181,c6703:2181 sessionTimeout=30000 watcher=org.apache.zookeeper.ZooKeeperMain$MyWatcher@4b4bc1e

Welcome to ZooKeeper!2018-01-11 21:10:18,489 [myid:] - INFO  [main-SendThread(c6702.python279.org:2181):ClientCnxn$SendThread@975] - Opening socket connection to server c6702.python279.org/192.168.67.102:2181. Will not attempt to authenticate using SASL (unknown error)

JLine support is enabled2018-01-11 21:10:18,508 [myid:] - INFO  [main-SendThread(c6702.python279.org:2181):ClientCnxn$SendThread@852] - Socket connection established to c6702.python279.org/192.168.67.102:2181, initiating session2018-01-11 21:10:18,561 [myid:] - INFO  [main-SendThread(c6702.python279.org:2181):ClientCnxn$SendThread@1235] - Session establishment complete on server c6702.python279.org/192.168.67.102:2181, sessionid = 0x260e70284650002, negotiated timeout = 30000

WATCHER::

WatchedEvent state:SyncConnected type:None path:null

 

 

 

至此,基礎環境部署完。而且zookeeper也安裝完成。下面咱們會在下一篇文章中,繼續安裝HDFS。

相關文章
相關標籤/搜索