HBase 入门

1.1 单机模式

HBase 可以以单机模式方式运行,如果以此种方式运行,那么所有的 HBase 进程:Master、RegionServers 和 zookeeper 都运行在一个 JVM 实例上。

1.1.1 配置

在 conf/hbase-env.sh 文件配置 JAVA_HOME。
编辑 conf/hbase-site.xml 文件,配置如下属性:

<configuration>
	<property>
		<name>hbase.rootdir</name>
		<value>file:///home/hbase</value>
		<desription>此目录由 hbase 自动在本地文件系统创建</description>
	</property>
	  
	<property>
		<name>hbase.zookeeper.property.dataDir</name>
		<value>/home/zookeeper</value>
	</property>
  
	<property>
	    <name>hbase.zookeeper.quorum</name>
	    <value>localhost</value>
	</property>
	
	<property>
	    <name>hbase.zookeeper.property.clientPort</name>
	    <value>2181</value>
	</property>
	
	<property>
	    <name>hbase.cluster.distributed</name>
	    <value>true</value>
	</property>
	
	<property>
	    <name>zookeeper.znode.parent</name>
	    <value>/hbase</value>
	</property>
</configuration>

**PS:**在开发或测试环境下,可以配置 hbase.rootdir 指向本地文件系统,但是在生成环境中,不建议这么做,以防丢失数据。应该指向 hdfs 文件系统,比如:

		hbase.rootdir=hdfs://namenode.example.org:8020/hbase

PS:在本地模式启动 hbase 后,进入 hbase shell 操作页面出现 zookeeper 相关异常,建议使用自己安装的 zookeeper,不要使用 hbase 自带的 hbase,把 zookeeper 的配置文件拷贝到 ${HBASE_HOME}/conf/ 目录下。如果进入 hbase shell 正常,然而使用 hbase 命令操作,出现异常,如 Server is not yet run,且使用 jps 命令也没有看到 HMaster 进程,那么应该修改 hbase-site.xml 配置文件中的hbase.rootdir 和 hbase.zookeeper.property.dataDir 这两个属性,使得配置的值(目录)对当前启动 hbase 的用户有读写能力。

1.2 伪分布式模式

配置 hbase-site.xml:

<configuration>
	<property>
  		<name>hbase.cluster.distributed</name>
  		<value>true</value>
	</property>
	
	<property>
  		<name>hbase.rootdir</name>
  		<value>hdfs://localhost:8020/hbase</value>
  		<description>hdfs 在本地安装,端口为 8082。不要在 hdfs 创建目录,由 hbase 自动创建</description>
	</property>
	
	<property>
		<name>hbase.unsafe.stream.capability.enforce</name>
		<value>true</value>
		<description>此属性要么配置为 true,要么就移除此属性配置</description>
	</property>
</configuration>

现在,可以启动 hbase,验证是否一切正常。

HMaster 进程管理着整个 hbase 集群,为了高可用,避免单点故障问题,可以启动多个 backup HMaster 进程实例,为了启动 backup HMaster 进程实例,可以使用 local-master-backup.sh 脚本启动,不过对每个启动的 backup HMaster 进程实例,都需要添加参数来表示相对于 master HMaster 进程实例的端口偏移量。master HMaster 进程实例的默认两个端口是 16000 和 16010,从而端口偏移量都是加在这两个端口上。比如下面命令,开启了 3 个 backup HMaster 进程实例,分别使用的端口是 16002/16012、16003/16013 和 16005/16015。

		$ ./bin/local-master-backup.sh start 2 3 5

为了停止 backup HMaster 进程实例,而又不影响整个 hbase 集群,即 master HMaster 进程实例依然正常服务,那么需要找到 backup HMaster 进程实例的 pid,这个 pid 可以从文件 /tmp/hbase-USER-X-master.pid,此文件内容只保存 pid。如下命令就会停止端口偏移量为 1 的 HMaster 进程实例,但集群正常服务中…

		$ cat /tmp/hbase-testuser-1-master.pid |xargs kill -9
1.2.1 启动和停止额外的 HRegionServer

