准备工作:采用的HBase版本是:CDH4.5,其中的Hadoop版本是:hadoop-2.0.0-cdh4.5.0;HBase版本是:hbase-0.94.6-cdh4.5.0;

Hbase的配置文件的最基本设置
conf/hbase-env.sh文件,需明确定义: export JAVA_HOME=/usr/local/jdk1.6.0_31
conf/hbase-site.xml文件,需明确定义:
<configuration>
<property>
    <name>hbase.rootdir</name>
    <value>hdfs://localhost:9000/hbase</value>   //表明Hbase的文件存储在哪里?这里需要提前在hadoop中创建hbase文件夹
</property>
<property>
    <name>hbase.cluster.distributed</name>  //表明使用完全分布的模式进行安装
    <value>true</value>
</property>
<property>
    <name>hbase.tmp.dir</name>
    <value>/home/hadoop/CDH4Dev/tmp</value>
</property>
<property>
    <name>hbase.zookeeper.property.clientPort</name>  //用于客户端与Zookeeper通信的端口设置,即客户端通过访问此端口来与Zookeeper通信
    <value>2181</value>
</property>
<property>
    <name>hbase.zookeeper.quorum</name>  //指定了用于协调HBase集群的ZooKeeper集群结点,必须配置奇数个结点。这里就一个,就是本机
    <value>localhost</value>
</property>
</configuration>

1.  Hbase提供用户的操作途径有多种,最基本的是 shell方式以及Java API。当然,今后用得更多的,应该是JAVA API。所以我的学习也是重点关注JAVA API方面
2.  基于Eclipse(推荐用Indigo版本,兼容性较好)编写Hbase程序,需要引入Hbase目录中的JAR包(位置:CDH4Dev/hbase/hbase-0.94.6-cdh4.5.0-security.jar 以及 CDH4Dev/hbase/lib目录中的jar包 )
3.  HBase中一个表的基本构成
     HBase是数据库,数据库自然由各个表构成。单个表的基本构成如下:
     TableName --- 表名
     Rowkey --- 行健
     Column Family --- 列族
     Column qualifier --- 列限定符,一个列族可以包括任意多个列限定符
     cell --- 单元
     time version ---- 时间版本  一个单元可以存储多个时间版本的具体数据
     Data  --- 最终真正存储的一个数据,Hbase中是以byte[]形式记录数据的
     此书中对HBase表结构最形象的定义,就是2.5.1章节所写的:HBase的表,可以理解为一个多层嵌套的映射结构。即:
      MAP<RowKey, Map<ColumnFamily, Map<ColumnQualifier, Map<TimeVersion, Data>>>>  
4.  存储HBase数据的物理结构包括:
     写的时候,用到WAL和MemStore。其中,WAL是预写式日志,是存储在硬盘里的,一般基于HDFS文件系统;MemStore是记录在内存中的。这两个机制用于确保Hbase写数据的持久性(即不会由于服务器宕机等异常而导致数据丢失)
     真正存储数据的是HFile。HFile是基于列族的(即一个列族的数据可以存储在1个或者多个HFile中;但一个HFile不能存储多个列族的数据)。HFile同样位于硬盘中,基于HDFS文件系统。HFile的物理存放形式是一个Block的序列外加这些Block的索引。
     读取数据时,用到BlockCache。BlockCache设计用来保存从HFile里读入内存的频繁访问的数据,避免硬盘读。每个列族都有自己的BlockCache。BlockCache中的Block是HBase从硬盘完成一次读取的数据单位。Block大小按照列族设定,默认是64KB。从HBase中读出一行,首先会检查MemStore等待修改的队列,然后检查BlockCache看包含该行的Block是否最近被访问过,最后访问硬盘上的对应HFile。
 
5.HBase程序的基本部件
   1.得到HBase的配置文件:Configuration conf = HBaseConfiguration.create(); --- 这样获得的配置内容,来自hbase-default.xml和hbase-site.xml
   2.控制HBase表的方法有多种:
      A.HTableInterface usersTable = new HTable(conf, "users");  ---- 基于HBase的配置信息(conf),创建一个名字叫users的表.HTable用于控制某个具体的表。
      B.HTablePool pool = new HTbalePool();
         HTableInterface usersTable = pool.getTable("users");
      C.HBaseAdmin admin = new HBaseAdmin(conf);   --- 这是对整个HBase的控制,不仅仅针对某个Table
   3.Put(代表表中的一行,用于写数据);Get(代表表的一行,用于读数据),Delete(代表表的一行,用于删除数据)
      注意:删除操作不是真正的删除数据,而是给要删除的数据打上一个删除标记;真正删除数据需要等到“大合并”。
   4.Scan(扫描,而且是以行健范围为入参的扫描),扫描范围的结果(包括起始键,但不包括停止键)存储在 ResultsScanner rs对象中。然后可以通过
      for(Result r : rs) 来依次获得每行的具体内容
   5.Filter(过滤器),是帮助Scan获得更精确扫描结果的利器。Filter是可以自定义的,而且其过滤的处理是在Server端进行的(从而降低从Server传递到Client的数据量,进而降低对网络IO的负担)

6. 要运行JAVA API编写的HBase代码,需要:

先启动hdfs(./start-dfs.sh),以及hbase(./start-hbase.sh);然后运行编写的Class即可。

