分布式数据库HBase以及HBase的单机模式,伪分布式模式和完全分布式模式

HBase简介

HBase是一个分布式的,面向列,可扩展的大数据存储的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文《Bigtable:一个结构化数据的分布式存储系统》。就像Bigtable利用了Google文件系统所提供的分布式数据存储一样,HBase在Hadoop之上提供了类似于Bigtable的能力。
HBase是Apache的Hadoop项目的子项目。HBase不同于一般的关系型数据库,是一个开源的,分布式的,版本化的非关系型数据库。Hbase是Hadoop生态系统的一部分,Hbase数据最终是存储到HDFS文件系统当中。HBase基于列的而不是基于行。

HBase的特点:

1、大容量:支持百亿行,百万列
2、面向列:动态增加列存储
3、多版本:每列数据存储可有多个version
4、稀疏性:空列不占用空间
5、扩展性:线性和模块化,底层依赖于HDFS(Hadoop分布式文件系统),表的自动和可配置分片
6、高可靠性:自动故障转移支持与HDFS备份
7、易于使用的Java API,用于客户端访问
8、随即读取性:region切分、主键索引和缓存机制,严格一致的读写操作
9、Thrift网关和REST-ful Web服务,支持XML,Protobuf和二进制数据编码选项
10、支持通过Hadoop指标子系统将指标导出到文件或Ganglia(分布式监控); 或通过JMX

Github地址:https://github.com/apache/hbase
官方网站:https://hbase.apache.org/
官方文档:https://hbase.apache.org/book.html
中文文档:http://abloz.com/hbase/book.html
中文社区:http://hbase.group/

在window中搭建HBase

由于Hbase是Hadoop生态系统的一部分,所以必须要先安装配置好Hadoop,
可以参考我上一篇文章:分布式计算平台Hadoop

重点:看下官方提供的版本支持

搭建需要:hadoop3.1.1以上都可以
来源:https://hbase.apache.org/book.html#hadoop

image.png

官方最新推荐版本为Hadoop3.1.1+和HBase2.1+

HBase下载

下载地址:https://mirrors.tuna.tsinghua.edu.cn/apache/hbase/
选择最新的2.1.5版本,官方建议下载稳定版本1.4.9

image.png

选择下载bin.tar.gz

image.png

下载完后直接解压,目录如下,相关的配置文件存放在conf目录下

image.png

单机模式

HBase内置有zookeeper,HBase启动默认使用内置zookeeper

1.配置hbase-site.xml配置文件

    <property>
        <name>hbase.rootdir</name>
        <value>hdfs://localhost:9000/hbase</value>
    </property>

这里需要注意

hbase.rootdirhbase持久化的目录,被所有regionserver共享,一般设置为hdfs://namenode.example.org:9000/hbasehdfs://localhost:9000要和hadoop配置文件core-site.xmlfs.defaultFS属性的值一样

建议加入的设置

需要先手动创建文件夹
hbase.tmp.dir:本地文件系统的临时目录
hbase.zookeeper.property.dataDirzookeeper的配置,snapshot存放的目录,默认是${hbase.tmp.dir}/zookeeper

拓展:
hbase.zookeeper.quorum:重要的也是必须设置的,启动zookeeper的服务器列表,逗号分隔,cluster(集群)模式下必须设置,默认是localhost,hbase客户端也需要设置这个值去访问zookeeper
hbase.zookeeper.property.clientPortzookeeper端口的配置,clientzookeeper的端口,默认2181

    <property>
        <name>hbase.tmp.dir</name>
        <value>E:/hbase/hbase-2.1.2/tmp</value>
    </property>
    <property>
        <name>hbase.zookeeper.property.dataDir</name>
        <value>E:/hbase/hbase-2.1.2/zoo</value>
    </property>

HBase官方配置项说明:https://hbase.apache.org/book.html#config.files

启动中可能遇到的报错

java.lang.NoClassDefFoundError: org/apache/htrace/SamplerBuilder
java.lang.RuntimeException: Failed construction of Master: 
class org.apache.hadoop.hbase.master.HMasterCommandLine$LocalHMasterorg.apache.htrace.SamplerBuilder

原因:jar包缺失
解决方法:把lib\client-facing-thirdparty包中的htrace-core-3.1.0-incubating.jar复制一个到lib包下即可

image.png

java.lang.IllegalStateException: The procedure WAL relies on the ability to hsync for proper operation 
during component failures, but the underlying filesystem does not support doing so. 
Please check the config value of 'hbase.procedure.store.wal.use.hsync' to set the desired level of robustness 
and ensure the config value of 'hbase.wal.dir' points to a FileSystem mount that can provide it.

[main-SendThread(127.0.0.1:2181)] zookeeper.ClientCnxn: 
Session 0x168ea1e6d980001 for server null, unexpected error, closing socket connection and attempting reconnect
java.net.ConnectException: Connection refused: no further information

原因:单机模式直接使用本地磁盘,而本地磁盘不支持hsync

解决方法:

禁用hsync,在hbase-site.xml中加入

    <property>
        <name>hbase.procedure.store.wal.use.hsync</name>
        <value>false</value>
    </property>

但是还是会报错,hbase.procedure.store.wal.use.hsync如果为true,则使用hsync,如果为false,则使用hflush,两种都会报错
需要设置hbase.unsafe.stream.capability.enforce,在hbase-site.xml中再加入

    <property>
        <name>hbase.unsafe.stream.capability.enforce</name>
        <value>false</value>
    </property>

