Hadoop及Zookeeper+HBase集羣部署

1、 集羣環境html

  1. 系統版本
    虛擬機:內存 16G CPU 雙核心
    系統: CentOS-7 64位
    系統下載地址:
    http://124.202.164.6/files/417500000AB646E7/mirrors.163.com/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1708.iso
  2. 軟件版本
    hadoop-2.8.1.tar.gz
    hbase-1.3.1-bin.tar.gz
    zookeeper-3.4.10.tar.gz
    jdk-8u144-linux-x64.tar.gz
  3. 主機環境
    物理機:Window Server 2012 R2
    虛擬機:VMware Workstation Pro 12
  4. 使用信息
    實體機
    遠程桌面:124.130.192.24:9007
    用 戶 名:JCNY_ZhuGeLiang
    密 碼:**問謝炎
    三臺虛擬機
    =======Hamster======
    I P:192.168.0.10
    用戶名:hadoop
    密 碼:jcny@hadoop
    =======hslave-1======
    I P:192.168.0.11
    用戶名:hadoop
    密 碼:jcny@hadoop
    =======hslave-2======
    I P:192.168.0.12
    用戶名:hadoop
    密 碼:jcny@hadoopjava

  5. 集羣環境
    一共創建了三臺虛擬機
    Ip節點名稱爲:
    Master節點
    192.168.0.10 hmaster.hcluster
    Slave節點
    192.168.0.11 hslave-1.hcluster
    192.168.0.12 hslave-2.hcluster
    三個虛擬機上都必須安裝zookeepernode

注意:操做說明,命令前面有#號表明root用戶登入的linux

  1. 時間說明
    書寫時間:2017-10-19
    第一次更新時間:2017-10-22

2、 安裝基礎集羣環境web

  1. 基礎環境配置
    爲了配置方便,集羣中防火牆已經所有關閉,而且禁止開機啓動
  2. 關閉防火牆
    因爲新版的CentOS-7 默認採用的firewalld防火牆,不是iptables,關閉命令爲
    systemctl stop firewalld
    systemctl mask firewalld
    若是想切換成iptables防火牆請以下操做:
    安裝:yum install iptables-services
    設置開機啓動 systemctl enable iptables
    具體使用請看iptables基礎操做
    注意:在集羣中全部節點上執行相同的操做
  3. 配置/etc/hosts
    編輯/etc/host文件,加入集羣節點的IP與Hostname對應關係
    192.168.0.10 hmaster hmaster.hcluster
    192.168.0.11 hslave-1 hslave-1.hcluster
    192.168.0.12 hslave-2 hslave-2.hcluster
    注意:在集羣中全部節點上執行相同的操做
  4. 安裝Java
    1) 解壓jdk-8u144-linux-x64.tar.gz至/opt目錄

    tar -xzf jdk-7u79-linux-x64.tar.gz -C /opt

    2) 添加Java環境變量到文件/etc/profile的最後

#=================JAVA_HOME===================
export JAVA_HOME="/opt/jdk1.8.0_144"
export JAVA_BIN=$JAVA_HOME/bin
export JAVA_LIB=$JAVA_HOME/lib
export CLASSPATH=.:$JAVA_LIB/tools.jar:$JAVA_LIB/dt.jar
export PATH=$JAVA_BIN:$PATH
3) 導入環境變量shell

source /etc/profile

4) 驗證安裝結果
執行java -version驗證是否安裝成功
結果:apache

注意:在集羣中全部節點上執行相同的操做vim

  1. 安裝ntp
    在Hadoop集羣中, 須要保證各節點的時鐘同步
    1) 在全部節點安裝ntp服務

    yum install ntp ntpdate

    2) Master節點配置
    在Master節點,編輯配置文件/etc/ntp.conf, 添加以下配置,使Master節點的ntp服務接受來自集羣網段的時間同步請求
    restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
    3) 啓動Master節點的ntpd服務,並設置爲開機啓動

    chkconfig --level 345 ntpd on

    service ntpd start

    4) Slave節點配置
    在Slave節點,編輯配置文件/etc/ntp.conf, 添加以下配置,使之與Master節點的時鐘進行同步
    server hamster
    第一次啓動Slave節點上的ntpd前,先手動與Master節點進行時鐘同步

    ntpdate hamster

    5) 啓動Slave節點的ntpd服務,並設置爲開機啓動

    chkconfig --level 345 ntpd on

    service ntpd start

    注意:Ntpd啓動的時候一般須要一段時間大概5分鐘進行時間同步,因此在ntpd剛剛啓動的時候還不能正常提供時鐘服務,報錯"no server suitable for synchronization found"
  2. 安裝rsync
    經過rsync工具,hadoop控制腳本可以將配置文件分發到集羣的各個節點中。 默認該功能未啓用,能夠經過設置hadoop-env.sh中的HADOOP_MASTER變量啓動。 啓用rsync後,當工做節點的守護進程啓動後,會把以HADOOP_MASTER爲根的目錄樹與本地的HADOOP_INSTALL目錄同步

    yum install rsync

    注意:在集羣中全部節點上執行相同的操做
  3. 配置Master節點到全部節點的無密碼登陸
    前提: 集羣各節點使用相同的登陸用戶名,且不建議使用root用戶,本文中使用用戶名hadoop。

