作為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 > /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 > /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 > /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,如需轉載請自行聯系原作者