hbase HA模式安装

2019-02-12 13:42 

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haoxiaoyan/article/details/53584310

1.解压软件

tar zxvf hbase-1.1.5-bin.tar.gz 

---chown -R hadoop:hadoop hbase-1.1.5

2.配置Hbase

① 修改hbase-env.sh 

vi conf/hbase-env.sh,出掉JAVA_HOME的注释,并修改为本地的

export JAVA_HOME=/usr/java/jdk1.7.0_79

export HBASE_LOG_DIR=/opt/hadoop/hbase-1.1.5/logs

export HBASE_MANAGES_ZK=false

export HBASE_PID_DIR=/opt/hadoop/hadoop-2.7.2/pids

export HBASE_CLASSPATH=/opt/hadoop/hbase-1.1.5/conf

修改HBASE_MANAGES_ZK为false,默认为true,表示HBase托管zookeeper实例,如果是HBase独占的zookeeper,可以设定为true。

 

这里需要注意的是,在搭建HBase集群的时候需要保证Hadoop平台运行正常,各个节点的时间差不能相差太大,最后时间能够同步。否则会导致 HBase的启动失败。另外,如果在启动HBase集群时,提示不能解析HDFS路径,这里将Hadoop的core-site.xml和hdfs- site.xml文件复制到HBase的conf文件目录下即可。

②  cp /opt/hadoop/hadoop-2.7.2/etc/hadoop/hdfs-site.xml .

  cp /opt/hadoop/hadoop-2.7.2/etc/hadoop/core-site.xml .

③ 创建临时目录

[hadoop@masternode1 conf]$ mkdir /opt/hadoop/hbase-1.1.5/tmp

[hadoop@masternode1 conf]$ mkdir /opt/hadoop/hbase-1.1.5/logs

[hadoop@masternode1 conf]$ chmod 756  /opt/hadoop/hbase-1.1.5/logs

[hadoop@masternode1 conf]$ chmod 756  /opt/hadoop/hbase-1.1.5/tmp/

 

④ 配置hbase-site.xml文件

vi hbase-site.xml

<configuration>  

        <!--hbase存储在HADOOP HDFS上文件根目录路径-->  

    <property>  

        <name>hbase.rootdir</name>  

        <value>hdfs://cluster-ha/hbase</value>  

    </property>  

        <!--采用分布式模式-->  

    <property>  

        <name>hbase.cluster.distributed</name>  

        <value>true</value>  

    </property>  

        <!--zookeeper地址,端口不指定的话就默认为2181-->  

    <property>  

        <name>hbase.zookeeper.quorum</name>  

      <value>slavenode1,slavenode2,slavenode3,slavenode4,slavenode5,slavenode6,slavenode7</value>  

    </property>

 <!-- 指定ZooKeeper集群端口 -->  

  <property>  

    <name>hbase.zookeeper.property.clientPort</name>  

    <value>2181</value>  

  </property>    

        <!--hbase临时文件存储目录,比如一些数据表的预分区信息等等-->  

    <property>  

        <name>hbase.tmp.dir</name>  

        <value>/opt/hadoop/hbase-1.1.5/tmp</value>  

    </property>  

    <property>  

        <name>hbase.master</name>  

        <value>hdfs://cluster-ha:16000</value>  

    </property>  

<property>  

    <name>hbase.master.info.port</name>  

    <value>16010</value>  

  </property> 

        <!--zookeeper存储数据位置-->  

    <property>  

        <name>hbase.zookeeper.property.dataDir</name>  

        <value>/opt/hadoop/zookeeper/data</value>  

    </property>  

    <property>  

        <name>hbase.client.write.buffer</name>  

        <value>5242880</value>  

    </property>  

    <property>  

        <name>hbase.regionserver.handler.count</name>  

        <value>300</value>  

        <description>Count of RPC Listener instances spun up on  

            RegionServers.Same property is used by the Master for count of master  

            handlers.</description>  

    </property>  

<property>  

        <name>hbase.table.sanity.checks</name>  

        <value>false</value>  

    </property>  

<property>  

        <name>zookeeper.session.timeout</name>  

        <value>30000</value>  

    </property>  

<property>  

        <name>hbase.hregion.max.filesize</name>  

        <value>32212254720</value>  

    </property> 

</configuration>

hbase.rootdir:Region Servers共享的HBase持久化数据的存储地址。需要使用包含文件系统scheme的完全限定地址。

hbase.cluster.distributed:指定Hbase集群是否以分布式方式运行。

hbase.master.port:Master绑定的端口,包括backup-master.

hbase.zookeeper.property.dataDir:这个是ZooKeeper配置文件zoo.cfg中的dataDir。zookeeper存储数据库快照的位置。

hbase.zookeeper.quorum:ZooKeeper的所有成员服务器列表,服务器名之间用逗号分隔。

hbase.zookeeper.property.clientPort:这个是ZooKeeper配置文件zoo.cfg中的clientPort。ZooKeeper提供给客户端连接的端口,默认是2181。

⑤ 配置[hadoop@masternode1 conf]# vi log4j.properties 

