HBase介绍
HBase是Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩、实时读写的分布式数据库。
利用Hadoop HDFS作为其文件存储系统,利用Hadoop MapReduce来处理HBase中的海量数据,利用Zookeeper作为其分布式协同服务。
从技术上讲,HBase实际上更像是“数据存储”而不是“数据库”,因为它缺少RDBMS中的许多功能,例如字段型列,二级索引,触发器和高级查询语言等。
HBase的特点是:
- 强大的一致读/写:HBase不是“最终一致”的DataStore。它非常适合高速计数器聚合等任务。
- 自动分片:HBase表通过region分布在群集上,并且随着数据的增长,region会自动分割和重新分配。
- 自动的RegionServer故障转移。
- Hadoop/HDFS集成:HBase支持HDFS作为其分布式文件系统。
- MapReduce:HBase支持通过MapReduce进行大规模并行处理,将HBase用作源和漏。 HBASE->MR->HDFS HBASE->MR->HBASE HDFS->MR->HBASE
- Java客户端API:HBase支持易于使用的Java API以进行编程访问。
- Thrift/REST API:HBase还支持非Java前端的Thrift和REST。
- 块缓存和布隆过滤器:HBase支持块缓存和布隆过滤器,以实现大容量查询优化。
- 运维管理:HBase提供内置网页,用于运维监控和JMX指标。
HBase下载地址:https://archive.apache.org/dist/hbase/
安装HBase(独立模式)
在独立模式下,HBase不使用HDFS,它使用本地文件系统,它在同一个JVM中运行所有HBase守护进程和本地ZooKeeper。
(1)将hbase-2.3.1-bin.tar.gz上传到/opt/software目录下
(2)解压hbase-2.3.1-bin.tar.gz到/opt/module/目录下
(3)修改hbase-2.3.1-bin的名称为hbase-single
(4)在conf/hbase-env.sh中设置JAVA_HOME
(5)修改conf/hbase-site.xml
tar -zxf /opt/software/hbase-2.3.1-bin.tar.gz -C /opt/module/
mv /opt/module/hbase-2.3.1-bin /opt/module/hbase-single
# 修改配置
cd /opt/module/hbase/conf
vi hbase-env.sh
export JAVA_HOME= # 修改java环境地址,保存
export HBASE_MANAGES_ZK=false
修改hbase-site.xml文件vi hbase-site.xml
<configuration>
<property>
<name>hbase.cluster.distributed</name>
<value>false</value>
</property>
<property>
<name>hbase.tmp.dir</name>
<value>./tmp</value>
</property>
<property>
<name>hbase.unsafe.stream.capability.enforce</name>
<value>false</value>
</property>
<property>
<name>hbase.rootdir</name>
<value>file:///opt/module/hbase-single/hbase</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>./zookeeper</value>
</property>
</configuration>
我们不需要创建任何目录,hbase会创建。如果手动创建了,hbase会做一个迁移,这不是我们想要的。
bin/start-hbase.sh脚本用于启动hbase。启动成功,hbase会在标准输出打印成功启动的信息。使用jps查看进程,会只有一个HMaster进程。这个进程中包含了一个HMaster、一个HRegionServer以及一个zookeeper的daemon,它们在同一个进程中。
连接HBase:
./bin/hbase shell
hbase(main):001:0> create 'test', 'cf'
hbase(main):002:0> list 'test'
hbase(main):003:0> put 'test', 'row1', 'cf:a', 'value1'
hbase(main):003:0> put 'test', 'row1', 'cf:b', 'value2'
hbase(main):003:0> put 'test', 'row1', 'cf:c', 'value3'
hbase(main):016:0> scan 'test'
hbase(main):017:0> get 'test', 'row1'
hbase(main):021:0> drop 'test'
安装HBase(伪分布式模式)
tar -zxf /opt/software/hbase-2.3.1-bin.tar.gz -C /opt/module/
mv /opt/module/hbase-2.3.1-bin /opt/module/hbase
# 修改配置
cd /opt/module/hbase/conf
vi hbase-env.sh
export JAVA_HOME= # 修改java环境地址,保存
export HBASE_MANAGES_ZK=false # 设置不使用自带zookeeper
修改hbase-site.xml文件,将hbase.cluster.distributed值从false改成true
vi hbase-site.xml
<configuration>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.tmp.dir</name>
<value>./tmp</value>
</property>
<property>
<name>hbase.rootdir</name>
<value>hdfs://hadoop102:8020/hbase</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>./zookeeper</value>
</property>
</configuration>
注意:由于HBase要使用HDFS的客户端,HDFS客户端的配置必须让hbase看到并使用。
有三种方式做到这一点:
i.在hbase-env.sh中,将HADOOP_CONF_DIR添加到HBASE_CLASSPATH环境变量中,HADOOP_CONF_DIR指向HADOOP的etc/hadoop目录。
ii.拷贝hdfs-site.xml到HBASE_HOME/conf,当然,最好是做一个符号链接。
iii.如果HDFS客户端配置很少,可以直接添加到hbase-site.xml中。
bin/start-hbase.sh脚本用于启动hbase。启动成功,hbase会在标准输出打印成功启动的信息。使用jps查看进程,会只有一个HMaster进程。
安装HBase(分布式模式)
tar -zxf /opt/software/hbase-2.3.1-bin.tar.gz -C /opt/module/
mv /opt/module/hbase-2.3.1-bin /opt/module/hbase-cluster
# 修改配置
cd /opt/module/hbase-cluster/conf
vi hbase-env.sh
export JAVA_HOME= # 修改java环境地址,保存
export HBASE_MANAGES_ZK=false # 设置不使用自带zookeeper
修改hbase-site.xml文件,将hbase.cluster.distributed值从false改成true
vi hbase-site.xml
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://hadoop102:8020/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.tmp.dir</name>
<value>./tmp</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>hadoop102,hadoop103,hadoop104</value>
</property>
</configuration>
1.单点启动
[atguigu@hadoop102 hbase]$ bin/hbase-daemon.sh start master
[atguigu@hadoop102 hbase]$ bin/hbase-daemon.sh start regionserver
提示:如果集群之间的节点时间不同步,会导致regionserver无法启动,抛出ClockOutOfSyncException异常。
修复提示:
a、同步时间服务
请参看帮助文档:《尚硅谷大数据技术之Hadoop入门》
b、属性:hbase.master.maxclockskew设置更大的值
<property>
<name>hbase.master.maxclockskew</name>
<value>180000</value>
<description>Time difference of regionserver from master</description>
</property>
2.群启
[atguigu@hadoop102 hbase]$ bin/start-hbase.sh
对应的停止服务:
[atguigu@hadoop102 hbase]$ bin/stop-hbase.sh