天天看點

Hadoop叢集(一) Zookeeper搭建

作為Hadoop初學者,自然要從安裝入手。而hadoop的優勢就是分布式,是以,也一定要安裝分布式的系統。

整體安裝步驟,包括Zookeeper+HDFS+Hbase,為了文章簡潔,我會分三篇blog記錄我的安裝步驟。

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

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

IP部署規劃(準備了三個虛拟機,作業系統是Centos6.7)

Zookeeper主機配置設定

1

2

3

<code>192.168.67.101 c6701</code>

<code>192.168.67.102 c6702</code>

<code>192.168.67.103 c6703</code>

HDFS主機配置設定

<code>192.168.67.101 c6701 </code><code>--Namenode+datanode</code>

<code>192.168.67.102 c6702 </code><code>--datanode</code>

<code>192.168.67.103 c6703 </code><code>--datanode</code>

Hbase主機配置設定

<code>192.168.67.101 c6701 </code><code>--Master + region</code>

<code>192.168.67.102 c6702 </code><code>--region</code>

<code>192.168.67.103 c6703 </code><code>--region</code>

1. 為了分别管理各個服務,我為每個服務,都單獨建立了使用者.

建立的使用者有:

<code>zk</code>

<code>hdfs</code>

<code>hbase</code>

2. 為每一個使用者建立ssh免密,并分發到全部節點,這樣,我就隻在C6701上執行指令,通過遠端的方式安裝C6702和C6703

<code>ssh-keygen -t rsa -f ~/.ssh/id_rsa</code>

拷貝密鑰到全部節點即可(隻有c6701通路02和03不需要密碼,反向通路是需要密碼的)

<code>ssh-copy-id  c6701  </code>

<code>ssh-copy-id  c6702 </code>

<code>ssh-copy-id  c6703</code>

3. 強調一下,/etc/hosts 需要設定

4

<code>[root@c6701 ~]# more /etc/hosts </code>

<code>192.168.67.101 c6701.org c6701</code>

<code>192.168.67.102 c6702.org c6702</code>

<code>192.168.67.103 c6703.org c6703</code>

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

<code>ssh c6702 </code><code>"cat /proc/cpuinfo"</code>

<code>ssh c6702 </code><code>"hostname"</code>

5. 下載下傳安裝軟體(内網位址)

5

6

<code>cd /tmp/software</code>

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

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

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

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

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

6. 安裝JDK,全部節點都要安裝

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

7. 添加下面資訊到.bash_profile

<code>export JAVA_HOME=/usr/</code><code>local</code><code>/jdk1.8.0_144  </code>

<code>export JRE_HOME=/usr/</code><code>local</code><code>/jdk1.8.0_144/jre</code>

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

<code>export PATH=$JAVA_HOME/bin:$PATH</code>

<code>source /etc/profile</code>

8. 檢查版本資訊

<code># java -version</code>

<code>java version </code><code>"1.8.0_144"</code>

<code>Java(TM) SE Runtime Environment (build 1.8.0_144-b01)</code>

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

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

1. 在C6701安裝Zookeeper

<code>useradd zk</code>

<code>echo </code><code>"zk:zk"</code> <code>| chpasswd</code>

<code>su - zk</code>

<code>mkdir zk</code>

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

7

8

9

10

11

12

13

14

15

16

<code>~~~~~~~~~~~~~zoo.cfg的配置~~~~~~~~~~~~~~~</code>

<code>$ pwd</code>

<code>/home/zk/zk/zookeeper-3.4.6/conf/zoo.cfg</code>

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

<code>tickTime=2000</code>

<code>initLimit=10</code>

<code>syncLimit=5</code>

<code>dataDir=/data/zookeeper/data</code>

<code>dataLogDir=/data/zookeeper/log</code>

<code>clientPort=2181</code>

<code>autopurge.snapRetainCount=3</code>

<code>autopurge.purgeInterval=6</code>

<code>server.1=c6701:2888:3888</code>

<code>server.2=c6702:2888:3888</code>

<code>server.3=c6703:2888:3888</code>

<code>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~</code>

2. 根據zoo.cfg建立data和log兩個檔案夾

<code>#mkdir -p /data/zookeeper/data</code>

<code>#mkdir -p /data/zookeeper/log</code>