log4j.logger.org.apache.hadoop.util.NativeCodeLoader=ERROR  

⑥ 修改regionservers,将RegionServers写入。

vim conf/regionservers

slavenode1

slavenode2

slavenode3

slavenode4

⑦ 添加环境变量方便调用HBase

  vim /etc/profile

export HBASE_HOME=/opt/hadoop/hbase-1.1.5

export PATH=$PATH:$HBASE_HOME/bin

⑧ 创建两个目录.zookeeper单独配置就不用这步骤

[hadoop@masternode1 hbase-1.1.5]# mkdir logs

[hadoop@masternode1 hbase-1.1.5]# mkdir data

[hadoop@masternode1 data]# echo ‘1’> myid 

[hadoop@masternode1 data]# echo ‘2’> myid 

[hadoop@slavenode2 data]# echo ‘3’> myid 

[hadoop@slavenode3 data]# echo ‘4’> myid

⑨ 将修改好的安装目录分发到所有节点,一并修改环境变量。

[hadoop@masternode1 hadoop]$ for i in {31,32,33,34,35,36,37,38,39};do scp -r hbase-1.1.5 hadoop@192.168.237.2$i:/opt/hadoop/ ; done

[hadoop@masternode1 hadoop]$ for i in {31,32,33,34,35,36,37,38,39};do scp ~/.bash_profile hadoop@192.168.237.2$i:~/.bash_profile ; done

把/etc/profile ~/.bash_profile 分发各级节点

防止内存溢出(主从节点都要配置)

[hadoop@masternode1 ~]# vi /etc/security/limits.d/90-nproc.conf 

# Default limit for number of user's processes to prevent

# accidental fork bombs.

# See rhbz #432903 for reasoning.

 

*          soft    nproc     1024

root       soft    nproc     unlimited

hadoop     soft    nproc     10240 (更改后的值)

⑩ 启动HBase

这步要现看下hbase下的包是否全才执行,若全就不用执行此部find /opt/hadoop/hadoop-2.7.2/share/hadoop -name "hadoop*.jar" | xargs -i cp {} /opt/hadoop/hbase-1.1.5/lib/

[hadoop@masternode1 bin]$# pwd

/opt/hadoop/hbase-1.1.5/bin   

[hadoop@masternode1 bin]$ sh start-hbase.sh 

在masternode2上调用hbase-daemon.sh start master

即可。

11 通过jps查看进程。

Masternode1上有HMaster,Masternode2上有HMaster和HRegionServer,slavenode1和slavenode3上是HRegionServer。

http://192.168.237.230:16010/master-status

http://192.168.237.231:16010/master-status

12 验证完毕

[hadoop@masternode1 bin]# ./hbase shell

SLF4J: Class path contains multiple SLF4J bindings.

SLF4J: Found binding in [jar:file:/opt/hadoop/hbase-1.1.5/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]

SLF4J: Found binding in [jar:file:/opt/hadoop/hadoop-2.7.2/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]

SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.

SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]

2016-09-08 03:45:45,878 WARN  [main] util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable 上面第三步配置是为了解决该报错的

HBase Shell; enter 'help<RETURN>' for list of supported commands.

Type "exit<RETURN>" to leave the HBase Shell

Version 1.1.5, r239b80456118175b340b2e562a5568b5c744252e, Sun May  8 20:29:26 PDT 2016

hbase(main):001:0> create 'test', 'cf'

 ERROR: Can't get master address from ZooKeeper; znode data == null
现在是hbase和zookeeper链接不上,请核查原有

 原因是四台机器的zookeeper必须要全部启动完毕之后才可以启动hbase。

 

[hadoop@slavenode1 bin]# hbase shell

HBase Shell; enter 'help<RETURN>' for list of supported commands.

Type "exit<RETURN>" to leave the HBase Shell

Version 1.1.5, r239b80456118175b340b2e562a5568b5c744252e, Sun May  8 20:29:26 PDT 2016

 

hbase(main):001:0> create 't1',{NAME => 'f1', VERSIONS => 2},{NAME => 'f2', VERSIONS => 2}

0 row(s) in 2.5320 seconds

=> Hbase::Table - t1

解决slf4问题

[hadoop@masternode1 bin]#  hbase classpath | tr ":" "\n" | grep -i slf4

/opt/hadoop/hbase-1.1.5/lib/slf4j-api-1.7.7.jar

/opt/hadoop/hbase-1.1.5/lib/slf4j-log4j12-1.7.5.jar

[hadoop@masternode1 bin]# rm /opt/hadoop/hbase-1.1.5/lib/slf4j-api-1.7.7.jar

 rm /opt/hadoop/hbase-1.1.5/lib/slf4j-log4j12-1.7.5.jar

到相应的目录删掉找出来的文件

总结:

    1. hbase.master.port需要指定,不然启动backup-master时会报Already in use的错误。

    2. HMaster(包括backup-master)需要能够passwordless ssh到其它服务器

    3. ZooKeeper应该用奇数个节点。

发表评论

您必须 登录 才能发表留言!