HBase与MapReduce交互

HBase专栏
上一篇主目录 下一篇


【前言】
在Hadoop中MR使用HBase,需要将HBase的jar包添加到Hadoop的类路径下,所以需要修改配置文件添加类路径。这源于
一个思想:
A要使用 B,那么A要有B的jar包。例如:在 Hive的安装中,Hive需要使用到MySQL数据库,所以将jdbc驱动包放到lib文件夹中

HBase与MapReduce交互有三种方式(MR代表HDFS):

  1. HDFS从HBase表中读数据
  2. HDFS写数据到HBase表中
  3. HDFS从HBase一张表中读数据再写入另一张表

1 配置环境变量

查看hbase运行MapReduce需要的jar包:

$ hbase mapredcp

/home/hadoop/apps/hbase-1.2.6/lib/netty-all-4.0.23.Final.jar:/home/hadoop/apps/hbase-1.2.6/lib/hbase-server-1.2.6.jar:/home/hadoop/apps/hbase-1.2.6/lib/guava-12.0.1.jar:/home/hadoop/apps/hbase-1.2.6/lib/hbase-protocol-1.2.6.jar:/home/hadoop/apps/hbase-1.2.6/lib/hbase-common-1.2.6.jar:/home/hadoop/apps/hbase-1.2.6/lib/protobuf-java-2.5.0.jar:/home/hadoop/apps/hbase-1.2.6/lib/zookeeper-3.4.6.jar:/home/hadoop/apps/hbase-1.2.6/lib/htrace-core-3.1.0-incubating.jar:/home/hadoop/apps/hbase-1.2.6/lib/hbase-prefix-tree-1.2.6.jar:/home/hadoop/apps/hbase-1.2.6/lib/metrics-core-2.2.0.jar:/home/hadoop/apps/hbase-1.2.6/lib/hbase-client-1.2.6.jar:/home/hadoop/apps/hbase-1.2.6/lib/hbase-hadoop-compat-1.2.6.jar

在01打开/home/hadoop/apps/hadoop-2.7.3/etc/hadoop,在hadoop-env.sh中给HADOOP_CLASSPATH添加上hbase的lib下的所有jar包(只多不少):

[hadoop@hadoop01 hadoop]$ vim hadoop-env.sh