<code>#chown -R zk:zk /data/zookeeper</code>

<code>#chown -R zk:zk /data/zookeeper/data</code>

<code>#chown -R zk:zk /data/zookeeper/log</code>

3.在zookeeper的目錄中,建立上述兩個檔案夾。進入zkdata檔案夾,建立檔案myid,填入1。這裡寫入的1,是在zoo.cfg文本中的server.1中的1。當我們把所有檔案都配置完畢,我們把hadoop1中yarn目錄複制到其它機器中,我們在修改每台機器中對應的myid文本,hadoop2中的myid寫入2。其餘節點,安照上面配置,依此寫入相應的數字。Zkdatalog檔案夾,是為了指定zookeeper産生日志指定相應的路徑。

<code># su - zk -c </code><code>"echo 1 &gt; /data/zookeeper/data/myid"</code>

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

關于環境變量修改/etc目錄下的profile檔案,也可以在根目錄下的.bashrc目錄下添加環境變量。這兩者有什麼差別:.bashrc是對目前目錄使用者的環境變量,profile檔案是對所有使用者都開放的目錄。當系統加載檔案中,先從profile找相應的路勁,如果沒有會在.bashrc檔案中找對應的環境變量路徑。這兩者大家稍至了解。

然後 source /etc/profile

5. 安裝c6702的zookeeper

<code>#ssh c6702 </code><code>"useradd zk"</code>

<code>#ssh c6702 </code><code>"echo "</code><code>zk:zk</code><code>" | chpasswd"</code>

為zk使用者ssh免密

<code>#ssh-copy-id  zk@c6702</code>

拷貝軟體

<code>#scp -r /tmp/software/hadoop-* root@c6702:/tmp/software</code>

<code>#ssh c6702 </code><code>"chmod 777 /tmp/software/*"</code>

建立目錄,解壓軟體

<code>#ssh zk@c6702 </code><code>"mkdir zk"</code>

<code>#ssh zk@c6702 </code><code>"tar -zxvf /tmp/software/zookeeper-3.4.6.tar.gz -C /home/zk/zk"</code>

<code>#ssh zk@c6702 </code><code>"ls -al zk"</code>

<code>#ssh zk@c6702 </code><code>"ls -al zk/zookeeper*"</code>

<code>#ssh zk@c6702 </code><code>"rm /home/zk/zk/zookeeper-3.4.6/conf/zoo.cfg"</code>

<code>#scp -r /home/zk/zk/zookeeper-3.4.6/conf/zoo.cfg zk@c6702:/home/zk/zk/zookeeper-3.4.6/conf/.</code>

<code>#ssh zk@c6702 </code><code>"cat /home/zk/zk/zookeeper-3.4.6/conf/zoo.cfg |grep -v '^#'"</code>

<code>根據zoo.cfg建立目錄</code>

<code>#ssh c6702 </code><code>"mkdir -p /data/zookeeper/data"</code>

<code>#ssh c6702 </code><code>"chown -R zk:zk /data/zookeeper"</code>

<code>#ssh c6702 </code><code>"chown -R zk:zk /data/zookeeper/data"</code>

<code>#ssh c6702 </code><code>"mkdir -p /data/zookeeper/log"</code> 

<code>#ssh c6702 </code><code>"chown -R zk:zk /data/zookeeper/log"</code>

<code>建立檔案myid,填入2</code>

<code>ssh zk@c6702  </code><code>"echo 2 &gt; /data/zookeeper/data/myid"</code>

6. 安裝c6703的zookeeper

<code>#ssh c6703 </code><code>"useradd zk"</code>

<code>#ssh c6703 </code><code>"echo "</code><code>zk:zk</code><code>" | chpasswd"</code>

<code>ssh-copy-id  zk@c6703</code>

<code>#scp -r /tmp/software/hadoop-* root@c6703:/tmp/software</code>

<code>#ssh c6703 </code><code>"chmod 777 /tmp/software/*"</code>

<code>#ssh zk@c6703 </code><code>"mkdir zk"</code>

<code>#ssh zk@c6703 </code><code>"tar -zxvf /tmp/software/zookeeper-3.4.6.tar.gz -C /home/zk/zk"</code>

<code>#ssh zk@c6703 </code><code>"ls -al zk"</code>

