docker安裝hbase


集群HBase搭建

###集群規划###
首先是網絡情況規划,本次實戰我們的集群是一個master,兩個slave,如下圖:

這里寫圖片描述

###材料列表###
把搭建一個hbase環境所需的所有材料列出來,如下表:

軟件 版本
OpenSSH 5.3
jdk 1.8
hadoop 2.7.4
hbase 1.2.6
zookeeper 3.4.6

PS:文中用到的文件主要有以下這些,我已經上傳到github上:

  1. docker鏡像對應的dockerfile,以及制作鏡像所需的材料;
  2. zookeeper-3.4.6;
  3. hadoop-2.7.4;
  4. hbase-1.2.6;

github的地址是:https://github.com/zq2599/zookeeper3.4.6-hadoop2.7.4-hbase-1.2.6

###搭建步驟完全列表###
先在此將整個搭建過程的每一步都列出來,以免遺漏:

  1. 啟動三個centos6.7鏡像的容器,容器名分別是:master、slave1、slave2;
  2. 給master、slave1、slave2分別安裝ssh服務;
  3. 從當前電腦通過scp命令將jdk1.8的安裝包上傳到三個容器,然后依次安裝jdk1.8;
  4. 配置hostname,編輯三個容器的/etc/sysconfig/network文件,修改HOSTNAME分別是master、slave1、slave2;
  5. 配置host,通過ip addr命令取得三個容器的ip,然后修改每個/etc/hosts文件,都添加如下內容:
    172.18.0.2 master
    172.18.0.3 slave1
    172.18.0.4 slave2
  6. master、slave1、slave2之間配置相互免密碼登錄:sshd_config、authorized_keys、id_rsa.pub文件;
  7. master、slave1、slave2上安裝zookeeper-3.4.6集群,並啟動;
  8. 配置java和Hadoop環境變量:/etc/profile、hadoop-env.shyarn-env.sh
  9. 修改hadoop相關配置文件:core-site.xml、hdfs-site.xml、mapred-site.xml、mapred-site.xml;
  10. 修改hadoop的slave配置:etc/hadoop/slaves;
  11. 保證以上的hadoop配置在三個容器上是一致的;
  12. 啟動hadoop,驗證;
  13. 修改/etc/profile,配置hbase;
  14. 配置hbase-site.xml、regionservers、hbase-env.sh
  15. 啟動hbase,驗證;

###本次實戰用到的鏡像文件###
本次實戰用到的鏡像文件是我定制的,為了加快實戰速度,里面集成了如下功能:

  1. 已經安裝了jdk1.8;
  2. ssh服務已經開通,可以root身份登錄,密碼是password
  3. 可通過rsa證書免密碼ssh登錄;

執行以下命令即可下載該鏡像文件:

docker pull bolingcavalry/centos6.7-jdk1.8-ssh:0.0.1

 

這個鏡像已經包含了前面總結的14個步驟中的第二步和第三步,接下來的實戰中這兩部可以省略了。

###制作docker-compose.yml文件###
新增一個docker-compose.yml文件,內容如下:

version: '2'
services:
  master: 
    image: bolingcavalry/centos6.7-jdk1.8-ssh:0.0.1
    container_name: master
    ports:
      - "19010:22"
      - "50070:50070"
      - "8088:8088"
      - "16010:16010"
    restart: always
  slave1: 
    image: bolingcavalry/centos6.7-jdk1.8-ssh:0.0.1
    container_name: slave1
    depends_on:
      - master
    ports:
      - "19011:22"
    restart: always
  slave2: 
    image: bolingcavalry/centos6.7-jdk1.8-ssh:0.0.1
    container_name: slave2
    depends_on:
      - slave1
    ports:
      - "19012:22"
    restart: always

 

 

如上述內容,我們會創建master、slave1、slave2三個容器,它們的22端口分別映射到當前電腦的19010、19011、19012三個端口上;

在docker-compose.yml文件所在目錄下執行docker-compose up -d命令,即可創建三個容器,如下圖:

這里寫圖片描述

###ssh登錄###
由於master的22端口已經映射到19010端口,所以在當前電腦使用ssh工具執行命令ssh root@localhost -p 19010即可登錄到master容器,再執行ip addr即可查看master的ip,如下圖:

這里寫圖片描述

同理,再執行ssh root@localhost -p 19011ssh root@localhost -p 19012可以分別登錄slave1和slave2,並且獲取到他們的ip如下;

容器 IP
master 172.18.0.2
slave1 172.18.0.3
slave2 172.18.0.4

