--------------------------------------------------------------------------------------
[版权申明:本文系作者原创,转载请注明出处]
文章出处:http://blog.csdn.net/sdksdk0/article/details/51680296
作者: 朱培              ID:sdksdk0

-----------------------------------------------------------------------------------

一、HBase简介

1.1简介

hbase是bigtable的开源山寨版本。是建立的hdfs之上,提供高可靠性、高性能、列存储、可伸缩、实时读写的数据库系统。
它介于nosql和RDBMS之间,仅能通过主键(row key)和主键的range来检索数据,仅支持单行事务(可通过hive支持来实现多表join等复杂操作)。主要用来存储非结构化和半结构化的松散数据。与hadoop一样,Hbase目标主要依靠横向扩展,通过不断增加廉价的商用服务器,来增加计算和存储能力。

HBase以表的形式存储数据。表有行和列组成。列划分为若干个列族(row family)。

1.2 Hbase与传统数据库的对比

我们可以先来看一下传统的关系型数据库中的表:

然后与HBase的表进行对比,hbase的表结构,与传统的关系型数据库有较大的差别

我们就可以发现很多不同地方:

hbase不支持sql语句,它是一个nosql的一种,如果没有学过nosql或rubey,我们可以用help

1、定义表时不指定字段
2、定义表的时候只要指定列族名,列族数量不限
3、每一行都有一个固定的字段(行键),具有唯一性
4、对值的修改,原来的值是保留着的,每个值可以保留多个版本。默认查询的是最新版本的的值。(默认保留一个版本)

1.3 HBase中的重要概念

列族:hbase表中的每个列,都归属与某个列族。列族是表的chema的一部分(而列不是),必须在使用表之前定义。列名都以列族作为前缀。例如courses:history , courses:math 都属于 courses 这个列族。

访问控制、磁盘和内存的使用统计都是在列族层面进行的。实际应用中,列族上的控制权限能帮助我们管理不同类型的应用:我们允许一些应用可以添加新的基本数据、一些应用可以读取基本数据并创建继承的列族、一些应用则只允许浏览数据(甚至可能因 为隐私的原因不能浏览所有数据)。

时间戳:HBase中通过row和columns确定的为一个存贮单元称为cell。每个 cell都保存着同一份数据的多个版本。版本通过时间戳来索引。时间戳的类型是 64位整型。时间戳可以由hbase(在数据写入时自动 )赋值,此时时间戳是精确到毫秒的当前系统时间。时间戳也可以由客户显式赋值。如果应用程序要避免数据版本冲突,就必须自己生成具有唯一性的时间戳。每个 cell中,不同版本的数据按照时间倒序排序,即最新的数据排在最前面。

为了避免数据存在过多版本造成的的管理 (包括存贮和索引)负担,hbase提供了两种数据版本回收方式。一是保存数据的最后n个版本,二是保存最近一段时间内的版本(比如最近七天)。用户可以针对每个列族进行设置。

Cell:由{row key, column( =<family> + <label>),version} 唯一确定的单元。cell中的数据是没有类型的,全部是字节码形式存贮。

二、HBase体系结构

1、一个表会按照行划分为若干个region,每一个region分配给一台特定的regionserver管理
2、每一个region内部还要一句列族划分为若干个HStore
3、每个HStore中的数据会落地到若干个HFILE文件中
4、region体积会随着数据插入而不断增长,到一定阈值后悔分裂
5、随着region的分裂,一台regionserver上管理的region会越来越多
6、HMASTER会根据regionserver上管理的region数做负载均衡
7、region中的数据拥有一个内存缓存:memstore,数据的访问优先在memstore中进行
8、memstore中的数据因为空间有限,所以需要定期flush到文件storefile中,每次flush都是生成新的storefile
9、storefile的数量随着时间也会不断增加,regionserver会定期将大量storefile进行合并(merge)

行键的设计对数据查询效率的影响非常大。

HBase具有很好的可伸缩性:如果存储容量不够的时候,直接加datanode或者regionservers
hbase可以作为一个线上系统的底层系统的功能。

Hmaster可以做负载均衡,监控到各个节点之间的数据存储情况。
每一个store(列族)会有一个内存缓存,存放的是一些最热的数据(最近访问的),这样的话读取数据的速度会快很多。

