一、环境配置
这里选择的环境是hadoop-0.20.2和hbase-0.90.4,Hadoop环境配置参看
这里,HBase环境配置请看
这里。
需要注意的是,本文的需求是在Hadoop上跑MapReduce job来分析日志并将结果持久化到HBase,所以,在编译程序时,Hadoop需要用到HBase和Zookeeper包,因此,需要分别将hbase-0.90.4.jar和zookeeper-3.3.2.jar拷贝到Hadoop的lib目录下,具体操作如下:
#cp /root/hbase-0.90.4/hbase-0.90.4.jar /root/hadoop-0.20.2/lib
#cp /root/hbase-0.90.4/lib/zookeeper-3.3.2.jar /root/hadoop-0.20.2/lib
二、实例编写
日志文件xxxlog.txt的内容如下:
version-------------time-----------------id-------rt----filter--------id----rt-----filter
1.0^A2014-03-03 00:00:01^Ad2000^C4^C3040^Bd2001^C7^C0
1.0^A2014-03-03 00:00:01^Ad3000^C4^C3041^Bd2001^C7^C0
同样,需要将此文件放到hdfs目录下,比如:hadoop fs -put /tmp/input。
为持久化在HBase中创建table和family,比如:./hbase shell,create 'xxxlog', 'dsp_filter'。
为了清晰便于扩展,将Maper、Reducer、Driver分开,具体如下:
1、
Maper
#vi xxxLogMaper.java
import java.io.IOException;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
public class xxxLogMaper
extends Mapper
三、编译运行
在当前目录下编译源码,具体如下:
#javac -classpath /root/hadoop-0.20.2/hadoop-0.20.2-core.jar:/root/hadoop-0.20.2/lib/commons-cli-1.2.jar:/root/hbase-0.90.4/hbase-0.90.4.jar -d ./ xxxLogMaper.java xxxLogReducer.java xxxLogDriver.java
需要注意的是,必须三个一起编译否则出错:
xxxLogDriver.java:22: error: cannot find symbol
job.setMapperClass(xxxLogMaper.class);
打包class文件,具体如下:
#jar cvf xxxLog.jar *class
#rm -rf *class
运行任务,具体如下:
#hadoop jar xxxLog.jar xxxLogDriver /tmp/input /tmp/output
查询结果,具体如下:
#./hbase shell
hbase(main):014:0>scan 'xxxlog'
关于更多Hadoop和HBase的信息请参见
这里,,
这里,
这里,,还有
这里。
阅读(9172) | 评论(1) | 转发(2) |