总结三

  • 1.Hbase读写流程
  • 写:put ‘ns:tbname’,‘rowkey’,‘cf:col’,value
  • 读:get/scan
  • 2.集成使用MapReduce
  • BulkLoad
  • 集成使用Hive
  • 集成使用Sqoop:测试成功
  • 集成使用Hue:测试成功


1.Hbase读写流程

写:put ‘ns:tbname’,‘rowkey’,‘cf:col’,value

  • step1:连接zookeeper找到meta表所在的regionserver的地址
  • step2:根据表名找到这张表对应的所有region的信息
  • 读取hbase:meta表
  • 每个region的范围
  • region所在regionserver的地址
  • step3:根据rowkey判断要写入哪个region
  • region的范围:前闭后开区间
  • [10 ~ 20)
  • [20 ~ 30)
  • step4:请求这个region所在的regionserver,根据列族来判断写入region的哪个store中
  • 为什么要做列族或者 Store的隔离
  • 为了避免所有的列都在一起,查询常用的那几列,每次都要对所有的列过滤
  • 使用列族以后
  • 经常用的列放在一个列族,存储在一个store中
  • 不经常使用的放在另外一个列族,存储在不同的store中
  • step5
  • 写入WAL
  • 写MemStore

读:get/scan

  • step1:连接zookeeper获取meta表的地址
  • step2:访问meta表,获取操作表的 元数据,得到表的region信息
  • step3:根据rowkey判断读取哪个region
  • step4:请求region所在的regionserver,根据列族判断读取哪个store
  • step5:
  • 先读memstore
  • 如果开启了缓存,就读memCache/BlockCache
  • 最后读HDFS

2.集成使用MapReduce

  • TableInputFormat
  • Scan读取整张表的 数据
  • 分片:一个region的数据作为一个分片
  • 类似于HDFS的一个块作为一个分片
  • KV:一个rowkey的数据对应一个KV
  • K:rowkey
  • ImmutableBytesWritable
  • V:rowkey对应的数据
  • Result
  • 开发规则
  • Driver类中必须使用工具类封装的方法初始化input和 map
  • TableMapReduceUtil.initTableMapperJob
  • Mapper类必须继承自TableMapper

  • TableOutputFormat
  • write(K,V)
  • 主要是将V进行输出,K可以是任意的
  • V:Put/Delete【Mutation】
  • 用表的对象执行了每个V的操作
  • 开发规则
  • Driver类中必须使用工具类封装的方法初始化reduce和 output
  • TableMapReduceUtil.initTableReuderJob
  • Reducer类必须继承自TableReducer

BulkLoad

  • 功能:解决大量数据并发写入Hbase,导致内存和磁盘 的负载过高,影响其他程序的运行
  • 过程
  • 将数据文件转换为Hbase中的HFILE文件
  • 将HFILE文件加载到Hbase的表中

集成使用Hive

  • 在Hive中写SQL来操作Hbase的表
  • 通过MapReduce实现关联
  • 在Hive中 创建Hbase的关联表
  • 数据存储在HBASE中
  • 操作时是对Hive中的关联表进行操作
  • 注意
  • Hive表与Hbase 表的映射
  • Hive中字段与Hbase中列的映射

集成使用Sqoop:测试成功

  • 只有导入
  • 没有导出

集成使用Hue:测试成功

  • Hbase可以启动一个 Thrift服务,供客户端访问