###配置hostname和hosts###

  1. 修改master的/etc/sysconfig/network文件,將原有的HOSTNAME=localhost.localdomain改成HOSTNAME=master,對slave1和slave2也做修改,將HOSTNAME分別改成slave1和slave2;
  2. 分別修改master、slave1、slave2的/etc/hosts文件,都添加相同的內容如下:
172.18.0.2 master
172.18.0.3 slave1
172.18.0.4 slave2
  • 1
  • 2
  • 3

###master、slave1、slave2之間配置相互免密碼登錄###

  1. 分別修改master、slave1、slave2的/etc/ssh/sshd_config文件,找到下圖紅框中的兩行,刪除每行的注釋符號"#":

這里寫圖片描述
2. 分別在master、slave1、slave2上執行命令ssh-keygen -t rsa,一路回車下去,最終會在/root/.ssh目錄下生成rsa文件,如下圖:
這里寫圖片描述
3. 在master上執行如下三行命令,執行完畢后,三個容器的rsa公鑰都存在/root/.ssh/authorized_keys文件中了:

cat ~/.ssh/id_rsa.pub>> ~/.ssh/authorized_keys
ssh root@slave1 cat ~/.ssh/id_rsa.pub>> ~/.ssh/authorized_keys
ssh root@slave2 cat ~/.ssh/id_rsa.pub>> ~/.ssh/authorized_keys
  • 1
  • 2
  • 3

第一行命令將master的公鑰寫入authorized_keys,第二、第三行分別ssh登錄slave1、slave2,將他們的公鑰寫入到master的authorized_keys文件中,由於是ssh登錄,需要輸入密碼,這里是"password"
4. 分別在slave1、slave2上執行以下命令,將master上的authorized_keys文件復制過來:

ssh root@master cat ~/.ssh/authorized_keys>> ~/.ssh/authorized_keys
  • 1

由於master的authorized_keys中包含了slave1、slave2的rsa公鑰,所以在slave1和slave2上執行以上命令的時候是不需要登錄的;
5. 現在三個容器的公鑰都已經放在每一個容器上了,它們相互之間可以免密碼登錄了,例如在slave1上執行ssh root@slave2即可登錄到slave2而不用輸入密碼,如下圖:
這里寫圖片描述

千萬注意:在slave1上驗證免密碼登錄slave2后,要執行exit目錄退出slave2,否者后面在該窗口的操作都是在操作slave2,而非slave1!!!

###在容器上創建所需目錄###
分別在master、slave1、slave2上創建以下目錄:

  1. /usr/local/work
  2. /opt/hbase

###安裝zookeeper-3.4.6集群###

  1. 去zookeeper官網下載zookeeper-3.4.6.tar.gz,然后解壓到當前電腦;
  2. 在zookeeper-3.4.6/conf/目錄下創建zoo.cfg文件,內容如下:
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial 
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between 
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just 
# example sakes.
dataDir=/usr/local/work/zkdata
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the 
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1

server.1=master:2887:3887  
server.2=slave1:2888:3888 
server.3=slave2:2889:3889
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

其實也就是修改了dataDir的值,還有最后三行是新增的,其他內容都是從zoo_sample.cfg復制過來的;
3. 在當前電腦上,用ssh工具執行以下三行命令,將前面解壓的並且已經修改了zoo.cfg文件的zookeeper-3.4.6目錄復制到master、slave1、slave2上去:

scp -P 19010 -r ./zookeeper-3.4.6 root@localhost:/usr/local/work
scp -P 19011 -r ./zookeeper-3.4.6 root@localhost:/usr/local/work
scp -P 19012 -r ./zookeeper-3.4.6 root@localhost:/usr/local/work
  • 1
  • 2
  • 3

執行每行命令都要輸入密碼"password"
4. 在master、slave1、slave2上創建目錄/usr/local/work/zkdata,在該目錄下創建文件myid,文件內容分別是是"1"、“2”、“3”;
5. 在master、slave1、slave2上依次執行啟動zookeeper的命令/usr/local/work/zookeeper-3.4.6/bin/zkServer.sh start
6. 在每個容器上分別執行以下命令可以檢查zookeeper的集群狀態:
這里寫圖片描述
如上圖所示,此容器目前是follower;

###下載hadoop###
去Hadoop官網下載hadoop-2.7.4.tar.gz,在當前電腦解壓;

###配置hadoop###
打開解壓后的hadoop-2.7.4文件夾,修改以下配置文件:

  1. 打開hadoop-2.7.4/etc/hadoop/hadoop-env.sh文件,在最前面加入以下內容:
export JAVA_HOME=/usr/java/jdk1.8.0_144
  • 1

