总结三
- 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服务,供客户端访问