文件都是有索引的,所以查起来会比较快的。


region会在storefile定期进行合并操作。

三、HBase环境搭建

1、首先要去下载一个HBase的安装文件:http://hbase.apache.org/,然后解压到你需要安装的目录,如果你已经学到hbase了,我相信这些基本的安装肯定全部都会了的。
2、在habse目录下的conf目录下找到hbase-env.sh和hbase-site.xml,以及regionservers,然后分别按照下面的进行配置,整个配置过程非常简单。
在hbase-env.sh中,主要是配置java的环境变量,还有就是要开启zookeeper功能,这里要把默认的true改成的false,意思就是启用zookeeper,但是启用的不是hbase自带的zookeeper,而是使用我自己安装的zookeeper。
export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-amd64export HBASE_MANAGES_ZK=false

在hbase-site.xml中,主要就是配置hdfs的主机地址,还有下面的ubuntu1,2,3就是zookeeper的主机名个端口2181,不同的机器可以酌情配置。

configuration>
<property><name>hbase.rootdir</name><value>hdfs://ubuntu2:9000/hbase</value>
</property>
<property><name>hbase.cluster.distributed</name><value>true</value>
</property>
<property><name>hbase.zookeeper.quorum</name><value>ubuntu1:2181,ubuntu2:2181,ubuntu3:2181</value>
</property></configuration>

3、最后修改regionservers,将默认的localhost修改为主机的地址,这个配置文件的意思就是设置从节点,和我们之前配置的hadoop集群都是差不多的,就相当于那个salver。

ubuntu1
ubuntu2
ubuntu3
4、最后将hadoop中的core-site.xml和hdfs-site.xml拷贝到hbase的conf目录下。
5、然后通过scp将这个配置好的文件发往其他的两个节点。
最后我只想说一句不要在这配置文件里面多打了字母,否则会报错的。
1、启动所有的hbase进程
首先启动zk集群
./zkServer.sh start
启动hbase集群
start-dfs.sh
启动hbase,在主节点上运行:
start-hbase.sh
2、 通过浏览器访问hbase管理页面
192.168.44.131:60010
3、 为保证集群的可靠性,要启动多个HMaster
hbase-daemon.sh start master

jps在主节点上面的效果是:会启动HRegionServer和HMaster

其他的子节点就只启动HRegionServer进程
我们可以通过web页面查看启动的情况:192.168.44.131:60010,也就是你的主节点的ip或主机名+端口号60010就可以了。

四、HBase   shell的使用

4.1 启动

bhase shell的启用只要运行
 bin/hbase shell

我们首先来show database一下,从图片上面,我们可以看到有错误,也即使说hbase不支持sql的语法,这点我们前面已经说到了。那么我们就可以输入help命令来查看hbase的基本语句语法了。

4.2 建表

官方给的例子是:
Examples:hbase> create 'ns1:t1', 'f1', SPLITS => ['10', '20', '30', '40']hbase> create 't1', 'f1', SPLITS => ['10', '20', '30', '40']hbase> create 't1', 'f1', SPLITS_FILE => 'splits.txt', OWNER => 'johndoe'hbase> create 't1', {NAME => 'f1', VERSIONS => 5}, METADATA => { 'mykey' => 'myvalue' }hbase> # Optionally pre-split the table into NUMREGIONS, usinghbase> # SPLITALGO ("HexStringSplit", "UniformSplit" or classname)hbase> create 't1', 'f1', {NUMREGIONS => 15, SPLITALGO => 'HexStringSplit'}hbase> create 't1', 'f1', {NUMREGIONS => 15, SPLITALGO => 'HexStringSplit', CONFIGURATION => {'hbase.hregion.scan.loadColumnFamiliesOnDemand' => 'true'}}

那么我们就以例子为准,来新建一个用户信息表。表名为user-info,包含两个列族(base_info和extra_info),保留3个版本。

create 'user-info',{NAME=>'base_info',VERSIONS=>3},{NAME=>'extra_info'}

4.3 插入

官方给的语句是:
hbase> put 'ns1:t1', 'r1', 'c1', 'value', ts1
那么我们就按照它的语法来写:
 put 'user-info','rk-100001','base_info:name','张s'put 'user-info','rk-100001','base_info:age','20'
