开发者学堂课程【HBase入门教程:HBase MapReduce_3】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/397/detail/5098
HBase MapReduce_3
内容介绍
一、执行环境
二、回顾总结
一、执行环境
Mapreduce 跑完了,查看 wc 这个表有数据,二进制的原因
Hadoop hbase hello name world zookeeper 每一个单词作为 rowkey ,右边的 value 是对应的值,因为二进制的原因导致序列号和反序列号出问题,但是最终的结果体验出来。用本地方式运行的时候和提交服务器运行,代码没有区别,但是本地方式就出现问题,提交服务器来运行两种方式。重新写的 reduce 方法, map 处理起来是一样的,只不过 map 是从 HBase 读数据,map 具体如何写,需要看是什么逻辑,写的这个 reduce 输出的时候向 HBase 里写数据,不论读数据还是写数据, mapreduce 作为 hbase 的一个客户端,批量的写数据读数据这样的方法没有问题。
MR 执行环境有两种:本地测试环境,服务器环境
本地测试环境(windows) :
在 windows 的 nadoop 目录 b1n 目录有一个 winut1ils.exe
1.在 windows 下配置 hadoop 的环境变量
2.拷贝 debug 工具(winut1ls . exe)到 HADOOP_ HOME/bin
3.修改 hadoop 的源码,注意:确保项目的116需要真实安装的, dk 的11b
4.MR 调用的代码需要改变;
A.sre 不能有服务器的 nadoop 配置文件
B.在调用是使用:
Configuration config=new Configuration();conflg.set("fs.defaultFS", "hdfs://node7:8020");config.set("yarn.resourcemanager.hostname","node7");
服务器环境:
首先需要在 src 下放置服务器上的 hadoop 配置文件
在本地直接调用,执行过程在服务器上(真正企业运行环境)
a、把 MR 程序打包(jar),直接放到本地
b、修改 hadoop 的源码,注意:确保项目的 l1b 需要真实安装的 jdk 的 11b
C、增加一个属性:
config.set("mapred.jar","C:\\Users\\Administrator\\Desktop\\wc.jar");
d、本地执行 main 方法, servlet 调用 MR 。
直接在服务器上,使用命令的方式调用,执行过程也在服务器上
a、把 MR 程序打包(jar),传送到服务器上
b、通过: hadoop jar jar 路径类的全限定名
批量写
通过调用 HTable.put(Put) 方法可以将一个指定的 row key 记录写入 HBase,同样 HBase 提供了另一个方法;通过调用 HTable,put(List )方法可以将指定的 row key 列表,批量写入多行记录,这样做的好处是批量执行,只需要一次网络 I/O 开销,这对于对数据实时性要求高,网络传输 RTT 高的情景下可能带来明显的性能提升。
多线程并发写
在客户端开启多个HITable.写线程,每个写线程负责一个 HTable 对象的 flush 操作,这样结合定时 flush 和写 buffer ( writeBufferSize) ,可以既保证在数据量小的时候,数据可以在较短时间内被 flush (如1秒内) ,同时又保证在数据量大的时候,写 buffer 二满就及时进行 flush。
二、回顾总结
设计表
1、 Rowkey
根据业务 :查询的字段可以放在 rowkey 里,hbase 默认是一级索引,放在 rowkey 里查询效率更高,rowkey 的设计越短越好,HBase 里面的数据本身是有序的,像顶级部门的那个案例,放在第一位,在 HBase 里数据存储的时候,在 hbase 里是一段连续的区域。
时间降序:默认是按照字典排序,用一个大的值减去之后就可以改变之前的顺序。
rowkey 越小越好,rowkey 的设计是散列,好处就是将数据分散在不用的 run 上边,可以提高并发量,散列的规则讲了两种,不论哪种方式都需要根据业务来选择。
2、 列簇
设计粉丝表,关注表可以把粉丝用户,关注用户放在不同的列表下,以不用的 id 作为列名,用户名称作为值来存储。列族的个数一般是1-3个,超过2-3个之后性能支撑不好,原因是一个 star 对应一个列族,一个 star 触发 freshkatch,相邻的 star 也会触发,带来不必要的 io 操作,合并的时候一个 star 触发合并,相邻的也会触发合并,列的个数没有上限。
3、 solr 二级索引
当分析场景,用分析文档的数据,需要对文档做一个检索的时候,可以跟 solr 进行整合,solr 里存储索引这个值,指向 HBase 的 rokey。
4、 设计表
多对多关系 一对一关系
Protobuf:value 比较小,value 列多,每个列对应的值比较小,有大部分的存储空间来存储 rokey 这些信息,使用 protobuf 将列封装起来,从而减少存储空间。