在全部節點上建立用戶hadoopcentos

useradd hadoop

passwd hadoop

New password:
Retype new password:
passwd: all authentication tokens updated successfully.
1) 在Master節點上生成主機密鑰
在Master 第一個機器節點上,切換hadoop用戶進行設置
$ ssh-keygen -t rsa -P ‘’
一路回車,最後輸入y回車session

執行上述命令後,一路回車,會在.ssh下生成私鑰id_rsa和公鑰id_rsa.pub兩個文件
2) 複製Master公鑰到被登陸節點的authorized_keys文件中
首先配置Master到Master的無密碼登陸
注意:如下步驟必須在hadoop(只要不是root用戶就能夠)用戶下進行建立.ssh文件夾,而後複製authorized_keys文件,在hadoop用戶下設置對應的權限

cat .ssh/id_rsa.pub >> .ssh/authorized_keys

chmod 600 .ssh/authorized_keys

而後配置Master到Slave的無密碼登陸,將Master節點id_rsa.pub中的內容複製到Slave節點的${HOME}/.ssh/authorized_keys文件中
3) 首先將公鑰文件傳到Slave節點

scp .ssh/id_rsa.pub hadoop@hslave-1:/home/hadoop/id_rsa.pub.hmaster

4) 在Slave節點上建立文件.ssh/authorized_keys

mkdir .ssh

cat id_rsa.pub.hmaster >> .ssh/authorized_keys

chmod 700 .ssh

chmod 600 .ssh/authorized_keys

rm -f id_rsa.pub.hmaster

5) 依次在全部Slave節點上執行相同的操做,並在Master節點登陸Slave進行驗證

ssh hslave-1

6) 若是不能鏈接
在root用戶下打開Terminal
輸入命令 cat /etc/passwd

從上圖能夠看出hadoop用戶,缺乏了一個定義,而後用gedit或者vim編輯
gedit /etc/passwd
在1001: 這裏添加hadoop 保存便可
這樣就能夠免密登陸了:

  1. 修改 ulimit 限制
    1) 這個配置針對HBase
    參照HBase官方文檔
    由於HBase 會在同一時間打開大量的文件句柄和進程,超過 Linux 的默認限制,致使可能會出現以下錯誤。

因此編輯/etc/security/limits.conf文件,添加如下兩行,提升能打開的句柄數量和進程數量
hadoop - nofile 32768
hadoop - nproc 32000
還須要在/etc/pam.d/common-session 加上這一行:
不然在/etc/security/limits.conf上的配置不會生效。

最後還要註銷(logout或者exit)後再登陸,這些配置才能生效
判斷是否生效:
登陸hadoop用戶以後,在命令行中輸入:ulimit -n -u
查看最大文件和進程數量是否改變了。
返回結果以下:就成功了

注意:在集羣中全部節點上執行相同的操做
至此, 集羣及Hadoop的依賴配置已經完成,下面進行Hadoop的安裝。
3、 安裝Hadoop

  1. 解壓hadoop tar包
    1) 將hadoop軟件包上傳至集羣各節點並解壓
    本文中將hadoop-2.5.1.tar.gz上傳至hadoop用戶的主目錄/home/hadoop下。

    tar -xzf hadoop-2.5.1.tar.gz

    mv hadoop-2.5.1 hadoop

    注意:在集羣中全部節點上執行相同的操做
    2) 設置hadoop文件的權限普通用戶
    chown -R Hadoop:Hadoop /home/Hadoop/hadoop
    3) 配置hadoop各配置文件
    hadoop的配置文件位於/home/hadoop/etc/hadoop下
    a) 修改jdk路徑

b) core-site.xml
用於定義系統級別的參數,如HDFS URL、Hadoop的臨時目錄以及用於rack-aware集羣中的配置文件的配置等



hadoop.tmp.dir
/home/hadoop/hadoop/temp



fs.default.name
hdfs://192.168.0.10:9000


