5Hbase(nosql)体系结构有基本操作flumepig

Googlebigtable的开源实现

列式数据库

可集群化

可以使用shellwebapi多种方式访问

适合高速读写的场景

Hql查询语言

noSQL的典型代表

逻辑模型

以表的形式存放数据

表由行和列组成,每个列属于某个列族,由行和列确定的存储单元称为元素

每个元素保存了同一份数据的多个版本,由时间戳来区分

行键

数据行在表里的唯一标识,作为检索记录的主键

访问表里的行:

通过单个行键访问

给定行键的范围访问

全表扫描

行键可以是最大长度不超过64k的任意字符串

列族和列

列族需要在定义表时指定

表是在插入记录时动态生成

列表示:<列族>:<限定符>

Hbase在磁盘上按列族存储

时间戳

对应每次数据操作的时间

Hbase支持两种数据版本的回收方式:

每个数据单元,只存储指定个数的最新版本

保存指定时间长度的版本

时间查询:最新数据/全部版本数据

元素由行键列族:限定符时间戳来决定

元素以字节码形式存放,没有类型之分

物理模型

适合海量数据的秒组查询

表中的记录,按照行键进行拆分,拆分成一个个的region(startkey,endkey)

Region存储在regionserver(单独的物理机器)中

Hbase-default.xml列族存放的最大值为10g

体系结构

主从式结构,由hmaster和hregionServer组成

通过zookeeper的masterelection机制来保证hmaster的运行

Hbase中有两张物殊的表

-root-记录了.meta.表的region信息

.meta.记录用户表的region信息

用户访问数据先访问zookeeper--->-root-,接着找.meta.找到用户数据的位置

Hbase的伪分布的安装

Hbase的安装与配置查找0.20.2对应hbase的版本

单机安装

下载地址:http://mirror.bjtu.edu.cn/apache/hbase/hbase-0.90.5

解压到指定目录

可以将hbase添加到二环境变量中etc/profile

ExportHBASE_HOME=解压路径

使配置文件生效source/etc/profile

修改/software/hbase/hbase-0.90.5/conf/hbase-env.sh文件,设置java_home

#Thejavaimplementationtouse.Java1.6required.

exportJAVA_HOME=/sdk/jdk1.6.0_34

/配置hbase-ste.xml文件,添加如下内容:

<configuration>

<property>

<name>hbase.rootdir</name>

<value>file:///software/hbase/hbase-0.90.5/data</value>

</property>

</configuration>

启动hbase并验证

安装目录下的bin/start-hbase.sh

查看启动情况:jdk_home/bin/jps,可以看到如下内容:

root@vm:/sdk/jdk1.6.0_34/bin#jps

4131DataNode

5761TaskTracker

3375NameNode

4894SecondaryNameNode

4955JobTracker

6079Jps

5973HMaster

安装目录下的bin/hbaseshell,显示如下:

root@vm:/software/hbase/hbase-0.90.5#bin/hbaseshell

HBaseShell;enter'help<RETURN>'forlistofsupportedcommands.

Type"exit<RETURN>"toleavetheHBaseShell

Version0.90.5,r1212209,FriDec905:40:36UTC2011

hbase(main):001:0>quit

root@vm:/software/hbase/hbase-0.90.5#

伪分布模式

在单点模式的基础上

1编辑hbase-env.sh添加HBASE_CLASSPATH环境变量,添加如下内容

#ExtraJavaCLASSPATHelements.Optional.

exportHBASE_CLASSPATH=/software/hadoop/hadoop-0.20.2/conf

#打开文件最后的配置项,hbase用自已实例的zookeeper来管理

exportHBASE_MANAGES_ZK=true

2编辑hbase-site.xml打开分布模式

<configuration>

<property>

<name>hbase.rootdir</name>

<!--

<value>file:///software/hbase/hbase-0.90.5/data</value>

-->

<value>hdfs://localhost:9000/hbase<value>

</property>

<property>

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

<value>true</value>

</property>

<property>

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

<value>vm</value>

</property>

<property>

<name>dfs.replication</name>

<value>1</value>

