三-2. HBase与Mapreduce交互(待补充)

三-2. HBase与Mapreduce交互(待补充),第1张

三-2. HBase与Mapreduce交互(待补充) 3.2 Hbase与MapReduce 交互 3.2.0 前言

在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一张表中读数据再写入另一张表
3.2.1 环境准备 + 官方案例一:对表的行数进行计数
  1. 配置系统环境变量, 为了保持连贯性, 我们仍旧采用通过在/etc/profile.d/my_env.sh 或者直接 sudo vi /etc/profile中填写环境变量信息:
# HADOOP_HOME configuration
export HADOOP_HOME=/opt/module/hadoop-3.1.3

# Hbase_HOME configuration
export Hbase_HOME=/opt/module/hbase-2.3.7
  1. $HADOOP_HOME/etc/hadoop/hadoop-env.sh,在文件最后一行加上下面这一句, 完事之后需要重启集群加载,
export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:/opt/module/hbase-2.3.7/libopt/module/hbase-2.3.7/lib/*** 则说明 hadoop能够识别到hbase的jar包了
  1. 在Hbase安装目录下执行下面指令, 启动一个MR进程对hbase中的person表进行wordcount. 如果出现ROW=xx , 说明HADOOP 能够正常的连接到Hbase中的表了.
yarn jar lib/hbase-mapreduce-2.3.7.jar rowcounter person
  • yarn 前面省略了${HADOOP_HOME}/bin, 因为环境变量中已有这个值了
  • yarn jar 代表执行一个jar file
  • rowcounter 是代指hbase-mapreduce-2.3.7.jar中的一个类名
  • person是表名, 作为rowcounter的参数


  1. 对于Exception in thread "main" java.lang.ClassNotFoundException: RowCounter的解决办法:
  • 出现这种问题一般是jar包中没有对应的类, 可能是jar名字和对应的功能不匹配导致的, 如果要执行mapreduce任务, 请首先保证上面的环境变量配置是正确的, 然后在 $Hbase_HOME/lib下查找带有hbase-mapreduce-版本号.jar 相关的类,
  1. ${Hbase_HOME}/bin/hbase mapredcp 有什么用?
  • 根据官方文档来看: 它列出了在 hbase 运行基础 mapreduce 作业所需的最小 jar 文件集合, 经笔者检验, hbase1.x 的hbase mapredcp仍旧含有较全面的jar包依赖(包括sgg 2019讲到的 hbase-server-1.3.1.jar), 然而到了 hbase 2.3.7(其他版本未验证), 已经是精简了很多, 并且全部指向的是lib目录下的client-facing-thirdparty和shaded-clients两个子目录下的jar包,

  • 所以如果你在前面如果用 hbase mapred作为参数配置给了$HADOOP_CLASSPATH, 请一定要把jar的名字跟这两个文件夹的相应名称对应上, 否则一定会出现 jar包未找到, 或Exception in thread "main" java.lang.ClassNotFoundException: RowCounter异常.
3.2.2 官方案例二: 使用MapReduce 将本地文件导入Hbase
  1. 创建一个tsv格式的文件: fruit.tsv, 并把这个文件上传到HDFS上的/input文件夹
# 创建文件
>vi fruit.tsv
1001  Apple Red
1002  Pear  Yellow
1003  Pineapple Yellow
#上传文件: hdfs dfs -put 文件 目标地址
hdfs dfs ./fruit.tsv /input

  1. 在hbase shell 中创建fruit表, 列族为info

  2. 在Hbase安装目录下启动MR任务

yarn jar lib/hbase-mapreduce-2.3.7.jar importtsv 
-Dimporttsv.separator=' ' 
-Dimporttsv.columns=Hbase_ROW_KEY,info:name,info:color fruit 
hdfs://bigdata01:8020/input/fruit.tsv
  • importtsv–>前面jar包中负责导入tsv数据的类
  • `Dimporttsv.separator=’ '–>指定分隔符为空格
  • -Dimporttsv.columns=Hbase_ROW_KEY,cf:cn1,cf:cn2 表名—>指定tsv文件中的数据格式, 其中列名是可以随意起名, 列族和表名都必须符合Hbase中预先定义好的表结构, 我们还可以在表名前面加上命名空间ns:table, 不加就是default命名空间.
  • hdfs://bigdata01:8020/input/fruit.tsv, hdfs上文件的路径, 单一文件的话最好能具体到文件名, 多个文件就具体到文件夹

要是不想总在Hbase安装目录启动的话, 可以像hadoop一样, 把export PATH=$PATH:${Hbase_HOME}/lib添加到环境变量;

3.2.3 自定义Hbase-MapReduce1(mr代码忘的差不多了, o(╥﹏╥)o, 复习去了) 3.2.3 自定义Hbase-MapReduce2

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5624792.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存