Hbase(nosql)体系结构有基本操作 笔记八
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)体系结构有基本操作 笔记八相关推荐
- ReactJS学习笔记八:动画
ReactJS学习笔记八:动画 分类: react学习笔记 javascript2015-07-06 20:27 321人阅读 评论(0) 收藏 举报 react动画 目录(?)[+] 这里只讨论Re ...
- 【opencv学习笔记八】创建TrackBar轨迹条
createTrackbar这个函数我们以后会经常用到,它创建一个可以调整数值的轨迹条,并将轨迹条附加到指定的窗口上,使用起来很方便.首先大家要记住,它往往会和一个回调函数配合起来使用.先看下他的函数 ...
- 吴恩达《机器学习》学习笔记八——逻辑回归(多分类)代码
吴恩达<机器学习>笔记八--逻辑回归(多分类)代码 导入模块及加载数据 sigmoid函数与假设函数 代价函数 梯度下降 一对多分类 预测验证 课程链接:https://www.bilib ...
- python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑
python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑 许多人在安装Python第三方库的时候, 经常会为一个问题困扰:到底应该下载什么格式的文件? 当我们点开下载页时, 一 ...
- ROS学习笔记八:创建ROS msg和srv
ROS学习笔记八:创建ROS msg和srv 本节主要讲述了如何创建和建立ROS msg和srv,同时使用命令行工具rosmsg.rossrv和roscp. msg和srv简介 msg:描述ROS m ...
- 《MFC游戏开发》笔记八 游戏特效的实现(二):粒子系统
本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9360993 作者:七十一雾央 新浪微博:http:// ...
- Halcon 学习笔记八:颜色识别
Halcon 学习笔记八:颜色识别 一.图像处理需要的知识 二.图像处理的预处理和分割过程 二.颜色识别的方法 三.例子一 四.例子二 五.例子三 一.图像处理需要的知识 1.图像处理基础(rgb(h ...
- ZooKeeper学习笔记(八):ZooKeeper集群写数据原理
写数据原理 写流程直接请求发送给Leader节点 这里假设集群中有三个zookeeper服务端 ACK (Acknowledge character)即是确认字符,在数据通信中,接收站发给发送站的一种 ...
- TCPIP详解Protocol 读书笔记(八) Traceroute程序
TCP/IP详解:Protocol 读书笔记(八) Chapter8 Traceroute程序 文章目录 TCP/IP详解:Protocol 读书笔记(八) Chapter8 Traceroute程序 ...
最新文章
- Cocos2d-x项目开发时在Eclipse中配置环境编译C++
- UA OPTI570 量子力学29 摄动理论简介
- 使用ASP.NET Core 3.x 构建 RESTful API - 4.1 面向外部的Model
- 如何判断对象是不是出轨了?
- 收藏夹库计算机网络的关系,云南省计算机一级考试题库 计算机网络及基础.pdf...
- android中sharedPreferences的用法
- 启动Samples-Web-Start Web Server时,提示Could not open port 1080
- DPM2010 粒度恢复个人用户邮箱
- 服务器共享文档只读不可复制,局域网共享文件只读不能复制的设置方法
- Auto.js实现自动删除朋友圈照片
- 磁盘计算机管理扩大,电脑磁盘存储空间怎么增大
- centos 7 定时备份文件夹,增量文件
- 爬虫-基于requests模块xpath解析爬取豆瓣即将上映电影目录
- 网站被降权的原因分析
- 【Appium】最新版appium-inspector的安装
- HP DL380 G9 配置RAID
- Flutter MD5加密工具类
- 名编辑电子杂志大师教程 | 名编辑制作电子杂志时只能添加PDF的页面吗?
- 微信小程序从零开始开发步骤(二)创建小程序页面
- maple绘制地图图形--MapleSoft可视化