目标
- 1.将 CSV 文件导入到 HBase 的 access_log 表内。
- 2.请根据以上提示,利用过滤器检索出所有访问记录中,来自加拿大(即 country 字段的值是 ca)的记录有多少条。
- 3.将查询结果中的记录数量写入到 /home/hadoop/log_analysis_result 文件中。
知识点
- HBase 过滤器的用法
- HBase 导入数据的方式
- HBase 表操作
- Bash 输出重定向
CSV内容
提示
1.Hbase数据导入语句
$ hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.separator="分隔符" -Dimporttsv.columns=HBASE_ROW_KEY,列族名称:列名,列族名称:列名,列族名称:列名,列族名称:列名,列族名称:列名,列族名称:列名 表明 待导入文件的 HDFS 路径
2.可供参考的 HBase 中的 access_log 表模式为:
- 第 1 列:对应于 HBASE_ROW_KEY 。
- 第 2 至 3 列:对应于列族 cf1 ,对应的列名分别是 date 和 id 。
- 第 4 至 7 列:对应于列族 cf2 ,对应的列名分别是 url 、pre_url 、ip 、country 。
- HBase 中创建表的命令为 create ‘表名’, ‘列族名称’, ‘列族名称’。
3.通过 SingleColumnValueFilter 来对单个列的值进行限定,在 HBase Shell 中的使用方法如下:
scan '表名', FILTER=>"SingleColumnValueFilter('列族名称','列名',判断条件,'binary:匹配值')"
参考代码
$ su hadoop
$ cd ~
$ wget http://labfile.oss.aliyuncs.com/courses/567/log.csv
$ hdfs namenode -format(格式化语句,第一次才需要)
$ start-dfs.sh
$ start-yarn.sh
$ hdfs dfs -mkdir -p /user/hadoop/(之前建立过,这次不需要)
$ hdfs dfs -put /home/hadoop/log.csv /user/hadoop/log.csv
$ start-hbase.sh
$ hbase shell
hbase(main):001:0> create 'access_log', 'cf1', 'cf2'
打开新的终端
$ su -l hadoop
$ hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.separator="," -Dimporttsv.columns=HBASE_ROW_KEY,cf1:date,cf1:id,cf2:url,cf2:pre_url,cf2:ip,cf2:country access_log /user/hadoop/log.csv
切换到 hbase shell 中执行:
$ hbase shell
hbase(main):002:0> scan 'access_log', FILTER=>"SingleColumnValueFilter('cf2','country',=,'binary:ca')"
hbase(main):003:0> exit
在终端执行:
$ echo 1037 > /home/hadoop/log_analysis_result
log_analysis_result的结果是1037