put 'user-info','rk-100001','base_info:address','湖南长沙'

在hbase只能一条条的插入,就比如一次只能插入name,那么如果我们想插入age,address就需要一个个的put。

4.4 查询

1、我们可以通过scan来查询:
 scan 'user-info'

我们可以从图中看到它是按key来排序的(字段的名称会根据字典排序)k-value

如果我再插入一行,
put 'user-info','rk100003','base_info:name','angelabby'

一行中的所有字段名+字段值,在存储的时候,hbase会排序,排序的依据是按照K的字典顺序,所有的行也会有序存储,排序的依据是rowkey的字典顺序。
这个特性会影响连续存放。

2、get取数据,一次只能取一行数据

get 'user-info','rk100003'

4.5 修改

三个版本:

 put 'user-info','rk100003','base_info:name',’yangying'put 'user-info','rk100003','base_info:name','baobao'

查看以前版本的值:

scan 'user-info',{VERSIONS=>10}

4.6 删除

需要先禁用这个表,然后才可以drop掉。
需要先禁用这个表,然后才可以drop掉。
disable 'user-info'
drop 'user-info'

五、eclipse中使用HBase

打开eclipse,导入hbase/lib中的所有包。然后就可以愉快的开始写了,这里以在eclipse中庸hbase建表和插入数据为例:

//建表,DDL操作public static void main(String[] args) throws MasterNotRunningException, ZooKeeperConnectionException, IOException {//  Configuration conf=new Configuration();//会加载hbase-site.xml配置文件Configuration conf=HBaseConfiguration.create();conf.set("hbase.zookeeper.quorum","ubuntu1:2181,ubuntu2:2181,ubuntu3:2181");HBaseAdmin  admin=new HBaseAdmin(conf);TableName name = TableName.valueOf("user-info");HTableDescriptor  tableDescriptor=new HTableDescriptor(name);//创建列名HColumnDescriptor base_info = new HColumnDescriptor("base_info");//给列族增加版本约束base_info.setMaxVersions(3);//将列族添加到表描述对象中tableDescriptor.addFamily(base_info);//用createTable方法创建一个tabelDescriptor所描述的对象admin.createTable(tableDescriptor);//关闭连接admin.close();}

最后我们可以在hbase的shell窗口来查看表是否已建好表。输入list就可以查询了
然后来插入数据:

  @Test//插入数据,属于DML操作public void Put() throws IOException{Configuration conf=HBaseConfiguration.create();conf.set("hbase.zookeeper.quorum","ubuntu1:2181,ubuntu2:2181,ubuntu3:2181");HTable hTable = new HTable(conf,"user-info");Put put=new Put(Bytes.toBytes("rk-10001"));put.add("base_info".getBytes(),"name".getBytes(),"wangming".getBytes());put.add("base_info".getBytes(),"age".getBytes(),"20".getBytes());hTable.put(put);hTable.close();}

最后我们可以在hbase的shell窗口来查看表是否已插入好数据。

到此,HBase的环境配置及其基本的使用以及分享完毕!如果想进一步学习相关知识,欢迎关注,如果对Hbase有什么疑问的地方欢迎留言!

HBase非常适用于大量的数据存储,因为它是一张非常大的表,可以有无数个列族,可以不断的扩展,这个特点是传统的mysql,oracle等关系型数据库是无法比拟的!

转载于:https://www.cnblogs.com/sdksdk0/p/5605013.html