export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:/home/hadoop/apps/hbase-1.2.6/lib/*

然后将修改好的hadoop-env.sh发送到所有的hadoop集群节点02~05.

[hadoop@hadoop01 hadoop]$ scp hadoop-env.sh hadoop@hadoop02:$PWD
[hadoop@hadoop01 hadoop]$ scp hadoop-env.sh hadoop@hadoop03:$PWD
[hadoop@hadoop01 hadoop]$ scp hadoop-env.sh hadoop@hadoop04:$PWD
[hadoop@hadoop01 hadoop]$ scp hadoop-env.sh hadoop@hadoop05:$PWD

-注:添加所有jar包会报一下提示(如何去掉呢多余的jar?):

hadoop01: SLF4J: Class path contains multiple SLF4J bindings.
hadoop01: SLF4J: Found binding in [jar:file:/home/hadoop/apps/hadoop-2.7.3/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
hadoop01: SLF4J: Found binding in [jar:file:/home/hadoop/apps/hbase-1.2.6/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]

方案一:将需要的添加到export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:即可。
方案二:将需要的放入一个文件夹中,再把路径添加到export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:后面。
方案三:将多余的jar包删除:(我采用这个
在01~05中:

cd /home/hadoop/apps/hbase-1.2.6/lib/
mv slf4j-log4j12-1.7.5.jar slf4j-log4j12-1.7.5.jar.111111

启动hbase

2 运行官方的 MapReduce 任务

案例一:统计 student 表中有多少行数据(HDFS从HBase表中读数据

[hadoop@hadoop01 ~]$ yarn jar /home/hadoop/apps/hbase-1.2.6/lib/hbase-server-1.2.6.jar rowcounter student

解释:

  • yarn jar是hadoop中的执行jar包的命令
  • /home/hadoop/apps/hbase-1.2.6/lib/hbase-server-1.2.6.jar是jar的全路径
  • rowcounter是类名
  • student是hbase中的表名(没加命名空间,默认为default。指定方式:myhbase:student

结果:
在这里插入图片描述
在这里插入图片描述

案例二:使用 MapReduce 将本地数据导入到 HBase(HDFS写数据到HBase表中
1)在本地创建一个 tsv 格式的文件:fruit.tsv

1001 Apple Red
1002 Pear Yellow
1003 Pineapple Yellow

2)创建 HBase 表

hbase(main):001:0> create 'fruit','info'

3)在 HDFS 根目录中创建 input_fruit 文件夹并上传 fruit.tsv 文件

[hadoop@hadoop01 ~]$ hadoop fs -mkdir /input_fruit/
[hadoop@hadoop01 ~]$ hadoop fs -put fruit.tsv /input_fruit/

4)执行 MapReduce 到 HBase 的 fruit 表中
参考文章

yarn jar /home/hadoop/apps/hbase-1.2.6/lib/hbase-server-1.2.6.jar importtsv -Dimporttsv.separator=' ' -Dimporttsv.columns=HBASE_ROW_KEY,info:name,info:color fruit hdfs://hadoop01:9000/input_fruit

解释:

  • yarn jar是hadoop中的执行jar包的命令
  • /home/hadoop/apps/hbase-1.2.6/lib/hbase-server-1.2.6.jar是jar的全路径
  • importtsv是类名
  • -Dimporttsv.separator=' '指定分隔符为空格
  • Dimporttsv.columns=HBASE_ROW_KEY,info:name,info:color第一列作为rowKey,第二列是name,第三列是color
  • fruit是hbase中的表名(没加命名空间,默认为default。指定方式:myhbase:fruit
  • hdfs://hadoop01:9000/input_fruit是tsv文件的父文件,输入路径

5)使用 scan 命令查看导入后的结果

hbase(main):002:0> scan ‘fruit’

在这里插入图片描述

3 自定义HBase-MR

功能:将 fruit 表中的一部分数据,通过 MR 迁入到 fruit_mr 表中
代码演示:GitHub

HBaseMRReadFruitMapper类,用于读取 fruit 表中的数据
HBaseMRWriteFruitReducer类,用于将读取到的 fruit 表中的数据写入到 fruit_mr表中
HBaseMRFruit2FruitRunner用于组装运行 Job任务

打包:右窗口栏->Maven Projects->Lifecycle->package

[hadoop@hadoop01 ~]$ yarn jar Hadoop_HDFS-1.0-SNAPSHOT.jar com/shane/hbase/HBaseMRFruit2FruitRunner

注:运行任务前,如果待数据导入的表不存在,则需要提前创建。导出数据的表也需要提前创建。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目录 序 1. 入门 1.1. 介绍 1.2. 快速开始 2. 配置 2.1. Java 2.2. 操作系统 2.3. Hadoop 2.4. HBase运行模式:单机和分布式 2.5. ZooKeeper 2.6. 配置文件 2.7. 配置示例 2.8. 重要配置 2.9. Bloom Filter 3. 升级 3.1. 从HBase 0.20.x or 0.89.x 升级到 HBase 0.90.x 3.2. 从 0.90.x 到 0.92.x 4. The HBase Shell 4.1. 使用脚本 4.2. Shell 技巧 5. 数据模型 5.1. 概念视图 5.2. 物理视图 5.3. 表 5.4. 行 5.5. 列族 5.6. Cells 5.7. Data Model Operations 5.8. 版本 5.9. 排序 5.10. 列元数据 5.11. Joins 6. HBase 和 Schema 设计 6.1. Schema 创建 6.2. column families的数量 6.3. Rowkey 设计 6.4. Number 数量 6.5. 支持的数据类型 6.6. Joins 6.7. 生存时间 (TTL) 6.8. Keeping Deleted Cells 12-5-30 HBase 官方文档 2/81 abloz.com/hbase/book.htm 6.9. Secondary Indexes and Alternate Query Paths 6.10. Schema Design Smackdown 6.11. Operational and Performance Configuration Options 6.12. 限制 7. HBaseMapReduce 7.1. Map-Task Spitting 7.2. HBase MapReduce Examples 7.3. Accessing Other HBase Tables in a MapReduce Job 7.4. Speculative Execution 8. HBase安全 8.1. 安全客户端访问 HBase 8.2. 访问控制 9. 架构 9.1. 概述 9.2. Catalog Tables 9.3. 客户端 9.4. Client Request Filters 9.5. Master 9.6. RegionServer 9.7. Regions 9.8. Bulk Loading 9.9. HDFS 10. 外部 APIs 10.1. 非Java语言和 JVM交互 10.2. REST 10.3. Thrift 11. 性能调优 11.1. 操作系统 11.2. 网络 11.3. Java 11.4. HBase 配置 11.5. ZooKeeper 11.6. Schema 设计 11.7. 写到 HBase 11.8. 从 HBase读取 11.9. 从 HBase删除 11.10. HDFS 11.11. Amazon EC2 11.12. 案例 12. 故障排除和调试 HBase 12.1. 通用指引 12.2. Logs 12.3. 资源 12.4. 工具 12.5. 客户端 12.6. MapReduce 12.7. NameNode 12.8. 网络 12.9. RegionServer 12.10. Master 12.11. ZooKeeper 12.12. Amazon EC2 12.13. HBase 和 Hadoop 版本相关 12.14. 案例 13. 案例研究 13.1. 概要 13.2. Schema 设计 13.3. 性能/故障排除 14. HBase Operational Management 14.1. HBase Tools and Utilities 14.2. Region Management 14.3. Node Management 14.4. HBase Metrics 14.5. HBase Monitoring 14.6. Cluster Replication 14.7. HBase Backup 14.8. Capacity Planning 15. 创建和开发 HBase 15.1. HBase 仓库 15.2. IDEs 15.3. 创建 HBase 12-5-30 HBase 官方文档 3/81 abloz.com/hbase/book.htm 15.4. Publishing a new version of hbase.apache.org 15.5. 测试 15.6. Maven Build Commands 15.7. Getting Involved 15.8. 开发 15.9. 提交补丁 A. FAQ B. hbck In Depth B.1. Running hbck to identify inconsistencies B.2. Inconsistencies B.3. Localized repairs B.4. Region Overlap Repairs C. Compression In HBase C.1. CompressionTest Tool C.2. hbase.regionserver.codecs C.3. LZO C.4. GZIP C.5. SNAPPY C.6. Changing Compression Schemes D. YCSB: The Yahoo! Cloud Serving Benchmark and HBase E. HFile format version 2 E.1. Motivation E.2. HFile format version 1 overview E.3. HBase file format with inline blocks (version 2) F. Other Information About HBase F.1. HBase Videos F.2. HBase Presentations (Slides) F.3. HBase Papers F.4. HBase Sites F.5. HBase Books F.6. Hadoop Books G. HBase History H. HBase and the Apache Software Foundation H.1. ASF Development Process H.2. ASF Board Reporting Index 表列表 5.1. Table webtable 5.2. ColumnFamily anchor 5.3. ColumnFamily contents 8.1. Operation To Permission Mapping

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值