基于MapReduce操作HBase中数据

2021-03-11 03:34田燕军王莉
电子技术与软件工程 2021年21期
关键词:开源集群分布式

田燕军 王莉

(山西经济管理干部学院 山西省太原市 030024)

1 为什么要用MapReduce处理HBase表中数据

MapReduce 是一种大规模数据处理的编程模型,用于大规模数据集的并行运算[1]。遵循着“分而治之,迭代汇总”的思想,即将海量的数据拆分到分布式文件系统中的不同机器上,让各个机器直接访问和处理拆分后的数据并获得局部结果,再汇总、合并这些局部结果形成全局结果。MapReduce 并行程序模型简单,易于编写,写一个分布式程序,只要简单的实现一些接口,就可以完成,同写一个简单的串行程序一模一样的,这个程序之后可以分布到大量的廉价的pc 机器上运行。MapReduce 也有不错的容错能力,因MapReduce 要运行在廉价的PC 机器上[2],这些机器随时可能出故障,在出了故障时,MapReduce 可自动把计算任务转移到另一个节点上运行,不需要人工参与。MapReduce 也有良好的扩展性,当程序运行起来硬件资源得不到满足时,可以通过增加机器来添加硬件资源。

HBase[3]中表的数据非常庞大,最高可达PB 级,如用传统串行程序处理HBase 表中数据,只能利用单机资源,会极大的降低处理HBase 表数据的效率; 但用MapReduce 分布式思想程序来处理HBase 表中的海量数据时,可利用集群资源,快速批量完成数据的处理,在实际工作中,对HBase 的操作也大多是与MapReduce 共同进行。

2 实验环境

使用三台PC 机搭建分布式计算平台,3 台PC 机分别都安装CentOS6.8 64 位操作系统,并按下边2.1 进行大数据集群环境准备,再按2.2 进行大数据平台软件安装。

2.1 大数据集群环境准备

修改/etc/sysconfig/network 文件,分别设置三台PC 机的主机名为:node01、node02、node03;

修改/etc/hosts 文件,分别绑定三台PC 机的主机名与IP 地址;使用setenforce 0 临时关闭selinux, 修改/etc/selinux/config 文件永久关闭selinux;使用service iptables stop 临时关闭防火墙,使用chkconfig iptables off永久关闭防火墙;使用ssh-keygen -t rsa, sshcopy-id node01 对三台PC 机互相做免密登录;三台PC 机分别使用yum源安装ntp(网络时间服务),并进行配置,使三台PC机时间同步。

2.2 安装大数据平台软件

三台PC 机上分别新建/export/servers 目录用于存放安装程序,新建/export/softwares 目录用于存放软件安装包;接下来三台PC 机分别安装jdk(版本为jdk-8u144-linux-x64.tar.gz),jdk 是 Java语言的软件开发工具包,包含了JAVA 的运行环境、JAVA 工具和JAVA 基础的类库;安装mysql(版本为mysql-connector-java-5.1.38.jar),mysql 是基于SQL 查询的开源跨平台数据库管理系统;安装zookeeper(版本为zookeeper-3.4.5.tar.gz),zookeeper 是一个分布式协调服务的开源框架,主要用来解决分布式集群中应用系统的一致性问题,例如怎样避免同时操作同一数据造成脏读的问题;安装hadoop(版本为hadoop-2.6.0.tar.gz),hadoop 是Apache 软件基金会旗下的一个开源分布式计算平台,以HDFS 和MapReduce 为核心用户提供了系统底层细节透明的分布式基础架构;安装HBase(版本为HBase-1.2.0.tar.gz),HBase 是bigtable 的开源java 版本,是建立在hdfs 之上,提供高可靠性、高性能、列存储、可伸缩、实时读写nosql 的数据库系统;安装hive(版本为hive-1.1.0.tar.gz), hive是基于Hadoop 的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL 查询功能[4]。

3 关键技术