《HBase in Action》 第二章节的学习总结 ---- HBase基本组成的更多相关文章

  1. 《Lucene in Action》(第二版) 第二章节的学习总结 ---- IndexWriter+Document+Field

    这一章节的学习,主要是学会如何创建索引,使用索引 一.创建索引 1.从原始文件中提取内容.这里的文件,可以是文本文件,也可以是二进制文件.文本文件(txt),lucene可以直接处理:而二进制文件(w ...

  2. 《HBase in Action》 第一章节的学习总结 ---- HBase是个啥

    1.HBase模仿了Google的BigTable,是一种开源的,面向列族的数据库.它基于行键(rowkey),列键(column key)和时间戳(TimeStamp)来建立索引.HBase是建立在 ...

  3. 《Lucene in Action第二版》学习总结---如何在Windows下编译luceneinAction2Edition源码包

    1. 下载此源码包,位置是: www.manning.com/hatcher3,得到:lia2e.tar.gz,然后解压缩得到目录:lia2e,为了以后能辨识,我将此目录改名为:luceneinAct ...

  4. 《Lucene in Action 第二版》第三章节的学习总结----IndexSearcher以及Term和QueryParser

    本章节告诉我们怎么用搜索.通过这章节的学习,虽然搜索的内部原理不清楚,但是至少应该学会简单的编写搜索程序了本章节,需要掌握如下几个主要API1.IndexSearcher类:搜索索引的门户,发起者. ...

  5. 《Lucene in Action》(第二版) 第一章节的学习总结 ---- 用最少的代码创建索引和搜索

    第一章节是介绍性质,但是通过这一章节的学习,我理解到如下概念: 1.Lucene由两部分组成:索引和搜索.索引是通过对原始数据的解析,形成索引的过程:而搜索则是针对用户输入的查找要求,从索引中找到匹配 ...

  6. 《TomCat与Java Web开发技术详解》(第二版) 第四章节的学习总结--常用Servlet API

    要开发Servlet,自然要掌握常用的servlet的相关API.通过此章节的学习,了解到如下常用API 1.Servlet接口--->GenericServlet抽象类(实现Servlet接口 ...

  7. 0.HBase In Action(HBase实战,翻译)

    1.HBase In Action 第一章-HBase简介(后续翻译中) 2.HBase In Action 第一章-HBase简介(1.1数据管理系统:快速学习) 3.HBase In Action ...

  8. 最近学习了HBase

    HBase是什么 最近学习了HBase,正常来说写这篇文章,应该从DB有什么缺点,HBase如何弥补DB的缺点开始讲会更有体感,但是本文这些暂时不讲,只讲HBase,把HBase相关原理和使用讲清楚, ...

  9. 4.HBase In Action 第一章-HBase简介(1.1.2 数据创新)

    As we now know, many prominent internet companies, most notably Google, Amazon, Yahoo!, and Facebook ...

随机推荐

  1. HDOJ 3516 Tree Construction 四边形优化dp

    原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=3516 题意: 大概就是给你个下凸包的左侧,然后让你用平行于坐标轴的线段构造一棵树,并且这棵树的总曼哈顿 ...

  2. Linux基本命令参数

    简单复习一下基本命令的参数 1.mkdir 两个参数: -p 递归创建该目录 mkdir -p /user/hadoop/test/raid -m 指定权限   mkdir -m 777 /raid ...

  3. tld自定义标签系列--使用body-content的作用--比较有用

    body-content的值有下面4种: <xsd:enumeration value="tagdependent"/> <xsd:enumeration val ...

  4. 六. 异常处理4.try和catch的使用

    尽管由Java运行时系统提供的默认异常处理程序对于调试是很有用的,但通常你希望自己处理异常.这样做有两个好处.第一,它允许你修正错误.第二,它防止程序自动终止.大多数用户对于在程序终止运行和在无论何时 ...

  5. [Bug] 未找到导入的项目“C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\WebApplications\Microsoft.WebApplication.targets”

    This is very easy to do. Open your build definition and go to the "Process" page. Then und ...

  6. 解读TDD的五大误区

    所谓TDD简单地说就是以下两个步骤:确保所有的需求都能被照顾到:在代码不断增加和重构的过程中,可以检查所有的功能是否正确.本文我们一起来看下关于TDD的五大误区. TDD(全称Test Driven ...

  7. 一张图解释RxJava中的线程控制

    如果调用链中包含多个subscribeOn和observeOn,会是什么情况? 这实际上是一个至关重要的问题,因为在任何情况下,我们都应该弄清楚我们写的每一行代码到底是运行在哪个线程上.这个问题绝对不 ...

  8. mysql 将多个查询结果合并成一行

    mysql中的多行查询结果合并成一个 SELECT GROUP_CONCAT(md.data1) FROM DATA md,contacts cc WHERE md.conskey=cc.id AND ...

  9. ylb: 数据库操作方法基础

    ylbtech-SQL Server:SQL Server-数据库操作方法基础 数据库操作方法基础. ylb: 数据库操作方法基础 返回顶部 ----------试图操作(view)--------- ...

  10. Python 面向对象一(转载)

    一.前言 1.面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 2.类 是一个模板,模板中包装了多个“函数”供使用(可以讲多函数中公用的变量封装到对象中) 3.对象,根据模板创建 ...