</property>

</configuration>

可选文件regionservers所在节点,设置节点名

覆盖hadoop核心jar包

//首先禁用原有的jar文件

root@vm:/software/hbase/hbase-0.90.5/lib#mvhadoop-core-0.20-append-r1056497.jarhadoop-core-0.20-append-r1056497.old

//添加hadoop安装目录下的核心jar包到lib目录

root@vm:/software/hbase/hbase-0.90.5/lib#cp/software/hadoop/hadoop-0.20.2/hadoop-0.20.2-core.jar.

root@vm:/software/hbase/hbase-0.90.5/lib#ls

...

guava-r06.jarlog4j-1.2.16.jar

hadoop-0.20.2-core.jarprotobuf-java-2.3.0.jar

hadoop-core-0.20-append-r1056497.oldruby

jackson-core-asl-1.5.5.jarservlet-api-2.5-6.1.14.jar

...

启动hbase,同上,显示如下结果:

root@vm:/sdk/jdk1.6.0_34/bin#jps

10477Jps

5145JobTracker

5049SecondaryNameNode

5898TaskTracker

4285DataNode

9562HMaster

10320HRegionServer

3496NameNode

9509HQuorumPeer

root@vm:/sdk/jdk1.6.0_34/bin#

验证启动

完全分布模式

配置hosts,确保主机名可以解析为ip

编辑hbase-env.xml

编辑hbase-site.xml

编辑regionservers文件

把hbase复制到其它节点

启动hbase

验证启动

也可以通过ie访问http://localhost:60010/master.jsp

Shell操作

Notallmetaregionsonlineexception问题

修改/etc/hosts文件,添加如下内容:

127.0.0.1 localhost

127.0.0.1vm

Help帮肋

State查看数据库状态

hbase(main):003:0>status

1servers,0dead,0.0000averageload

Version查看数据库版本

hbase(main):004:0>version

0.90.5,r1212209,FriDec905:40:36UTC2011

创建表

Create‘表名’,’列族名称1’,’列族名称2’

添加记录

Put‘表名称’,’行名称’,’列名称’,’值’

查看记录

Get‘表名’,’行名称

查看表中的记录总数

Count‘表名’

删除记录

Delete‘表名’,’行名称’,’列名称’

删除一张表

Drop‘表名’

查看所有记录

Scan‘表名’

查看某个表中的列有所有数据

Scan‘表名’,{COLUMNS=>’列族名称:列名称’}

更新记录

重写一遍进行覆盖

具体操作如下:

创建表

hbase(main):001:0>create'user','user_id','address','info'

0row(s)in2.2520seconds

查看

hbase(main):002:0>list

TABLE

user

1row(s)in0.0300seconds

查看表中列族的描述信息

hbase(main):003:0>describe'user'

DESCRIPTIONENABLED