HBase的环境配置及其应用相关推荐

  1. Hadoop集群搭建(六:HBase的安装配置)

    实验 目的 要求 目的: 1.HBase的高可用完全分布模式的安装和验证 要求: 完成HBase的高可用完全分布模式的安装: HBase的相关服务进程能够正常的启动: HBase控制台能够正常使用: ...

  2. HBase单机环境搭建

    HBase单机环境搭建 转自:https://songlee24.github.io/2015/07/20/hbase-standalone-mode/ 在搭建HBase单机环境之前,首先你要保证你已 ...

  3. 集群环境配置遇到的问题(随时更新)

    公司给分配了3台新的虚拟机,打算从头配置一下zookeeper,kafka,storm,hadoop,hbase的环境. (以后配置mongodb,spark的时候,在陆续更新,目前(2016/4/2 ...

  4. Hadoop高可用集群搭建-1、服务器等基础环境配置

    1. 服务器集群 hostname IP user password path os spark01 192.168.0.201 hadoopadmin java home/hadoopadmin U ...

  5. Hadoop hive sqoop zookeeper hbase生产环境日志统计应用案例(hadoop篇)

    Hadoop集群安装部署与配置(2015-01-15) 1.集群环境说明 主机列表 说明: 下文中蓝色部分为实际的执行命令:红色部分是重要的配置信息:"##"后为注释 a. 由于h ...

  6. wamp环境变量配置php,WAMP环境配置-PHP安装

    我这次环境配置安装的是php-5.6.25版本! (最近我在反复安装PHP的时候出现了一个问题,httpd.conf加载php5apache2_4.dll出现错误,怎么修改都不行,此时我安装的是VC1 ...

  7. 跟着狂神学Redis(NoSql+环境配置+五大数据类型+三种特殊类型+Hyperloglog+Bitmap+事务+Jedis+SpringBoot整合+Redis持久化+...)

    跟着狂神学Redis 狂神聊Redis 学习方式:不是为了面试和工作学习!仅仅是为了兴趣!兴趣才是最好的老师! 基本的理论先学习,然后将知识融汇贯通! 狂神的Redis课程安排: nosql 讲解 阿 ...

  8. 【保姆级教程】hadoop 3.x 环境配置——入门篇

    文章目录 (一) Hadoop环境配置 1 配置服务器 1.1 虚拟机 1.2 云服务器 1.3 服务器基础配置总览 2 配置用户 3 配置JAVA 3.1 更换yum源 3.2 安装JDK 3.2. ...

  9. QT5.3 + vs2012 + box2d环境配置

    安装vs 和 qt 下载vs 2012,傻瓜式安装,但安装时间可能比较长.(其中一定选择"Visual C++"选项) 下载Qt 5.3,选择适合自己电脑的版本下载安装,我选的是q ...

最新文章

  1. varnish Cconfigure
  2. BZOJ4520:[CQOI2016]K远点对(K-D Tree)
  3. java之正则表达式
  4. 8000401a 错误 ,检索 COM 类工厂中 CLSID 为 的组件时失败,原因是出现以下错误: 8000401a。...
  5. 毛世怀HPDS2017公路路面设计程序系统
  6. 用C#通过sql语句操作Sqlserver数据库教程
  7. zxr10交换机配置手册vlan_中兴ZXR10交换机配置
  8. MFC学习笔记整理:002_腾讯游戏连连看外挂制作(一)
  9. 青云诀2显示登录服务器超时,青云诀2游戏突然显示数据包损坏怎么办 解决方案分享...
  10. V2X方案之RSU介绍
  11. react-native获取农历日期和二十四节气
  12. 免费的网页截屏API有哪些?
  13. 什么蓝牙耳机适合学生党?内行推荐四款适合学生党的蓝牙耳机
  14. GNSS观测方程及线性组合
  15. 微信公众号现金红包红包 企业付款openid 获取
  16. mysql诸如漏洞攻击_MySQL及漏洞笔记
  17. 微信小程序:装B神器P图修改微信流量主小程序源码下载趣味恶搞图制作免服务器域名
  18. #2708. 黑暗(dark)
  19. Hadoop官网使用教程
  20. 爬虫爬取快代理网站动态IP

热门文章

  1. 性能测试工具Locust的使用----TaskSet类~~task任务嵌套
  2. python 矩阵类型转换_python中的矩阵运算
  3. 怎么查看linux日志里请求量最高的url访问最多的_LoaRunner性能测试系统学习教程:日志文件分析(8)...
  4. linux输入法没有候选,fcitx中文输入法没有备选框
  5. python string.format(),Python string.format()百分比,不取整
  6. 计算机软件服务板块,信息技术板块
  7. 如何在html网页中嵌入一段语法高亮的代码?_工程师私藏的代码比较工具,好用!...
  8. 织梦编程run=php,dedecms织梦怎么用runphp='yes'运行php
  9. 重启用reboot后起不来_2021年中国“天眼”开放,美媒记者探访后感叹了……
  10. Python编程基础10:列表