HRegionServer 按照 HMaster 的指示管理其 StoreFiles 中的数据,通常来说,HRegionServer 进程实例应该是跟集群的节点一一对应的,然而在伪分布式模式下,为了测试,在同一个节点运行多个 HRegionServer 进程实例是非常有用的。命令 local-regionservers.sh 就可以启动多个 HRegionServer,它的工作原理跟之前说的 local-master-backup.sh 差别不大。在 Hbase 1.1.0 之后,HMaster 不适用 HRegionServer 的端口,因此预留了 10 个端口(16020-16029 和 16030-16039)给 HRegionServer(它的默认端口是 16020 和 16030)。但是,在使用刚才说的命令运行额外的 HRegionServer 进程之前,还需要给环境变量 HBASE_RS_BASE_PORTHBASE_RS_INFO_BASE_PORT 设置合适的值。在一台机器上,可以支持 99 个 HRegionServer,端口是 16200-16300。

		$ .bin/local-regionservers.sh start 2 3 4 5
		$ .bin/local-regionservers.sh stop 3
1.3 完全分布式

实际上,在真实场景中和完全测试 hbase 集群能力,需要搭建 hbase 完全分布式集群,在完全分布式集群中,包含许多节点,而每个节点都可能运行一个或多个 HBase 守护进程。比如 主从 HMaster、zookeeper 和 HRegionServer。下表是分布式集群架构样例:

Node NameHMasterZookeeperHRegionServer
node-a.example.comyesyesno
node-b.example.combackupyesyes
node-c.example.comnoyesyes
1.3.1 免密码登录

为了启动守护进程,node-a 需要登录 node-b 和 node-c,当然还有它本身。因此,最简单的方式就是所有机器都是同一个用户名,并且配置从 node-a 登录到其他机器都是不需要密码的,即免密码登录。

  • 在 node-a 上生成秘钥对

    生成以运行 hbase 的用户名的秘钥对。命令如下:

      	$ ssh-keygen -t rsa
    

    公钥的默认文件名是 id_rsa.pub

  • 在其他机器上创建目录存放公钥

    在 node-b 和 node-c 上的用户 home 目录下创建 .ssh 目录

  • 拷贝公钥到其他机器

    可以使用 scp 命令把 node-a 上的公钥拷贝到其他机器的 ${home}/.ssh 目录下。在其他机器上还需 要创建一个文件 ${home}/.ssh/authorized_keys,然后再把 id_rsa.pub 文件的内容追加到文件 authorized_keys 的末尾。不过需要注意的是,node-a 本身也需要完成这件事。

      	$ cat id_rsa.pub >> ~/.ssh/authorized_keys
    
  • 测试免密码登录

    如果刚才的操作都正确的话,那么使用 ssh 命令从 node-a 上登录到其他机器应该就不需要在输入密码了。

  • 由于在 node-b 上运行 backup HMaster 进程实例,因此需要重复上述步骤,只不过这次是以 node-b 为出发点,而不是 node-a,且需要注意的是,不要覆盖之前的 .ssh/authorized_keys 文件内容,因此使用重定向符号 >> ,而不是 >。

1.3.2 准备 node-a

node-a 机器将会运行 primary HMaster 进程 和 zookeeper 进程,但是是不需要运行 HRegionServer 进程。

  • 编辑 conf/regionservers 文件,移除包含 localhost 的那一行,然后添加 node-b 和 node-c 的主机名或 ip 地址。

  • 在 node-b 配置 HBase,运行 backup HMaster

    在 conf 目录下创建文件名为 backup-masters 的文件,添加 node-b 的主机名。

  • 配置 zookeeper

    在生成环境中,需要仔细考虑下 zookeeper 的配置,因为配置的属性将会直接指导 HBase 启动和管理集群中各个节点上的 zookeeper 实例。
    在 node-a 机器上,编辑 conf/hbase-site.xml 文件,添加如下属性:

    <property>
      <name>hbase.zookeeper.quorum</name>
      <value>node-a.example.com,node-b.example.com,node-c.example.com</value>
    </property>
    <property>
      <name>hbase.zookeeper.property.dataDir</name>
      <value>/usr/local/zookeeper</value>
    </property>
    
1.3.3 准备 node-b 和 node-c

node-b 机器会运行一个 backup HMaster 进程实例 和 zookeeper 进程实例。

  • 下载且解压 hbase

  • 拷贝 node-a 机器上的配置到 node-b 和 node-c 机器

    集群每个机器上有相同的配置

1.3.4 启动和测试集群

通过 web 页面访问,在 0.98.x 之前,HMaster 的端口是 60010,HRegionServer 的端口是 60030,而之后的端口分别是 16010 和 16030。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值