fs.defaultFS
hdfs://192.168.0.10:9002


io.file.buffer.size
131072

Slave主機修改hmaster爲相應的節點名稱例如第一臺:hslave-1
c) hdfs-site.xml
HDFS的相關設定,如文件副本的個數、塊大小及是否使用強制權限等



dfs.replication
2


dfs.namenode.name.dir
/home/hadoop/hadoop/name


dfs.datanode.data.dir
/home/hadoop/hadoop/data


dfs.blocksize
268435456

d) mapred-site.xml.template
HDFS的相關設定,如reduce任務的默認個數、任務所可以使用內存的默認上下限等



mapreduce.framework.name
yarn


mapred.job.tracker
http://192.168.0.10:9001


mapreduce.jobhistory.address
http://192.168.0.10:10020


mapreduce.jobhistory.webapp.address
http://192.168.0.10:19888

Slave主機修改hmaster爲相應的節點名稱例如第一臺:hslave-1
e) yarn-site.xml

yarn.nodemanager.aux-services
mapreduce_shuffle


yarn.resourcemanager.address
192.168.0.10:8032


yarn.resourcemanager.scheduler.address
192.168.0.10:8030


yarn.resourcemanager.resource-tracker.address
192.168.0.10:8031


yarn.resourcemanager.admin.address
192.168.0.10:8033


yarn.resourcemanager.webapp.address
192.168.0.10:8088

Slave主機修改hmaster爲相應的節點ip地址例如第一臺:192.168.0.11
f) slaves
Hadoop集羣的slave主機列表,master啓動時會經過SSH鏈接至此列表中的全部主機併爲其啓動DataNode和NodeManager
文件在:hadoop/etc/hadoop/slaves
hslave-1
hslave-2

Master 主機特有的配置
g) 若是這個文件不存在就新建一個文件名字爲masters,裏面寫入hmaster這個主機節點

Master 主機特有的配置
4) 配置環境變量
export HADOOP_HOME=/usr/hadoop
export PATH=$PATH :$HADOOP_HOME/bin
5) 格式化HDFS存儲
進入hadoop下的bin目錄(只在主機上操做)

./hdfs namenode -format

在格式化過程當中注意輸出結果,成功後會有相似下面的輸出:

出現上圖就是成功了
6) 啓動Hadoop服務
啓動和中止腳本位於hadoop下sbin目錄
a) 啓動HDFS

sbin/start-dfs.sh

b) 啓動Yarn

sbin/start-yarn.sh

c) 啓動MapReduce JobHistory Server

sbin/mr-jobhistory-daemon.sh start historyserver

d) 啓動全部一句話就能夠
sbin/start-all.sh
e) 驗證服務是否正常運行 查看Master節點上服務:
新打開一個Terminal,而後輸入jps查看結果

節點機輸入jps

7) 中止Hadoop服務
a) 中止HDFS

sbin/stop-dfs.sh

b) 中止Yarn

sbin/stop-yarn.sh

c) 中止MapReduce JobHistory Server

sbin/mr-jobhistory-daemon.sh stop historyserver

d) 中止全部一句話就能夠
sbin/stop-all.sh

  1. Web界面查看
    端口爲50070

4、 安裝ZooKeeper
注意:zookeeper安裝在全部節點

  1. zookeeper安裝在全部節點
    a) 在全部節點上解壓zookeeper
    b) zookeeper配置文件zoo.cfg位於zookeeper下的conf目錄下,默認不存在,可根據zoo_sample.cfg生成

    cd conf

    cp zoo_sample.cfg zoo.cfg

    c) 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=/home/hadoop/zookeeper/data
    #dataLogDir=/home/hadoop/zookeeper/logs

    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.

    #

    zookeeper.apache.org/doc/current…

    #

    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=0.0.0.0:2888:3888
server.2=192.168.0.11:2888:3888
server.3=192.168.0.12:2888:3888
將zoo.cfg同步到zookeeper全部節點
d) 建立zookeeper數據目錄,並創建節點標識文件myid
在hmaster節點建立標識爲1的文件myid

mkdir -p /home/hadoop/zookeeperdata/data

echo "1" > /home/hadoop/zookeeperdata/data/myid

同理,與zoo.cfg中配置相對應,在hslave-1和hslave-2節點上分別建立標識爲2和3的標識文件。
e) hslave-1

mkdir -p /home/hadoop/zookeeperdata/data

echo "2" > /home/hadoop/zookeeperdata/data/myid

f) hslave-2

mkdir -p /home/hadoop/zookeeperdata/data