{NAME=>'user',FAMILIES=>[{NAME=>'address',Btrue

LOOMFILTER=>'NONE',REPLICATION_SCOPE=>'0',COM

PRESSION=>'NONE',VERSIONS=>'3',TTL=>'214748

3647',BLOCKSIZE=>'65536',IN_MEMORY=>'false',

BLOCKCACHE=>'true'},{NAME=>'info',BLOOMFILTER

=>'NONE',REPLICATION_SCOPE=>'0',COMPRESSION=

>'NONE',VERSIONS=>'3',TTL=>'2147483647',BLO

CKSIZE=>'65536',IN_MEMORY=>'false',BLOCKCACHE

=>'true'},{NAME=>'user_id',BLOOMFILTER=>'NO

NE',REPLICATION_SCOPE=>'0',COMPRESSION=>'NONE

',VERSIONS=>'3',TTL=>'2147483647',BLOCKSIZE

=>'65536',IN_MEMORY=>'false',BLOCKCACHE=>'tr

ue'}]}

1row(s)in0.0340seconds

删除表

Disable‘user’

Drop‘user’

添加记录

put'users','retacn','info:age','32';

put'users','retacn','info:birthday','1984-0*-0*';

put'users','retacn','info:company','none';

put'users','retacn','address:contry','china';

put'users','retacn','address:province','shandong';

put'users','retacn','address:city','zibo';

put'users','zhansan','info:age','30';

put'users','zhansan','info:birthday','1984-08-08';

put'users','zhansan','info:company','hony';

put'users','zhansan','address:contry','china';

put'users','zhansan','address:province','shandong';

put'users','zhansan','address:city','zibo'

取得一行(id)记录

hbase(main):020:0>get'users','retacn'

COLUMNCELL

address:citytimestamp=1449211197068,value=zibo

address:contrytimestamp=1449211197048,value=china

address:provincetimestamp=1449211197061,value=shandong

info:agetimestamp=1449211197012,value=32

info:birthdaytimestamp=1449211197025,value=1984-09-04

info:companytimestamp=1449211197038,value=none

取得一行(id),一个列族的所有数据

hbase(main):022:0>get'users','retacn','address'

COLUMNCELL

address:citytimestamp=1449211197068,value=zibo

address:contrytimestamp=1449211197048,value=china

address:provincetimestamp=1449211197061,value=shandong

取得一行(id),一个列族的一列的所有数据

hbase(main):023:0>get'users','retacn','info:age'

COLUMNCELL

info:agetimestamp=1449211197012,value=32

更新记录

重复添加即可覆盖

hbase(main):024:0>put'users','retacn','info:age','31'

0row(s)in0.0220seconds

hbase(main):025:0>get'users','retacn','info:age'

COLUMNCELL

info:agetimestamp=1449211528248,value=31

取得单元格数据的版本数据

hbase(main):026:0>get'users','retacn',{COLUMN=>'info:age',VERSIONS=>1}

COLUMNCELL

info:agetimestamp=1449211528248,value=31

1row(s)in0.0360seconds

hbase(main):027:0>get'users','retacn',{COLUMN=>'info:age',VERSIONS=>2}

COLUMNCELL

info:agetimestamp=1449211528248,value=31

info:agetimestamp=1449211197012,value=32

版本号

hbase(main):030:0>describe'users'

DESCRIPTIONENABLED

{NAME=>'users',FAMILIES=>[{NAME=>'address',true

BLOOMFILTER=>'NONE',REPLICATION_SCOPE=>'0',CO

MPRESSION=>'NONE',VERSIONS=>'3',TTL=>'21474

83647',BLOCKSIZE=>'65536',IN_MEMORY=>'false',

BLOCKCACHE=>'true'},{NAME=>'info',BLOOMFILTE

R=>'NONE',REPLICATION_SCOPE=>'0',COMPRESSION

=>'NONE',VERSIONS=>'3',TTL=>'2147483647',BL

OCKSIZE=>'65536',IN_MEMORY=>'false',BLOCKCACH

E=>'true'},{NAME=>'user_id',BLOOMFILTER=>'N

ONE',REPLICATION_SCOPE=>'0',COMPRESSION=>'NON

E',VERSIONS=>'3',TTL=>'2147483647',BLOCKSIZE

=>'65536',IN_MEMORY=>'false',BLOCKCACHE=>'t

rue'}]}

取得单元格数据的某个版本数据

hbase(main):029:0>get'users','retacn',{COLUMN=>'info:age',TIMESTAMP=>1449211528248}

COLUMNCELL

info:agetimestamp=1449211528248,value=31

全表扫描

hbase(main):031:0>scan'users'

ROWCOLUMN+CELL

retacncolumn=address:city,timestamp=1449211197068,value=zibo

retacncolumn=address:contry,timestamp=1449211197048,value=chin

a

retacncolumn=address:province,timestamp=1449211197061,value=sh

andong

retacncolumn=info:age,timestamp=1449211528248,value=31

retacncolumn=info:birthday,timestamp=1449211197025,value=1984-

09-04

retacncolumn=info:company,timestamp=1449211197038,value=none

zhansancolumn=address:city,timestamp=1449211208677,value=zibo

zhansancolumn=address:contry,timestamp=1449211208664,value=chin

a

zhansancolumn=address:province,timestamp=1449211208670,value=sh

andong

zhansancolumn=info:age,timestamp=1449211208579,value=30

zhansancolumn=info:birthday,timestamp=1449211208596,value=1984-

09-03

zhansancolumn=info:company,timestamp=1449211208605,value=hony

2row(s)in0.0720seconds

删除行的’info:age’字段

Delete‘users’,’retacn’,’info:age’

删除整行

Deleteall‘users’,’retacn’

统计表的行数

Count‘users’

清空表

Truncate‘users’

退出hbaseshell

quit

Hbase中javaAPI的操作

示例代码如下:

/**

*Copyright(C)2015

*

*FileName:HbaseApiTest.java

*

*Author:<ahref="mailto:zhenhuayue@sina.com">Retacn</a>

*

*CreateTime:2015-12-4

*/

//PackageInformation

packagecn.yue.hbase;

importjava.io.IOException;

importorg.apache.hadoop.conf.Configuration;

importorg.apache.hadoop.hbase.HColumnDescriptor;

importorg.apache.hadoop.hbase.HTableDescriptor;

importorg.apache.hadoop.hbase.MasterNotRunningException;

importorg.apache.hadoop.hbase.ZooKeeperConnectionException;

importorg.apache.hadoop.hbase.client.HBaseAdmin;

importorg.apache.hadoop.hbase.client.HTable;

importorg.apache.hadoop.hbase.client.Put;

/****

*测试hbasejavaAPI

*

*@version

*

*@Description:

*

*@author<ahref="mailto:zhenhuayue@sina.com">Retacn</a>

*

*@since2015-12-4

*

*/

publicclassHbaseApiTest{

publicstaticfinalStringTABLE_NAME="employee";

publicstaticfinalStringFAMILY_NAME="id";

publicstaticfinalStringROW_KEY="retacn";

/**

*

*@paramargs

*@throwsIOException

*/

publicstaticvoidmain(String[]args)throwsIOException{

Configurationconf=newConfiguration();

conf.set("hbase.rootdir","hdfs://localhost:9000/hbase");

conf.set("hbase.zookeeper.quorum","127.0.0.1");

conf.set("hbase.zookeeper.property.clientPort","2181");

//用于创建删除表

finalHBaseAdminhbaseAdmin=newHBaseAdmin(conf);

//创建表

createTable(hbaseAdmin);

}

/**

*创建表

*@paramhbaseAdmin

*@throwsIOException

*/

privatestaticvoidcreateTable(finalHBaseAdminhbaseAdmin)throwsIOException{

if(!hbaseAdmin.isTableEnabled(TABLE_NAME)){

HTableDescriptortableDescriptor=newHTableDescriptor(TABLE_NAME);

HColumnDescriptorfamily=newHColumnDescriptor(FAMILY_NAME);

tableDescriptor.addFamily(family);

hbaseAdmin.createTable(tableDescriptor);

}

}

}

创建完成查看结果如下:

hbase(main):001:0>list

TABLE

employee

users

2row(s)in0.7510seconds

hbase(main):002:0>describe'employee'

DESCRIPTIONENABLED

{NAME=>'employee',FAMILIES=>[{NAME=>'id',BLtrue

OOMFILTER=>'NONE',REPLICATION_SCOPE=>'0',COMP

RESSION=>'NONE',VERSIONS=>'3',TTL=>'2147483

647',BLOCKSIZE=>'65536',IN_MEMORY=>'false',B

LOCKCACHE=>'true'}]}

添加一条记录

/**

*Copyright(C)2015

*

*FileName:HbaseApiTest.java

*

*Author:<ahref="mailto:zhenhuayue@sina.com">Retacn</a>

*

*CreateTime:2015-12-4

*/

//PackageInformation

packagecn.yue.hbase;

importjava.io.IOException;

importorg.apache.hadoop.conf.Configuration;

importorg.apache.hadoop.hbase.HColumnDescriptor;

importorg.apache.hadoop.hbase.HTableDescriptor;

importorg.apache.hadoop.hbase.MasterNotRunningException;

importorg.apache.hadoop.hbase.ZooKeeperConnectionException;

importorg.apache.hadoop.hbase.client.HBaseAdmin;

importorg.apache.hadoop.hbase.client.HTable;

importorg.apache.hadoop.hbase.client.Put;

/****

*测试hbasejavaAPI

*

*@version

*

*@Description:

*

*@author<ahref="mailto:zhenhuayue@sina.com">Retacn</a>

*

*@since2015-12-4

*

*/

publicclassHbaseApiTest{

publicstaticfinalStringTABLE_NAME="employee";

publicstaticfinalStringFAMILY_NAME="id";

publicstaticfinalStringROW_KEY="retacn";

/**

*

*@paramargs

*@throwsIOException

*/

publicstaticvoidmain(String[]args)throwsIOException{

Configurationconf=newConfiguration();

conf.set("hbase.rootdir","hdfs://localhost:9000/hbase");

conf.set("hbase.zookeeper.quorum","127.0.0.1");

conf.set("hbase.zookeeper.property.clientPort","2181");

//用于创建删除表

finalHBaseAdminhbaseAdmin=newHBaseAdmin(conf);

//创建表

createTable(hbaseAdmin);

//添加一条记录

finalHTablehTable=newHTable(conf,TABLE_NAME);

Putput=newPut(ROW_KEY.getBytes());

put.add(FAMILY_NAME.getBytes(),"age".getBytes(),"32".getBytes());

hTable.put(put);

//删除表

//hbaseAdmin.deleteTable(TABLE_NAME);

}

/**

*创建表

*@paramhbaseAdmin

*@throwsIOException

*/

privatestaticvoidcreateTable(finalHBaseAdminhbaseAdmin)throwsIOException{

if(!hbaseAdmin.isTableEnabled(TABLE_NAME)){

HTableDescriptortableDescriptor=newHTableDescriptor(TABLE_NAME);

HColumnDescriptorfamily=newHColumnDescriptor(FAMILY_NAME);

tableDescriptor.addFamily(family);

hbaseAdmin.createTable(tableDescriptor);

}

}

}

添加完成后查看结果如下:

hbase(main):003:0>get'employee','retacn'

COLUMNCELL

id:agetimestamp=1449369554428,value=32

如果出现以下错误信息,需要添加配置以下

15/12/0610:37:31ERRORzookeeper.ZKConfig:noclientPortfoundinzoo.cfg

示例代码如下:

conf.set("hbase.zookeeper.property.clientPort","2181");

查询一条记录,示例代码如下:

/**

*查询一条记录

*

*@paramhTable

*@throwsIOException

*/

privatestaticvoidgetRecord(finalHTablehTable)throwsIOException{

Getget=newGet(ROW_KEY.getBytes());

finalResultresult=hTable.get(get);

finalbyte[]value=result.getValue(FAMILY_NAME.getBytes(),"age".getBytes());

System.out.println(result+"\t"+newString(value));

}

查询结果如下:

keyvalues={retacn/id:age/1449369554428/Put/vlen=2} 32

查询所有记录,示例代码如下:

/**

*查询所有记录

*

*@paramhTable

*@throwsIOException

*/

privatestaticvoidgetAll(finalHTablehTable)throwsIOException{

Scanscan=newScan();

finalResultScannerscanner=hTable.getScanner(scan);

for(Resultresult:scanner){

finalbyte[]value=result.getValue(FAMILY_NAME.getBytes(),"age".getBytes());

System.out.println(result+"\t"+newString(value));

}

}

查询结果如下:

keyvalues={retacn/id:age/1449369554428/Put/vlen=2} 32

Hbase(nosql)体系结构有基本操作 笔记八相关推荐

  1. ReactJS学习笔记八:动画

    ReactJS学习笔记八:动画 分类: react学习笔记 javascript2015-07-06 20:27 321人阅读 评论(0) 收藏 举报 react动画 目录(?)[+] 这里只讨论Re ...

  2. 【opencv学习笔记八】创建TrackBar轨迹条

    createTrackbar这个函数我们以后会经常用到,它创建一个可以调整数值的轨迹条,并将轨迹条附加到指定的窗口上,使用起来很方便.首先大家要记住,它往往会和一个回调函数配合起来使用.先看下他的函数 ...

  3. 吴恩达《机器学习》学习笔记八——逻辑回归(多分类)代码

    吴恩达<机器学习>笔记八--逻辑回归(多分类)代码 导入模块及加载数据 sigmoid函数与假设函数 代价函数 梯度下降 一对多分类 预测验证 课程链接:https://www.bilib ...

  4. python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑

    python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑 许多人在安装Python第三方库的时候, 经常会为一个问题困扰:到底应该下载什么格式的文件? 当我们点开下载页时, 一 ...

  5. ROS学习笔记八:创建ROS msg和srv

    ROS学习笔记八:创建ROS msg和srv 本节主要讲述了如何创建和建立ROS msg和srv,同时使用命令行工具rosmsg.rossrv和roscp. msg和srv简介 msg:描述ROS m ...

  6. 《MFC游戏开发》笔记八 游戏特效的实现(二):粒子系统

    本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9360993 作者:七十一雾央 新浪微博:http:// ...

  7. Halcon 学习笔记八:颜色识别

    Halcon 学习笔记八:颜色识别 一.图像处理需要的知识 二.图像处理的预处理和分割过程 二.颜色识别的方法 三.例子一 四.例子二 五.例子三 一.图像处理需要的知识 1.图像处理基础(rgb(h ...

  8. ZooKeeper学习笔记(八):ZooKeeper集群写数据原理

    写数据原理 写流程直接请求发送给Leader节点 这里假设集群中有三个zookeeper服务端 ACK (Acknowledge character)即是确认字符,在数据通信中,接收站发给发送站的一种 ...

  9. TCPIP详解Protocol 读书笔记(八) Traceroute程序

    TCP/IP详解:Protocol 读书笔记(八) Chapter8 Traceroute程序 文章目录 TCP/IP详解:Protocol 读书笔记(八) Chapter8 Traceroute程序 ...

最新文章

  1. Cocos2d-x项目开发时在Eclipse中配置环境编译C++
  2. UA OPTI570 量子力学29 摄动理论简介
  3. 使用ASP.NET Core 3.x 构建 RESTful API - 4.1 面向外部的Model
  4. 如何判断对象是不是出轨了?
  5. 收藏夹库计算机网络的关系,云南省计算机一级考试题库 计算机网络及基础.pdf...
  6. android中sharedPreferences的用法
  7. 启动Samples-Web-Start Web Server时,提示Could not open port 1080
  8. DPM2010 粒度恢复个人用户邮箱
  9. 服务器共享文档只读不可复制,局域网共享文件只读不能复制的设置方法
  10. Auto.js实现自动删除朋友圈照片
  11. 磁盘计算机管理扩大,电脑磁盘存储空间怎么增大
  12. centos 7 定时备份文件夹,增量文件
  13. 爬虫-基于requests模块xpath解析爬取豆瓣即将上映电影目录
  14. 网站被降权的原因分析
  15. 【Appium】最新版appium-inspector的安装
  16. HP DL380 G9 配置RAID
  17. Flutter MD5加密工具类
  18. 名编辑电子杂志大师教程 | 名编辑制作电子杂志时只能添加PDF的页面吗?
  19. 微信小程序从零开始开发步骤(二)创建小程序页面
  20. maple绘制地图图形--MapleSoft可视化

热门文章

  1. Coding and Paper Letter(三十)
  2. 四川省计算机应用教材,四川省电子科技大学计算机应用技术
  3. 京东android面试题2019,2019京东的面试题(牛客)
  4. 金山 V8 终端安全系统 默认弱口令漏洞
  5. 北京中亦安图科技股份有限公司企业介绍_脑图
  6. Python MyQR 生成不一样的二维码
  7. uniapp保存图片_uni-app项目保存图片到相册
  8. 博尔德大学计算机专业本科,2020美国大学计算机专业本科排名
  9. 思科下一代模拟器EVE-NG安装
  10. 创业的路,每一天都是劫后余生,怎么走?