<code>#ssh zk@c6703 </code><code>"ls -al zk/zookeeper*"</code>

<code>#ssh zk@c6703 </code><code>"rm /home/zk/zk/zookeeper-3.4.6/conf/zoo.cfg"</code>

<code>#scp -r /home/zk/zk/zookeeper-3.4.6/conf/zoo.cfg zk@c6703:/home/zk/zk/zookeeper-3.4.6/conf/.</code>

<code>#ssh zk@c6703 </code><code>"cat /home/zk/zk/zookeeper-3.4.6/conf/zoo.cfg |grep -v '^#'"</code>

根據zoo.cfg建立目錄

<code>#ssh c6703 </code><code>"mkdir -p /data/zookeeper/data"</code>

<code>#ssh c6703 </code><code>"chown -R zk:zk /data/zookeeper"</code>

<code>#ssh c6703 </code><code>"chown -R zk:zk /data/zookeeper/data"</code>

<code>#ssh c6703 </code><code>"mkdir -p /data/zookeeper/log"</code> 

<code>#ssh c6703 </code><code>"chown -R zk:zk /data/zookeeper/log"</code>

<code>建立檔案myid,填入3</code>

<code>ssh zk@c6703  </code><code>"echo 3 &gt; /data/zookeeper/data/myid"</code>

7. 啟動ZK

<code>/home/zk/zk/zookeeper-3.4.6/bin/zkServer.sh start</code>

<code>/home/zk/zk/zookeeper-3.4.6/bin/zkServer.sh status</code>

遠端啟動指令

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

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

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

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

8. 沒有全部啟動三個ZK前的狀态

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

<code>ZooKeeper JMX enabled </code><code>by</code> <code>default</code>

<code>Using config: /home/vagrant/zookeeper-3.4.10/bin/../conf/zoo.cfg</code>

<code>Error contacting service. It </code><code>is</code> <code>probably </code><code>not</code> <code>running.</code>

9. 需要将三個ZK全啟動之後,才能選舉出leader

<code>$ ./zkServer.sh status</code>

<code>Mode: follower</code>

<code>[vagrant@c7002 bin]$ ./zkServer.sh status</code>

<code>Mode: leader</code>

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

用戶端連接配接方式

用戶端是随機順序的方式連接配接server的,無法指定,或者優先讀哪個一個zookeeper server。

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

輸出如下:

第一次連接配接,連接配接到c6701上

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

<code>Connecting </code><code>to</code> <code>c6701:2181,c6702:2181,c6703:2181</code>

<code>......</code>

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

<code>Welcome </code><code>to</code> <code>ZooKeeper!</code>

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

<code>JLine support </code><code>is</code> <code>enabled</code>

<code>2018-01-11 21:07:30,873 [myid:] - INFO  [main-SendThread(c6701.python279.org:2181):ClientCnxn$SendThread@852] - Socket </code><code>connection</code> <code>established </code><code>to</code> <code>c6701.python279.org/192.168.67.101:2181, initiating session</code>

<code>2018-01-11 21:07:30,916 [myid:] - INFO  [main-SendThread(c6701.python279.org:2181):ClientCnxn$SendThread@1235] - Session establishment complete </code><code>on</code> <code>server c6701.python279.org/192.168.67.101:2181, sessionid = 0x160e70285f70001, negotiated timeout = 30000</code>

<code>WATCHER::</code>

<code>WatchedEvent state:SyncConnected type:None path:</code><code>null</code>

第二次連接配接,連接配接到c6702上

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

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

<code>2018-01-11 21:10:18,508 [myid:] - INFO  [main-SendThread(c6702.python279.org:2181):ClientCnxn$SendThread@852] - Socket </code><code>connection</code> <code>established </code><code>to</code> <code>c6702.python279.org/192.168.67.102:2181, initiating session</code>

<code>2018-01-11 21:10:18,561 [myid:] - INFO  [main-SendThread(c6702.python279.org:2181):ClientCnxn$SendThread@1235] - Session establishment complete </code><code>on</code> <code>server c6702.python279.org/192.168.67.102:2181, sessionid = 0x260e70284650002, negotiated timeout = 30000</code>

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

本文轉自 hsbxxl 51CTO部落格,原文連結:http://blog.51cto.com/hsbxxl/1971241,如需轉載請自行聯系原作者