用MapReduce分析Hbase将结果插入mysql中

用MapReduce分析Hbase将结果插入mysql中,第1张

从HBASE读取清洗过的数据,写入到mysql的表中

NewInstallUserRunner.java

计算新增用户入口类

main方法

只有一个方法ToolRunner.run

入口类implements Tool接口

Tool定义run方法

Tool 继承Configurable

Configurable定义两个方法

所以入口类需要实现3个方法

setConf方法实现

定义output-collector的类,反射用的

输出到mysql的时候,组成insert语句的

输出到mysql的链接信息

getConf方法实现

run方法的实现

processArgs方法解读

run方法第一条this.processArgs(conf, args)执行结束,

返回结果默认是昨天,或者运行时加入-d yyyy-DD-mm 格式输入的日期。

参数中用到的枚举方法

addDependencyJars 如果在服务器运行,需要设置为true 如果在本地运行 设置成false

http://www.jianshu.com/p/fd25d036d4dc

http://www.jianshu.com/p/1493de43dbf7

if (job.waitForCompletion(true)) {

// 执行成功, 需要计算总用户

this.calculateTotalUsers(conf)

return 0

} else {

return -1

}

将数据导入HBase中有如下几种方式:

使用HBase的API中的Put方法

使用HBase 的bulk load 工具

使用定制的MapReduce Job方式

使用HBase的API中的Put是最直接的方法,用法也很容易学习。但针对大部分情况,它并非都是最高效的方式。当需要将海量数据在规定时间内载入HBase中时,效率问题体现得尤为明显。待处理的数据量一般都是巨大的,这也许是为何我们选择了HBase而不是其他数据库的原因。在项目开始之前,你就该思考如何将所有能够很好的将数据转移进HBase,否则之后可能面临严重的性能问题。

HBase有一个名为 bulk load的功能支持将海量数据高效地装载入HBase中。Bulk load是通过一个MapReduce Job来实现的,通过Job直接生成一个HBase的内部HFile格式文件来形成一个特殊的HBase数据表,然后直接将数据文件加载到运行的集群中。使用bulk load功能最简单的方式就是使用importtsv 工具。importtsv 是从TSV文件直接加载内容至HBase的一个内置工具。它通过运行一个MapReduce Job,将数据从TSV文件中直接写入HBase的表或者写入一个HBase的自有格式数据文件。

尽管importtsv 工具在需要将文本数据导入HBase的时候十分有用,但是有一些情况,比如导入其他格式的数据,你会希望使用编程来生成数据,而MapReduce是处理海量数据最有效的方式。这可能也是HBase中加载海量数据唯一最可行的方法了。当然我们可以使用MapReduce向HBase导入数据,但海量的数据集会使得MapReduce Job也变得很繁重。若处理不当,则可能使得MapReduce的job运行时的吞吐量很小。

在HBase中数据合并是一项频繁执行写 *** 作任务,除非我们能够生成HBase的内部数据文件,并且直接加载。这样尽管HBase的写入速度一直很快,但是若合并过程没有合适的配置,也有可能造成写 *** 作时常被阻塞。写 *** 作很重的任务可能引起的另一个问题就是将数据写入了相同的族群服务器(region server),这种情况常出现在将海量数据导入到一个新建的HBase中。一旦数据集中在相同的服务器,整个集群就变得不平衡,并且写速度会显著的降低。我们将会在本文中致力于解决这些问题。我们将从一个简单的任务开始,使用API中的Put方法将MySQL中的数据导入HBase。接着我们会描述如何使用 importtsv 和 bulk load将TSV数据文件导入HBase。我们也会有一个MapReduce样例展示如何使用其他数据文件格式来导入数据。上述方式都包括将数据直接写入HBase中,以及在HDFS中直接写入HFile类型文件。本文中最后一节解释在向HBase导入数据之前如何构建好集群。本文代码均是以Java编写,我们假设您具有基本Java知识,所以我们将略过如何编译与打包文中的Java示例代码,但我们会在示例源码中进行注释。

利用sqoop命令直接将mysql数据导入hbase

sqoop import --connect jdbc:mysql://127.0.0.1:3306/bss --table usu3 --hbase-table U --column-familyperson --hbase-row-key id --hbase-create-table --username 'root' -P

--connect jdbc:mysql://127.0.0.1:3306/bss 表示远程或者本地Mysql 服务的URI,3306是Mysql默认监听端口,bss是数据库,若是其他数据库,如Oracle,只需修改URI即可。

--table usu3 表示导出bss数据库的usu3 表。

--hbase-table U 表示在HBase中建立表U。

--column-family person 表示在表U中建立列族person。

--hbase-row-key id 表示表U的row-key是usu3表的id字段。

--hbase-create-table 表示在HBase中建立表。

--username 'root' 表示使用用户root连接Mysql。


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

原文地址:https://54852.com/zaji/8628848.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-19
下一篇2023-04-19

发表评论

登录后才能评论

评论列表(0条)

    保存