echo "3" > /home/hadoop/zookeeperdata/data/myid

  1. 啓動zookeeper集羣
    zookeeper啓動腳本位於zookeeper下的bin目錄下
    啓動ZooKeeper
    在ZooKeeper集羣的每一個結點上,執行啓動ZooKeeper服務的腳本,以下所示:
    每個節點機都得須要執行下面命令

    bin/zkServer.sh start

    zookeeper的日誌zookeeper.out默認位於zookeeper主目錄下,可經過修改${zkhome}/bin/zkEnv.sh中的ZOO_LOG_DIR變量來改變日誌路徑。
  2. 驗證是否安裝成功
    a) 安裝完成以後,新打開一個Terminal,輸入jps進行查看,是否有QuorumPeerMain線程存在,如下圖片是沒有此線程,

b) 而後在剛纔bin目錄下輸入指令:cat zookpeer.out
若是返回結果爲:

c) 而後結果是java的環境變量可能沒有起做用
輸入命令 source /etc/profile
d) 防火牆問題,須要關閉防火牆
systemctl disable firewalld
service iptables stop
e) 看到下圖紅色框內進程有了就表明成功了

f) 輸入命令查看狀態是否啓動成功
./zkServer.sh status

很是大的注意:
若是遇到第一個啓動以後,可是輸入:# ./zkServer.sh status
出現

表明其餘節點上的尚未啓動,要接着去啓動其餘節點機上的zookeeper,
啓動以後在輸入查看

就正常了
5、 HBase安裝
HBase集羣架構分爲1個HMaster(hmaster)和2個HRegionServer(hslave-1, hslave-2)。

  1. 在全部節點解壓hbase

    tar -xzf hbase-1.1.5-bin.tar.gz

    mv hbase-1.1.5-bin hbase

    如下稱hbase主目錄爲${HBASE_HOME}。
  2. 配置HBase
    hbase配置文件位於${HBASE_HOME}/conf目錄下。
    1) hbase-env.sh
    主要改兩個配置:
    export JAVA_HOME=/opt/jdk1.8.0_79
    export HBASE_MANAGES_ZK=false
    2) hbase-site.xml


    hbase.cluster.distributed
    true


    hbase.rootdir
    hdfs://192.168.0.10:9002/hbase


    hbase.master
    hmaster:60000


    hbase.zookeeper.quorum
    hmaster,hslave-1,hslave-2


    hbase.zookeeper.property.dataDir
    /home/hadoop/zookeeper


    hbase.master.maxclockskew
    150000


    hbase.zookeeper.property.clientPort
    2181


    這裏要特別注意的是hbase.rootdir裏面的HDFS地址是要跟Hadoop 的core-site.xml裏面的fs.defaultFS 的HDFS的IP地址或者域名、端口必須一致。其次是hbase.zookeeper.property.dataDir,其中a01513是個人操做系統用戶名,根據你本身的狀況改吧,或者放到其餘目錄也是能夠的。hbase.cluster.distributed 是啓用分佈式模式,這裏必須爲true哦。hbase.zookeeper.quorum是配置集羣IP地址集或者域名集,逗號分隔。hbase.master配置HBase的主節點端口,web端口是60010,經過web UI你能夠確認你是否訪問成功了。
    3) 配置regionservers主機列表
    hslave-1
    hslave-2
    4) 節點機列表都爲
    hslave-1
    hslave-2
    注意:將上述配置同步到集羣中全部節點。
  3. 啓動中止HBase
    HBase腳本位於${HBASE_HOME}/bin目錄下。

    bin/start-hbase.sh

  4. 中止HBase

    bin/stop-hbase.sh

  5. 若是啓動的時候出現此問題,就註釋下面內容

出錯地方

註釋的代碼

這個錯誤是時間沒有同步
注意:每個節點機都配置

  1. 查看是否啓動成功
    主機節點

節點機一、節點機2

注意:若是節點機HRegionServer進程,時間同步出現了問題,能夠把時間同步加大


hbase.master.maxclockskew
150000

  1. 能夠進入hbase shell,使用命令查看hbase狀態

  2. 查詢出表
    出現下圖就表示真正成功了

  3. Web界面查看
    端口爲16010

6、 總結
至此:徹底分佈式Hadoop+Zookeeper+HBase集羣測試環境基本圓滿完成,若有問題繼續研究,經過這3天的時間研究獲得了不少的知識。
經歷的不少的坑,並且好多都是防火牆還有java路徑問題還有就是配置文件配置信息問題,還有就是節點機配置文件同步的問題!

註明:分享請註明 蟻點分享 andot.org圖片沒有黏貼,須要原版pdf文檔的,請在評論區留下郵箱

相關文章
相關標籤/搜索