2.启动HBase

运行bin/start-hbase.cmd,前提:先启动hadoop

image.png

没发现有报错信息就是启动成功

Hadoop Namenode控制台
image.png
Hadoop Datanode控制台
image.png
还可能存在的问题是

1.启动不久后发现HBase自动挂了

java.lang.RuntimeException: Master not initialized after 200000ms
        at org.apache.hadoop.hbase.util.JVMClusterUtil.waitForEvent(JVMClusterUtil.java:229)
        at org.apache.hadoop.hbase.util.JVMClusterUtil.startup(JVMClusterUtil.java:197)
        at org.apache.hadoop.hbase.LocalHBaseCluster.startup(LocalHBaseCluster.java:413)
        at org.apache.hadoop.hbase.master.HMasterCommandLine.startMaster(HMasterCommandLine.java:232)
        at org.apache.hadoop.hbase.master.HMasterCommandLine.run(HMasterCommandLine.java:140)
        at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
        at org.apache.hadoop.hbase.util.ServerCommandLine.doMain(ServerCommandLine.java:149)
        at org.apache.hadoop.hbase.master.HMaster.main(HMaster.java:3103)

原因:Hadoop处于安全模式

解决方法:

前提:要确保已经设置好hbase.procedure.store.wal.use.hsynchbase.unsafe.stream.capability.enforce
在Hadoop的hdfs-site.xml配置文件中加入

    <property> 
        <name>dfs.safemode.threshold.pct</name> 
        <value>0</value> 
    </property>

注:如果还是解决不了问题重新启动hadoop和hbase,请干净进程
dfs.safemode.threshold.pct(阈值比例):指定应有多少比例的数据块满足最小副本数要求。小于等于0意味不进入安全模式,大于1意味一直处于安全模式。

工作原理:

NameNode在启动的时候首先进入安全模式,如果DataNode丢失的block达到一定的比例1-dfs.safemode.threshold.pct,则系统一直处于安全模式状态,即只读状态。
dfs.safemode.threshold.pct(缺省值0.999f)表示HDFS启动的时候,如果DataNode上报的block个数达到了元数据记录的block个数的0.999倍才可以离开安全模式,否则一直是这种只读模式。如果设置为1,则HDFS一直处于安全模式。

2.Caused by: java.io.IOException: Filesystem closed
原因:多个datanodegetFileSystem过程中,由于Configuration一样,会得到同一个FileSystem。如果有一个datanode在使用完关闭连接,其它的datanode在访问就会出现上述异常
解決方法:
在hadoop的配置文件hdfs core-site.xml里把fs.hdfs.impl.disable.cache设置为true

    <property>
        <name>fs.hdfs.impl.disable.cache</name>
        <value>true</value>
    </property> 

3.java.lang.NoClassDefFoundError: Could not initialize class org.apache.hadoop.hbase.io.asyncfs.FanOutOneBlockAsyncDFSOutputHelper
解决方法:在hdfs-site.xml中加入

    <property> 
        <name>hbase.wal.provider</name> 
        <value>multiwal</value> 
    </property>

在HBase1.0开始支持多个WALHBASE-5699,这样可以提高写入的吞吐量。配置参数为hbase.wal.provider=multiwal,支持的值还有defaultProviderfilesystem(这2个是同样的实现)

具体的HBase WAL 解析可以参考:https://blog.csdn.net/u010039929/article/details/74330722

Hbase master的管理界面

默认端口为16010,可以在hbase-site.xml配置hbase.master.info.port去修改默认端口
http://localhost:16010 也就是IP:端口号

image.png

Hbase master内置zookeeper的管理界面

http://localhost:16010/zk.jsp
内置zookeeper的相关信息都是显示出来

image.png

Hbase单机搭建可以参考官方文档:https://hbase.apache.org/book.html#standalone_dist

伪分布式模式和完全分布式模式(只能在Linux环境下)

简单来说就是需要使用外部zookeeper
伪分布式:所有守护进程都在单个节点上运行,针对本地文件系统运行,也可以针对Hadoop分布式文件系统(HDFS)的实例运行,简单来说就是单个主机上运行的完全分布式模式
完全分布式模式:守护进程分布在集群中的所有节点上,只能在HDFS上运行

1.编辑hbase-env.cmd

在最后加上set HBASE_MANAGES_ZK=false
默认是truetrue的意思是使用hbase自带的zookeeper,false则是使用外部zookeeper(推荐)

image.png

2.配置hbase-site.xml
<property>
    <name>hbase.cluster.distributed</name>
    <value>true</value>
</property>

hbase.cluster.distributed: hbase集群模式运作与否的标志,默认是false,启用分布式集群,开启需要设置为truefalse时启动hbase会在一个jvm中运行hbasezookeeper

注:分布式集群必须配置hbase.zookeeper.quorumhbase.zookeeper.property.clientPort

3.启动HBase

建议用cmd启动,可以看到返回信息,不然就是闪退

image.png

在windows环境启动时会提示:This is not implemented yet. Stay tuned.(这还没有实现。敬请关注。)

Linux环境下Hbase伪分布式搭建可以参考官方文档:https://hbase.apache.org/book.html#quickstart_pseudo

Linux环境下Hbase完全分布式搭建可以参考官方文档:https://hbase.apache.org/book.html#quickstart_fully_distributed

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容