一、HBase整合MapReduce环境搭建
1. 搭建步骤
1)在etc/hadoop目录中创建hbase-site.xml的软连接。在真正的集群环境中的时候,hadoop运行mapreduce会通过该文件查找具体的hbase环境信息。
ln -s /opt/modules/cdh/hbase-0.98.6-cdh5.3.6/conf/hbase-site.xml /opt/modules/cdh/hadoop-2.5.0-cdh5.3.6/etc/hadoop/hbase-site.xml
2)将hbase需要的jar包添加到hadoop运行环境中,其中hbase需要的jar就是lib文件夹下面的所有*.jar文件。
在hadoop中添加其他第三方的jar有多种方式,比如添加hbase的jar到hadoop环境中。这里介绍三种:
(1)第一种:在hadoop-env.sh中添加HADOOP_CLASSPATH环境变量,value为hbase的lib文件夹下的所有jar文件。
(2)第二种:在系统级或者用户级修改*profile文件内容,在文件中添加HADOOP_CLASSPATH。
(3)第三种:直接将hbase的lib文件夹中所有jar文件复制到hadoop的share/hadoop/common/lib 或者share/hadoop/mapreduce等文件夹中。
3)使用hbase自带的server jar测试是否安装成功。
直接使用hbase自带的命名进行环境的测试,命令为:
hadoop jar $HBASE_HOME/lib/hbase-server-0.98.6-cdh5.3.6.jar rowcounter hbasetablename
运行该命名可以查看到我们指定table的行数。
二、案例:统计产品信息
编写自定义的MR程序读取hbase的数据或者往hbase中写数据注意点:
1. 如果是从hbase中读取数据,那么要求mapper实现TableMapper抽象类。如果是往hbase中写数据,而且是有reducer的情况下,要求reducer实现TableReducer抽象类。
2. 使用TableMapperReducerUtil类来进行job创建初始化操作。如果是往hbase中写数据,而且reducer是可以省略的话,那么我们也可以不指定reducer的具体类,直接使用指定null,比设置job的reducer的task个数为0.
3. 如果是在window环境中运行job(任务代码的执行时在window上),那么需要将参数addDependency设置为false,或者将fs.defaultFS设置为file:///。如果是在集群中运行job,那么必须将addDependency设置为true,并且fs.defaultFS设置为hdfs://xxx
4. 代码参考:
三、HBase整合Hive环境搭建