《HBase in Action》 第二章节的学习总结 ---- HBase基本组成
准备工作:采用的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即可。
最新文章
- js三种方法添加image
- tornado 学习笔记7 RequestHandler功能分析
- Tomcat安装配置
- iOS 字符串转son &#160;json转字符串
- ompparticles.cpp:(.text+0x322): undefined reference to `omp_set_num_threads&#39;
- KBEngine简单RPG-Demo源码解析(1)
- pyhon-request之repsonse的常用方法reponse.text和reponse.content的区别
- Datatables一些常见的JS用法(多与表格有关)
- new和malloc
- [Swift-2019力扣杯春季初赛]2. 校园自行车分配
- 【转载】Python中的垃圾回收机制
- gcc库链接
- PAT A1110 Complete Binary Tree (25 分)——完全二叉树,字符串转数字
- rt3070无线网卡移植到开发板
- 理解TIME_WAIT
- 如何用dat批处理文件关闭某端口对应程序-Windows自动化命令
- Android中获取系统上安装的APP信息
- 观察者模式 - Java 实现1(使用JDK内置的Observer模式)
- 4027. [HEOI2015]兔子与樱花【树形DP】
- [深入浅出iOS库]之图形库CorePlot
热门文章
- Struts的线程安全
- [CTSC2018]假面(概率DP)
- 四. Java继承和多态3. 继承中的方法的覆盖和重载
- javascript与java的不同之处
- IntelliJ IDEA控制台Console里没有查找快捷键
- Visio中如何让重叠图形都显示
- ora01940 无法删除当前连接的用户
- nginx -- 启动, 重启, 关闭
- setSystemUiVisibility() 与 getSystemUiVisibility() 显示隐藏状态栏
- JsonArray对象