设为首页 收藏本站
查看: 853|回复: 0

[经验分享] Hadoop之HBase学习笔记

[复制链接]

尚未签到

发表于 2016-12-8 08:22:48 | 显示全部楼层 |阅读模式
  本文主要是一些具体的java代码以及少量的概念描述,至于具体的概念可以详细百度
1、namespace
   HBase namespace特性是对表资源进行隔离的一种技术,隔离技术决定了HBase能否实现资源统一化管理的关键,提高了整体的安全性。
 
   *配额管理:限制一个namespace使用的资源,如:region、table
   *命名空间安全管理:提供了多租户安全管理
   *Region服务器组:保证了数据隔离性,可以将一个namespace或者table固定在一个regionServer上

 
1.1 预定义的namespace
      *hbase 系统命名空间,包含hbase的内部表
      *default 默认命名空间

 
1.2 namespace的DDL操作
1.2.1 创建:create_namespace 'zhw 

hbase(main):004:0> create_namespace 'zhw'
0 row(s) in 0.1210 seconds
  1.2.2 删除:drop_namespace 'zhw'

hbase(main):006:0> drop_namespace 'zhw'
0 row(s) in 0.1000 seconds
  1.2.3 查看:list_namespace

hbase(main):009:0> list_namespace
NAMESPACE
default
hbase
zhw
3 row(s) in 0.0770 seconds
  1.2.4 权限:

grant <user> <permissions>[ <table>[ <column family>[ <column qualifier> ] ] ]
revoke <user> <permissions> [ <table> [ <column family> [ <column qualifier> ] ] ]
user_permission <table>
   *注意*权限需要进行启用:hbase-site.xml

<property>
<name>hbase.security.authorization</name>
<value>true</value>
</property>
<property>
<name>hbase.coprocessor.master.classes</name>
<value>
org.apache.hadoop.hbase.security.access.AccessController
</value>
</property>
<property>
<name>hbase.coprocessor.region.classes</name>
<value>
org.apache.hadoop.hbase.security.token.TokenProvider,org.apache.hadoop.hbase.security.access.AccessController
</value>
</property>

  2、具体代码:
  2.1 全局配置(此文代码均基于这个配置的),由于使用Zookeeper,所以只需要两个参数就ok:

Configuration config=new Configuration();
config.set("hbase.zookeeper.quorum", "10.8.177.204");
config.set("hbase.zookeeper.property.clientPort", "2181");
HBaseAdmin admin = new HBaseAdmin(config);
  2.2创建表

HTableDescriptor tDesc=new HTableDescriptor(TableName.valueOf(tableName));
HColumnDescriptor cDesc=new HColumnDescriptor(family);
tDesc.addFamily(cDesc);
admin.createTable(tabDesc);
admin.close();
   常用:

    设置region的store文件最大值:tDesc.setMaxFileSize(512);默认256M
设置region内存中的最大值:tDesc.setMemStoreFlushSize(512)默认64M
设置列族的数据保存时长:cDesc.setTimeToLive(5184000);单位秒
设置列族数据保存再内存中:cDsc.setInMemory(true);可以提高响应速度
设置列族数据保存的版本:setMaxVersions(10)  setMinVersions(5)
WAL日志级别:枚举类Durability
HTableDescriptor|Delete|Put对象.setDurability(Durability.FSYNC_WAL );//安全性高,影响性能
Durability.USE_DEFAULT:use HBase's global default value (SYNC_WAL)
  2.3 删除表

admin.disableTable(tableName);
admin.deleteTable(tableName);
  2.4 修改表

        admin.disableTable(table.getTableName());
for(String rmFam:removeFamilies){
table.removeFamily(Bytes.toBytes(rmFam));
System.err.println(" - deleted family " + rmFam);
}
for(HColumnDescriptor family:addCols){
table.addFamily(family);
System.err.println(" - added family " + family.getNameAsString());
}
admin.modifyTable(table.getTableName(),table);
admin.enableTable(table.getTableName());
  2.5 插入数据

public static void insert(String family,String[] qualifiers,String[] values,Put put){
for(int i=0;i<qualifiers.length;i++){
put.add(Bytes.toBytes(family),Bytes.toBytes(qualifiers),Bytes.toBytes(values));
}
}
//一个Put为一条记录
Put p1=new Put(Bytes.toBytes(sid++));
insert("name",new String[]{"firstName","lastName"},new String[]{"z","hw"},p1);
insert("age",new String[]{"chinaAge","otherAge"},new String[]{"23","24"},p1);
insert("sex",new String[]{"sex"},new String[]{"man"},p1);
Put p2=new Put(Bytes.toBytes(sid++));
insert("name",new String[]{"firstName","lastName"},new String[]{"zh","jy"},p2);
insert("age",new String[]{"chinaAge","otherAge"},new String[]{"22","23"},p2);
insert("sex",new String[]{"sex"},new String[]{"female"},p2);
//......
System.out.println("- ready insert ,count:" + puts.size());
HTable table=new HTable(config,tableName);
table.put(puts);
table.close();
System.out.println(" - insert success");
   
  3、查询数据
  3.1 按RowKey查询,核心类:Get

Get get=new Get(Bytes.toBytes(id));指定RowKey
get.addFamily(Bytes.toBytes(family));//指定列族 可选
get.addColumn(Bytes.toBytes(family),Bytes.toBytes(qualifier));//指定列
get.setTimeStamp(1444810207364L);//指定时间戳
get.setMaxVersions() ;//获取所有版本
  取值:

Result Cell CellUtil  //取值处理
Bytes.toString(CellUtil.cloneFamily(cell)) //
  3.2 全表扫描,核心类:Scan

Scan scan=new Scan();
scan.addFamily(Bytes.toBytes(family));
scan.addColumn(Bytes.toBytes(family),Bytes.toBytes(col));
  取值:

ResultScanner rs=table.getScanner(scan);//后续上同
  4、过滤器
  4.1 过滤器比较器

RegexStringComparator
SubstringComparator
BinaryComparator
BinaryPrefixComparator
NullComparator
BitComparator
  4.2 常用过滤器

SingleColumnValueFilter
FamilyFilter
QualifierFilter
RowFilter
PageFilter
... ...
  4.3 过滤器包装:

SkipFilter//类似于对过滤器的非操作
FilterList//可以进行过滤器的【与|或】操作
 
5、异常:
代码中出现了Retrying connec to server...
多半是HBase的某个HRegionServer有问题了.
 
6、以上代码亲测全部通过,具体代码见附件.

7、参考资料


http://blog.csdn.net/opensure/article/details/46470969
http://blog.csdn.net/wulantian/article/details/41011297
http://www.cloudera.com/content/cloudera/en/documentation/core/v5-2-x/topics/cdh_sg_hbase_authorization.html
http://blog.csdn.net/u010967382/article/details/37653177
http://hbase.apache.org/0.94/book.html
 

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-311172-1-1.html 上篇帖子: 初学Hadoop(四)-HDFS HA 下篇帖子: hadoop 中基于 Bloom filter的联结
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表