HBase 中的表数据最终都存储在HDFS 上面,故HBase 天生就支持MapReduce 的操作,提供了TableInputFormat、TableOutput Format、TableMapper 和TableReducer 类来支持使用MapReduce 框架处理HBase 上的数据,并提供了TableMapReduceUtil 类来初始化一个HBase-MapReduce 任务。

TableInputFormat 继承自TableInputFormatBase 类,负责将HBase 数据按Region 进行切片。

TableOutputFormat 类继承自FileOutputFormat 类,负责将MapReduce 任务输出的数据写入HBase 表中。

TableMapper 是一个抽象类,继承自Mapper 类,负责将输入的Key 转为RowKey 的字节码数据,输入的Value 转为Result 类型,表示一行数据。开发者需要重载TableMapper 类的map 方法来实现自己的Map 任务。

TableReducer 同样是一个抽象类,继承自Reducer 类,与普通的Reducer 类没有区别,开发者需要重载TableReducer 类的reduce方法来实现自己的Map 任务。

TableMapReduceUtil 是一个辅助类,用来简化一个HBase-MapReduce 作业的配置过程。该类提供了initTableMapperJob()方法初始化map 任务、提供了initTableReducerJob()方法初始化reduce任务。

4 实验与测试

4.1 从HBase的一张表中读取数据, 将数据写入到另一个表当中去

建立数据来源表person 表,包含一个列族f1,向表中添加数据,在列族中放入name 列,将"姓名测试数据"放入该列中,在列族中放入age 列,将"年龄测试数据"放入该列中,如此插入多行,行键为不同的数据即可; 建立输出表person2,包含一个列族f1; 通过MapReduce 操作Hbase 的person 表,提取出f1 列族下name 列数据,并写入person2 表的'f1:name'中。

步骤如下:

(1)自定义Mapper 继承TableMapper; 该自定义Mapper 会遍历person 表中每行数据的单元格,如是name 列,则提取出来放入到put 中。

(2)自定义Reducer 继承TableReducer; 该自定义Reducer 不进行任何处理,只是把map 输出的put,再直接输出。

(3)组装八大步,读取Hbase 表中数据和初始化map 用TableMapReduceUtil.initTableMapperJob(),向HBase 表中写入数据和初始化reduce 用TableMapReduceUtil.initTableReducerJob()

算法1:

4.2 读取HDFS文件, 将数据写入到HBase表当中去

hdfs 建立数据源person.txt 文件,向该文件中添加 数据,包含rowkey、name、age 三列; 建立输出表person3,包含一个列族f1;通过MapReduce 读取该hdfs 文件,写入到hbase 的person3 表中。

步骤如下:

(1)自定义Mapper 继承Mapper; 该自定义Mapper 会读取person.txt 文件中数据,放到put 中。

(2)自定义Reducer 继承TableReducer; 该自定义Reducer 不进行任何处理,只是把map 输出的put,再直接输出。

(3)组装八大步, 通过TableMapReduceUtil.initTableReducer Job()向HBase 表中写入数据和初始化reduce。

5 结语

HBase 丰富的存储能力与超强的并发访问能力,使得HBase 应用非常广泛。目前已经在金融、交通、医疗、车联网、IoT 等众多领域有了最佳实践,涉及到订单/账单存储、用户画像、时空/时序数据、对象存储、Cube 分析等各个使用场景。对HBase 表中数据的处理,也用到方方面面,通过MapReduce 操作HBase,可以大大提高处理HBase 表中数据的速度,同时,因为HBase 天生就支持MapReduce 的操作,故会简化MapReduce 程序的编写。

猜你喜欢
开源集群分布式
海上小型无人机集群的反制装备需求与应对之策研究
五毛钱能买多少头牛
一种无人机集群发射回收装置的控制系统设计
Python与Spark集群在收费数据分析中的应用
大家说:开源、人工智能及创新
开源中国开源世界高峰论坛圆桌会议纵论开源与互联网+创新2.0
基于DDS的分布式三维协同仿真研究
开源计算机辅助翻译工具研究
西门子 分布式I/O Simatic ET 200AL