java環境信息就配置好了;
2. 打開hadoop-2.7.4/etc/hadoop/yarn-env.sh文件,在YARN_CONF_DIR的配置下面加入以下內容:

export JAVA_HOME=/usr/java/jdk1.8.0_144
  • 1

以上是給yarn配置java環境信息;
3. 打開hadoop-2.7.4/etc/hadoop/core-site.xml文件,配置如下:

<configuration>
 <property> 
  <name>fs.defaultFS</name>
  <value>hdfs://master:9000</value> 
 </property> 
 <property> 
  <name>hadoop.tmp.dir</name>
  <value>/opt/hbase/hadoop-2.7.4/temp</value> 
 </property>
</configuration>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

/opt/hbase/是即將用來安裝hadoop的目錄;
4. 打開hadoop-2.7.4/etc/hadoop/hdfs-site.xml文件,配置如下:

<configuration>
 <property> 
  <name>dfs.namenode.name.dir</name> 
  <value>/opt/hbase/hadoop-2.7.4/dfs/name</value> 
 </property> 
 <property>
  <name>dfs.datanode.data.dir</name>
  <value>/opt/hbase/hadoop-2.7.4/dfs/data</value> 
 </property> 
 <property>
  <name>dfs.replication</name>
  <value>2</value> 
 </property>
 <property> 
  <name>dfs.namenode.secondary.http-address</name> 
  <value>master:9001</value> 
 </property>  
 <property>
  <name>dfs.webhdfs.enabled</name>
  <value>true</value> 
 </property> 
</configuration>

是hdfs相關的配置;
5. 打開hadoop-2.7.4/etc/hadoop/mapred-site.xml文件,配置如下:

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

這些是關於mapreduce的配置;
6. 打開hadoop-2.7.4/etc/hadoop/yarn-site.xml文件,配置如下:

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

以上是yarn相關配置;
7. 打開hadoop-2.7.4/etc/hadoop/slaves文件,配置如下:

slave1
slave2

以上是配置hadoop集群時的slave信息;
8. 在當前電腦打開ssh終端,進入hadoop-2.7.4文件夾所在目錄,執行以下三行命令,把包含了我們剛剛配置好的文件的hadoop-2.7.4文件夾分別復制到master、slave1、slave2容器上去:

scp -P 19010 -r ./hadoop-2.7.4 root@localhost:/opt/hbase/hadoop-2.7.4
scp -P 19011 -r ./hadoop-2.7.4 root@localhost:/opt/hbase/hadoop-2.7.4
scp -P 19012 -r ./hadoop-2.7.4 root@localhost:/opt/hbase/hadoop-2.7.4

每個命令都要求輸入密碼"password"

###配置hadoop相關環境變量###
在master、slave1、slave2上分別執行如下操作:

  1. 在/etc/profile文件中添加如下內容:
export JAVA_HOME=/usr/java/jdk1.8.0_144
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
export HADOOP_HOME=/opt/hbase/hadoop-2.7.4
export PATH=$PATH:$HADOOP_HOME/sbin
export PATH=$PATH:$HADOOP_HOME/bin
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib/native"

以上是hadoop運行所需的環境變量;
2. 執行source /etc/profile使環境變量生效;

###啟動hadoop###

  1. 在master上執行如下命令格式化hdfs:
/opt/hbase/hadoop-2.7.4/bin/hdfs namenode -format

格式化結果如下圖所示:
這里寫圖片描述
2. 在master上執行如下命令啟動hadoop:

/opt/hbase/hadoop-2.7.4/sbin/start-all.sh

啟動信息如下圖所示:
這里寫圖片描述
3. 在master上輸入jps看當前所有java進程,如下圖:
這里寫圖片描述
上述進程齊全表示hadoop的master啟動成功;
4. 在slave1、slave2上分別輸入jps看當前所有java進程,如下圖:
這里寫圖片描述
上述進程齊全表示hadoop的slave啟動成功;

###配置Hbase###
在Hadoop官網下載hbase-1.2.6-bin.tar.gz,在當前電腦解壓后,進入hbase-1.2.6文件夾,修改以下配置:

  1. 打開hbase-1.2.6/conf/hbase-site.xml,修改配置如下:
<configuration>
<property>
   <name>hbase.rootdir</name>
   <value>hdfs://master:9000/hbase</value>
   <description>The directory shared by region servers.</description>
 </property>

 <property>
   <name>hbase.hregion.max.filesize</name>
   <value>1073741824</value>
   <description>
   Maximum HStoreFile size. If any one of a column families' HStoreFiles has
   grown to exceed this value, the hosting HRegion is split in two.
   Default: 256M.
   </description>
 </property>

 <property>
   <name>hbase.hregion.memstore.flush.size</name>
   <value>1073741824</value>
   <description>
   Memstore will be flushed to disk if size of the memstore
   exceeds this number of bytes.  Value is checked by a thread that runs
   every hbase.server.thread.wakefrequency.
   </description>
 </property>

 <property>
   <name>hbase.cluster.distributed</name>
   <value>true</value>
   <description>The mode the cluster will be in. Possible values are
     false: standalone and pseudo-distributed setups with managed Zookeeper
     true: fully-distributed with unmanaged Zookeeper Quorum (see hbase-env.sh)
   </description>
 </property>

 <property>
     <name>hbase.zookeeper.property.clientPort</name>
     <value>2181</value>
     <description>Property from ZooKeeper's config zoo.cfg.
     The port at which the clients will connect.
     </description>
 </property>

 <property>
   <name>zookeeper.session.timeout</name>
   <value>120000</value>
 </property>

 <property>
   <name>hbase.zookeeper.property.tickTime</name>
   <value>6000</value>
 </property>
   <property>
     <name>hbase.zookeeper.quorum</name>
     <value>master,slave1,slave2</value>
     <description>Comma separated list of servers in the ZooKeeper Quorum.
     For example, "host1.mydomain.com,host2.mydomain.com,host3.mydomain.com".
     By default this is set to localhost for local and pseudo-distributed modes of operation. For a fully-distributed setup, this should be set to a full list of ZooKeeper quorum servers. If HBASE_MANAGES_ZK is set in hbase-env.sh this is the list of servers which we will start/stop ZooKeeper on.
     </description>
</property>
</configuration>

2. 打開hbase-1.2.6/conf/regionservers文件,配置如下:

master
slave1
slave2
3. 打開hbase-1.2.6/conf/hbase-env.sh文件,找到 export JAVA_HOME=/usr/java/jdk1.6.0/這一行,改為當前jdk的路徑: ```shell export JAVA_HOME=/usr/java/jdk1.8.0_144 ``` 以上是hbase的集群配置; 4. 在當前電腦打開ssh終端,進入hbase-1.2.6文件夾所在目錄,執行以下三行命令,把包含了我們剛剛配置好的文件的hbase-1.2.6文件夾分別復制到master、slave1、slave2容器上去: ```shell scp -P 19010 -r ./hbase-1.2.6 root@localhost:/opt/hbase-1.2.6 scp -P 19011 -r ./hbase-1.2.6 root@localhost:/opt/hbase-1.2.6 scp -P 19012 -r ./hbase-1.2.6 root@localhost:/opt/hbase-1.2.6 ``` 每個命令都要求輸入密碼"password"

###配置hbase相關環境變量###
在master、slave1、slave2上分別執行如下操作:

  1. 在/etc/profile文件中添加如下內容:
export HBASE_HOME=/opt/hbase-1.2.6
export PATH=$HBASE_HOME/bin:$PATH

以上是hbase運行所需的環境變量;
2. 執行source /etc/profile使環境變量生效;

###啟動hbase###
在master上執行start-hbase.sh命令啟動hbase(由於hbase/bin已經添加到環境變量中,所以start-hbase.sh可以在任何目錄下執行),啟動信息如下圖所示:
這里寫圖片描述

在master上執行jps查看java進程,可以看到新增的HMaster、HRegionServer進程,如下圖:
這里寫圖片描述

在slave1、slave2上執行jps查看java進程,可以看到新增的HRegionServer進程,如下圖:
這里寫圖片描述

###驗證hbase###
執行以下命令,可以進入HBase的命令行模式:

hbase shell

見到的如下圖所示:
這里寫圖片描述

創建個表試試,輸入以下命令創建student表,行鍵是id,一個列族info:

create 'student','id','info'

提示如下圖:
這里寫圖片描述

在slave1上執行base shell進入命令行模式,再執行list命令查看表信息,可以看到剛剛在master上創建的student表,如下圖:
這里寫圖片描述

###web服務驗證###
在docker-compose.yml中我們暴露了50070,8088,16010三個端口,現在當前電腦的瀏覽器上依次檢查這三個端口對應的web服務:

  1. http://localhost:50070/
    這里寫圖片描述
  2. http://localhost:8088/
    這里寫圖片描述
  3. http://localhost:16010/
    這里寫圖片描述

至此,在docker上搭建集群HBase的實戰已經完成,文中用到的文件主要有以下這些,我已經上傳到github上:

  1. docker鏡像對應的dockerfile,以及制作鏡像所需的材料;
  2. zookeeper-3.4.6;
  3. hadoop-2.7.4;
  4. hbase-1.2.6;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM