- 浏览: 83666 次
- 性别:
- 来自: 郑州
文章分类
- 全部博客 (69)
- java (28)
- linux (6)
- redis (4)
- C# (3)
- 架构 (10)
- java ee (1)
- web (1)
- 操作系统 (7)
- sqlserver (1)
- android (2)
- Hadoop (12)
- 大数据 (21)
- 分布式 事务 消息 (10)
- linux mysql (1)
- 数据库 (3)
- 关于hadoop之bootshell使用 (2)
- 关于hbase---HTableInterfaceFactory (1)
- Spring (3)
- Hbase (5)
- jstorm (10)
- nginx (1)
- 分布式 (1)
- 区块链 (3)
- dubbo (1)
- nacos (1)
- 阿里 (1)
- go (3)
- 缓存 (1)
- memcached (1)
- ssdb (1)
- 源码 (1)
最新评论
-
想个可以用的名字:
楼主,能不能给发一份源代码,1300246542@qqq.co ...
spring+websocket的使用 -
wahahachuang5:
web实时推送技术使用越来越广泛,但是自己开发又太麻烦了,我觉 ...
websocket -
dalan_123:
前提是你用的是spring mvc 才需要加的1、在web.x ...
spring+websocket的使用 -
string2020:
CharacterEncodingFilter这个filter ...
spring+websocket的使用
关于hbase
一、客户端类
HTable 和 HTablePool: (1)、HTable用于一个线程创建一个HTable;最好只创建唯一一个HTable对象;因为每次创建HTable实例都需要付出代价;检查meta.表对应的表是否存在,是否可用以及其他
的一些操作;对性能的损耗不可忽视的;同时HBase所有的修改操作都是保证行级别的原子性;
(2)、若是需要多个HTable对象,则考虑使用HTablePool类;操作同一行的记录 最好使用batch操作;以减少单独操作该行的次数
二、CRUD操作
(1)、put方法
1、void put(Put put) throws IOException;将一个put或者存储在列表中的一组put作为输入参数
注:构建Put对象
Put(byte[] row);
Put(byte[] row, RowLock rowlock);
Put(byte[] row, long ts);
Put(byte[] long ts, RowLock rowLock);
参数说明:RowKey---》row 提供唯一的行键 RowLock--》行级锁 ts---》时间戳
2、byte转换类 Bytes
static byte[] toBytes(ByteBuffer bb);
static byte[] toBytes(String s);
static byte[] toBytes(boolean b);
static byte[] toBytes(long val);
static byte[] toBytes(float f);
static byte[] toBytes(int val);
3、put的add方法
Put add(byte[] family, byte[] qualifier,byte[] value);
Put add(byte[] family,byte[] qualifier,long ts, byte[] value);
Put add(KeyValue kv) throws IOException;
可以通过行键+列族+列限定符+时间戳定位具体的内容
关于ts参数,在通过add进行数据添加时,不指定ts参数内容时,则使用构造函数的ts对应的内容;若是在
构造实例也没有指定ts参数,则有region机器指定
(1)、KeyValue = 行键+列族+列限定符+时间戳
List<KeyValue> get(byte[] family,byte[] qualifier);
Map<byte[],List<KeyValue>> getFamilyMap();
(2)、检查单元格是否存在
boolean has(byte[] family,byte[] qualifier);
boolean has(byte[] family,byte[] qualifier, long ts);
boolean has(byte[] family,byte[] qualifier,byte[] value);
boolean has(byte[] family,byte[] qualifier,long ts,byte[]);
4、HBase使用
// 1、创建所需配置
Configuration conf = HBaseConfiguration.create();
// 2、实例化客户端
HTable table = new HTable(conf,"table name");
// 3、创建put存放数据记录
// 创建row key
Put put = new Put(Bytes.toBytes("row_key"));
// 创建column family
put.add(Bytes.toBytes("colfam1"),Bytes.toBytes("qual1"));
put.add(Bytes.toBytes("colfam2"),Bytes.toBytes("qual2"));
// 4、添加记录到指定的表
table.put(put);
以上代码Configuration对应HBase的hbase-site.xml文件(默认情况下程序会从classpath下直接尝试读取
hbase-default.xml 和 hbase-site.xml)再程序获取到Configuration一般是默认+用户自定义参数合并之后的结果
5、说明
(a)、关于hbase中的时间戳
在hbase中有一个特殊的功能,同一个列单元格(特定类的值)可以存在多个版本。就是通过使用时间戳按照降序来存储的,单位为毫秒;该参数可以通过客户端api进行指定,也可以忽略
让服务器端来完成。主要根据实际情况来完成的。这样获取指定的数据时,根据执行的参数可以获取多个。默认情况下只显示最新的那个版本
(b)、RowLock类
在构造Put实例时会存在一个RowLock参数,特别在某一行记录需要频繁修改时,可以在客户端创建RowLock实例防止用户的修改该行
(c)、KeyValue类
数据和坐标都是以byte[]形式存储;目的主要是为了允许存储任意类型的数据,并有效存储所需的字节,保证最少的
内部结构开销;并且每一个字节数据组都有一个offset和length参数,允许用户提交存在的字节数据,并进行高效率的
字节操作。
KeyValue(byte[] row,int offset,int rlength, -------RowKey
byte[] family, int foffset,int flength, ----Column Family
byte[] qualifier , int qoffset,int qlength,--Qualifier Column
long timestamp,Type type, -- Version
byte[] value,int voffset, int vlength) -- Value
byte[] getRow()
byte[] getKey() 行---》行键 键---指的是单元格的坐标
三、客户端write buffer
由于每一个put操作就是RPC操作;将client数据传输到server后返回,只适合小量数据操作;因而减少RPC调用就需要限制往返时间(round-trip time);也即是
client发送一个request到server,然后server进行网络response的时间。同时消息大小也会影响rpc性能;尽量使用批量处理,减少请求次数。
(1)、开启客户端的写缓冲区
void setAutoFlush(boolean autoFlush);
boolean isAutoFlush();
默认客户端缓存区是禁用的,可以通过设定为false开启缓冲区;不过一旦开启客户端缓冲区,数据进行写入时,需要手动执行
void flushCommits() throws IOException;
同时客户端可以手动调整缓冲区;不过更多是通过hbase-site.xml
<property>
<name>hbase.client.write.buffer</name>
<value>20971520</value>
</property>
缓冲区刷写
1、显示刷写 flushCommits
2、隐式刷写 通过将当前的缓冲区大小和用户配置大小作比较;若是超出限制则会调用flushCommits方法;若是禁用则需通过setAutoFlush(true)来开启
注:close方法也会触发隐式刷写
一旦客户端关闭自动刷写;没有手动执行flushCommits那么通过put操作的内容就不会被提交到server端
ArrayList<Put> getWriteBuffer() 获取添加到缓冲区中的Put实例列表;该列表在HTable不是线程安全的;
不能在程序运行期终止程序,否则会导致尚未刷写的数据丢失,
(2)、put 列表
// 1、put list
List<Put> puts = new ArrayList<Put>();
// 2、create put
Put put1 = new Put(Bytes.toBytes("ROW1"));
put1.add(Bytes.toBytes("Column1"),Bytes.toBytes("qual1"),Bytes.toBytes("val1"));
// 3、add put to put list
puts.add(put1);
Put put2 = new Put(Bytes.toBytes("ROW2"));
put1.add(Bytes.toBytes("Column1"),Bytes.toBytes("qual1"),Bytes.toBytes("val2"));
puts.add(put2);
// 4、执行put操作
table.put(puts);
原子性操作 compare-and-set(CAS)
boolean checkAndPut(byte[] row, byte[] family, byte[] qualifier,byte[] value,Put put)
throws IOException;
五、Scan的使用
类似RDBMS的游标
(1)、创建Scan及应用
// 创建Scan
Scan scan = new Scan();
// 指定扫描范围
scan.addColumn(Bytes.toBytes("colfam1"),
Bytes.toBytes("col-5").addColumn(Bytes.toBytes("colfam1"))
Bytes.toBytes("col-33").setStartRow(Bytes.toBytes("row-11")).setStopRow(Bytes.toBytes("row-20"))
);
// 获取ResultScanner
ResultScanner scanner = table.getScanner(scan);
// 迭代变量scanner
for(Result result : scanner){
System.out.println(result);
}
// scanner关闭
scanner.close();
注:获取的内容进行匹配的时候都是按照字典顺序排序的
六、缓存与批量处理
1、设定scanner的缓存
hbase-site.xml配置
<property>
<name>hbase.client.scanner.caching</name>
<value>10</value>
</property>
程序配置
void setCaching(int caching);
int getCaching();
缓存针对的行级的操作
批量是面向列级的操作
RPC请求次数 = (行数 * 每行的列数) / Min(每行列数,批量大小) / 扫描缓存次数(额外加上打开和关闭scanner)
一、客户端类
HTable 和 HTablePool: (1)、HTable用于一个线程创建一个HTable;最好只创建唯一一个HTable对象;因为每次创建HTable实例都需要付出代价;检查meta.表对应的表是否存在,是否可用以及其他
的一些操作;对性能的损耗不可忽视的;同时HBase所有的修改操作都是保证行级别的原子性;
(2)、若是需要多个HTable对象,则考虑使用HTablePool类;操作同一行的记录 最好使用batch操作;以减少单独操作该行的次数
二、CRUD操作
(1)、put方法
1、void put(Put put) throws IOException;将一个put或者存储在列表中的一组put作为输入参数
注:构建Put对象
Put(byte[] row);
Put(byte[] row, RowLock rowlock);
Put(byte[] row, long ts);
Put(byte[] long ts, RowLock rowLock);
参数说明:RowKey---》row 提供唯一的行键 RowLock--》行级锁 ts---》时间戳
2、byte转换类 Bytes
static byte[] toBytes(ByteBuffer bb);
static byte[] toBytes(String s);
static byte[] toBytes(boolean b);
static byte[] toBytes(long val);
static byte[] toBytes(float f);
static byte[] toBytes(int val);
3、put的add方法
Put add(byte[] family, byte[] qualifier,byte[] value);
Put add(byte[] family,byte[] qualifier,long ts, byte[] value);
Put add(KeyValue kv) throws IOException;
可以通过行键+列族+列限定符+时间戳定位具体的内容
关于ts参数,在通过add进行数据添加时,不指定ts参数内容时,则使用构造函数的ts对应的内容;若是在
构造实例也没有指定ts参数,则有region机器指定
(1)、KeyValue = 行键+列族+列限定符+时间戳
List<KeyValue> get(byte[] family,byte[] qualifier);
Map<byte[],List<KeyValue>> getFamilyMap();
(2)、检查单元格是否存在
boolean has(byte[] family,byte[] qualifier);
boolean has(byte[] family,byte[] qualifier, long ts);
boolean has(byte[] family,byte[] qualifier,byte[] value);
boolean has(byte[] family,byte[] qualifier,long ts,byte[]);
4、HBase使用
// 1、创建所需配置
Configuration conf = HBaseConfiguration.create();
// 2、实例化客户端
HTable table = new HTable(conf,"table name");
// 3、创建put存放数据记录
// 创建row key
Put put = new Put(Bytes.toBytes("row_key"));
// 创建column family
put.add(Bytes.toBytes("colfam1"),Bytes.toBytes("qual1"));
put.add(Bytes.toBytes("colfam2"),Bytes.toBytes("qual2"));
// 4、添加记录到指定的表
table.put(put);
以上代码Configuration对应HBase的hbase-site.xml文件(默认情况下程序会从classpath下直接尝试读取
hbase-default.xml 和 hbase-site.xml)再程序获取到Configuration一般是默认+用户自定义参数合并之后的结果
5、说明
(a)、关于hbase中的时间戳
在hbase中有一个特殊的功能,同一个列单元格(特定类的值)可以存在多个版本。就是通过使用时间戳按照降序来存储的,单位为毫秒;该参数可以通过客户端api进行指定,也可以忽略
让服务器端来完成。主要根据实际情况来完成的。这样获取指定的数据时,根据执行的参数可以获取多个。默认情况下只显示最新的那个版本
(b)、RowLock类
在构造Put实例时会存在一个RowLock参数,特别在某一行记录需要频繁修改时,可以在客户端创建RowLock实例防止用户的修改该行
(c)、KeyValue类
数据和坐标都是以byte[]形式存储;目的主要是为了允许存储任意类型的数据,并有效存储所需的字节,保证最少的
内部结构开销;并且每一个字节数据组都有一个offset和length参数,允许用户提交存在的字节数据,并进行高效率的
字节操作。
KeyValue(byte[] row,int offset,int rlength, -------RowKey
byte[] family, int foffset,int flength, ----Column Family
byte[] qualifier , int qoffset,int qlength,--Qualifier Column
long timestamp,Type type, -- Version
byte[] value,int voffset, int vlength) -- Value
byte[] getRow()
byte[] getKey() 行---》行键 键---指的是单元格的坐标
三、客户端write buffer
由于每一个put操作就是RPC操作;将client数据传输到server后返回,只适合小量数据操作;因而减少RPC调用就需要限制往返时间(round-trip time);也即是
client发送一个request到server,然后server进行网络response的时间。同时消息大小也会影响rpc性能;尽量使用批量处理,减少请求次数。
(1)、开启客户端的写缓冲区
void setAutoFlush(boolean autoFlush);
boolean isAutoFlush();
默认客户端缓存区是禁用的,可以通过设定为false开启缓冲区;不过一旦开启客户端缓冲区,数据进行写入时,需要手动执行
void flushCommits() throws IOException;
同时客户端可以手动调整缓冲区;不过更多是通过hbase-site.xml
<property>
<name>hbase.client.write.buffer</name>
<value>20971520</value>
</property>
缓冲区刷写
1、显示刷写 flushCommits
2、隐式刷写 通过将当前的缓冲区大小和用户配置大小作比较;若是超出限制则会调用flushCommits方法;若是禁用则需通过setAutoFlush(true)来开启
注:close方法也会触发隐式刷写
一旦客户端关闭自动刷写;没有手动执行flushCommits那么通过put操作的内容就不会被提交到server端
ArrayList<Put> getWriteBuffer() 获取添加到缓冲区中的Put实例列表;该列表在HTable不是线程安全的;
不能在程序运行期终止程序,否则会导致尚未刷写的数据丢失,
(2)、put 列表
// 1、put list
List<Put> puts = new ArrayList<Put>();
// 2、create put
Put put1 = new Put(Bytes.toBytes("ROW1"));
put1.add(Bytes.toBytes("Column1"),Bytes.toBytes("qual1"),Bytes.toBytes("val1"));
// 3、add put to put list
puts.add(put1);
Put put2 = new Put(Bytes.toBytes("ROW2"));
put1.add(Bytes.toBytes("Column1"),Bytes.toBytes("qual1"),Bytes.toBytes("val2"));
puts.add(put2);
// 4、执行put操作
table.put(puts);
原子性操作 compare-and-set(CAS)
boolean checkAndPut(byte[] row, byte[] family, byte[] qualifier,byte[] value,Put put)
throws IOException;
五、Scan的使用
类似RDBMS的游标
(1)、创建Scan及应用
// 创建Scan
Scan scan = new Scan();
// 指定扫描范围
scan.addColumn(Bytes.toBytes("colfam1"),
Bytes.toBytes("col-5").addColumn(Bytes.toBytes("colfam1"))
Bytes.toBytes("col-33").setStartRow(Bytes.toBytes("row-11")).setStopRow(Bytes.toBytes("row-20"))
);
// 获取ResultScanner
ResultScanner scanner = table.getScanner(scan);
// 迭代变量scanner
for(Result result : scanner){
System.out.println(result);
}
// scanner关闭
scanner.close();
注:获取的内容进行匹配的时候都是按照字典顺序排序的
六、缓存与批量处理
1、设定scanner的缓存
hbase-site.xml配置
<property>
<name>hbase.client.scanner.caching</name>
<value>10</value>
</property>
程序配置
void setCaching(int caching);
int getCaching();
缓存针对的行级的操作
批量是面向列级的操作
RPC请求次数 = (行数 * 每行的列数) / Min(每行列数,批量大小) / 扫描缓存次数(额外加上打开和关闭scanner)
发表评论
-
nacos单机源码调试
2018-12-17 11:35 1167首先从github上获取对应的源码Nacos源码git cl ... -
jstorm源码之TransactionalState
2016-03-21 19:31 841一、作用 主要是通过结合zookeeper,在zookee ... -
jstorm源码之RotatingTransactionalState
2016-03-21 19:29 525一、作用 构建一个Rotationg transacti ... -
jstorm源码之PartitionedTridentSpoutExecutor
2016-03-21 19:28 842一、作用 Partition Spout对应的exec ... -
jstorm源码之 RichSpoutBatchExecutor
2016-03-21 19:28 0一、作用 RichSpoutBatchExecutor是IRi ... -
jstorm源码之RotatingMap
2016-03-21 19:27 831一、作用 基于LinkedList + HashM ... -
jstorm源码之 RichSpoutBatchExecutor
2016-03-21 19:24 562一、作用 RichSpoutBatchExecutor是IRi ... -
jstorm源码之TridentTopology
2016-03-16 18:12 2315在jstorm中对应TridentTopology的源码如下, ... -
jstorm操作命令
2016-03-15 18:04 2680启动ZOOPKEEPER zkServer.sh start ... -
JStorm之Supervisor简介
2016-03-15 18:02 1180一、简介Supervisor是JStorm中的工作节点,类似 ... -
JStorm介绍
2016-03-15 17:56 880一、简介Storm是开源的 ... -
mycat的使用---sqlserver和mysql
2016-01-11 14:33 8544数据库中间件mycat的使 ... -
HBase系列四--计数器
2015-12-02 10:58 1937一、计数器 在hbase中,由于针对同一行的记录进行 ... -
HBase系列三
2015-12-01 16:51 2257关于spring-hbase中scan + filter的操作 ... -
spring hadoop系列(六)---HbaseSystemException
2015-11-30 09:13 408一、源码 /** * HBase Data Access e ... -
spring hadoop系列(五)---spring hadoop hbase之HbaseSynchronizationManager
2015-11-27 18:16 840一、源码如下 /** * Synchronization m ... -
spring hadoop 系列(三)--spring hadoop hbase HbaseConfigurationFactoryBean
2015-11-27 16:28 1496一、源码分析 /** * 设定Hbase指定Configu ... -
spring hadoop 系列(二)
2015-11-27 15:26 556一、源码分析 /** * * HbaseAccesso ... -
spring hadoop之batch处理(二)
2015-11-24 18:10 1468一、测试 public class MrBatchApp { ... -
spring hadoop之mapreduce batch
2015-11-24 15:51 581一、测试 // 定义hadoop configuration ...
相关推荐
一、 HBase技术介绍 HBase简介 HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。 HBase是Google Bigtable的开源...
2008.1 Hadoop become Apache top-level project and Hbase becomes subproject 2008.10 Hbase 0.18,0.19 released hbase是bigtable的开源山寨版本。是建立的hdfs之上,提供高可靠性、高性能、列存储、可伸缩、实时...
Apache Phoenix会将用户编写的sql查询编译为一系列的scan操作,最终产生通用的JDBC结果集返回给客户端。数据表的元数据存储在HBase的表中被会标记版本号,所以进行查询的时候会自动选择正确的schema。直接使用HBase...
该文档包含了HBase里面一系列常用的shell命令,包括增删改查等操作,还有读数据模型的概括,为了方便童鞋们查找,整理成一个文档供大家查阅。
1. HBase中的所有数据文件都存储在Hadoop HDFS文件系统上,主要包括上述提出的两种文件类 2. HRegionServer内部管理了一系列HReg
文件夹hbase-put包含一个Maven项目,该项目创建一个名为'user'的HBase表,并带有单个列系列'cf'。 它将进一步在限定符“ rec”下将4条Avro记录加载到该表/列系列中。 请按照以下说明进行构建和执行: $ cd hbase-...
本次课程适合HBase入门的学员,课程首先介绍了什么是HBase ,HBase安装以及Sell入门,其次通过介绍独立zk、JavaAPI、区域操作、HBase常用功能、过滤器等一系列功能操作进行详细解析,帮助学员更好的理解,最后以HA...
HBase-代码-示例在 HBase 上使用 HBase 和 Phoenix 的一系列演示使用 HBase 代码示例有四个包支持示例我倾向于从我的 IDE 运行代码,但您可以将这些包打包或从其他工具调用HBase 包HBaseEngine 调用多线程加载器。...
管理系统系列--HBaseManager,是一款强大的HBase表管理系统,目前系统集成的功能有,命名空间管理,表管
也算是Scan系列的其中一篇吧,后面对于Scan还会有一篇结合HDFS分析HBase数据读取在HDFS层面是怎么一个流程,敬请期待。HBase中Scan从大的层面来看主要有三种常见用法:ScanAPI、TableScanMR以及SnapshotScanMR
通过Sqoop+Hive+Hbase+Kettle+R一系列软件的简单实用和操作来帮助读者理解这些软件的用法
BigData_AutomaticDeploy大数据自动化部署,包括自动化部署hadoop、hive、hbase、spark、storm等等一系列组件自动化部署参考资料:Ambari——大数据平台的搭建、维护利器:
基本操作:针对每种数据结构,定义了一系列基本的操作,包括但不限于插入、删除、查找、更新、遍历等,并分析这些操作的时间复杂度和空间复杂度。 算法: 算法设计:研究如何将解决问题的步骤形式化为一系列指令,...
每周日更新项目系列一、大数据项目面试系列优秀文章目录一、HadoopHDFS是如何设计架构的最新Hadoop面试题总结二、Flink十分钟入门Fink SQLFlink SQL——Table与DataStream之间的互转(超详细)Flink SQL Sink(文件、...
推荐,大数据面试必备系列资料合集,共8份。供大家学习。 1.HDFS原理篇 2.HDFS 调优篇 3.Yarn基础篇 4.Yarn资源调度器 5.HBase 原理篇 6.HBase 调优篇 7.ZooKeeper 最全面试总结 8.Docker 学习笔记
本人的开源框架,其中包含了一系列的开源组件,xxoo已经正式更名为xmlbean-converter成为zxl-framework的一部分。 common 框架的基础工具包。 mapper 提供配置化的bean映射工具 mapper-spring mapper与spring的整合 ...
CDH是Cloudera公司推出的基于稳定版本的Apache Hadoop构建,是Hadoop众多分支中的一种。 CDH提供了Hadoop的核心元素 - 可扩展的存储和分布式计算 - 以及基于Web的用户界面和重要的企业...还有一系列实用的组件等等。
hadoop集群的搭建hbase,hive,mysql一系列hadoop组件的安装!
SparkStreaming应用与实战系列包括以下六部分内容:1.背景与架构改造2.通过代码实现具体细节,并运行项目3.对Streaming监控的介绍以及解决实际问题4.对项目做压测与相关的优化5.Streaming持续优化之HBase6.管理...