Hadoop学习之路(五):Hadoop交互关系型数据库(MySQL)

本文介绍了如何使用Hadoop与MySQL进行交互,通过编写Java类实现了从MySQL读取数据,统计单词个数,然后将结果写回MySQL。详细步骤包括创建表、插入数据、配置Hadoop节点的MySQL驱动、创建Java工程、编写MapReduce作业并提交执行,最终在MySQL中查看统计结果。
摘要由CSDN通过智能技术生成

一、Hadoop与数据库交互简介

Hadoop在处理数据过程中接触得较多的就是文本文件即TextInputFormat,这也是MapReducer框架默认的输入格式,但是在某些情况下Hadoop需要与关系型数据库,如MySQL、Oracle等进行交互,有以下原因:

  • 需要将关系型数据库的数据作为处理的数据输入
  • 需要将数据的统计结果存储进关系型数据库以备分析
  • 将关系型数据库的数据迁移进HDFS

第于第三点而言,更为流行的做法就是使用Apache 的 Sqoop,先挖个坑这个以后会介绍。为此,Hadoop提供DBInputFormat输入类,满足这个需求。DBInputFormat使用JDBC从关系型数据库中读取数据,而与之对应的输出类是DBOutputFormat,它也是使用JDBC将数据写入关系型数据库中。

为了演示全面,本次操作将完成这样一个任务,从数据库的words表中读取单词,然后统计单词个数后将结果写入stats表中。具体做法是先编写类MySqlDBWritable,对从关系型数据库中取出的数据进行串行化与逆串行化,然后编写常规的Map与Reducer统计单词个数,并将数据分装进MySqlDBWritable中写入数据库。

二、操作前的准备

Hadoop版本是:2.6.0-cdh5.7.0
开发工具是:IDEA2018
关系型数据库是:MySQL5.6.26

1.创建表

在MySQL中执行如下命令:
创建表words:create table words(id int primary key auto_increment,line varchar(256)),其中字段line代表一行空格分隔的单词。
创建表status:create table stats(word varchar(25),count int),其中字段word 代表统计的单词,count 是其统计个数。

2.将数据插入表words中
hello world hello hadoop
hello spark hello hbase
hello hive hello hadoop
hello kafka hello flume
hello flink hello sqoop
hello spark hello hbase
hello kafka hello flume
hello spark hello hbase

插入数据后words表数据为:
在这里插入图片描述

2.将MySQL的驱动分发到所有的Hadoop节点

这一步很关键,因为DBInputFormat和DBOutputFormat需要使用JDBC与MySQL进行交互,而Hadoop默认情况下是没有MySQL的驱动,所以需要将MySQL的驱动分发至所有数据节点上,具体路径是:$HADOOP_HOME/share/hadoop/common/lib下。

三、Hadoop与MySQL交互实现

1.创建Java工程,添加Maven支持

完整的Maven依赖如下:

  <properties>
    <hadoop.version>2.6.0-cdh5.7.0</hadoop.version>
  </properties>
  
   <repositories>
    <repository>
      <id>cloudera</id>
      <url>https://repository.cloudera.com/artifactory/cloudera-repos</url>
    </repository>
  </repositories>

<dependencies>
    <dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-client</artifactId>
      <version>${
   hadoop.version}</version>
    </dependency>
  </dependencies>

<build>
    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
      <plugins>
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.0.0</version>
        </plugin>
        <!-- see http://maven.apache.org/ref/current/maven-core/default
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值