`
sunasheng
  • 浏览: 119229 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

mapreduce对于关系数据库的连接和访问

阅读更多

关系数据库的连接和访问

1.从数据库中输入数据

DBInputFormat提供从数据库读取数据的格式
DBRecordReader提供读取数据记录的接口
Hadoop允许直接从数据库读取数据,但是这样的话频繁读取会大大加重数据库的负载,所以一般不建议这样做
一个比较好的解决方法是:用数据库中的dump工具将待分析的大量数据输出为文本数据文件,并上载到HDFS中进行处理。

2.向数据库中输出计算结果
DBOutputFormat提供向数据库中输出数据的格式
DBRecordWriter提供向数据库中写入数据记录的接口
DBConfiguration提供数据库配置和创建连接的接口

DBConfiguration 中的静态方法:

 

public static void configureDB(Job job,String driverClass,String dbUrl,String userName,String password)

 DBOutputFormat 中提供静态方法(指定需要写入的数据表和字段):

 

 

public static void setOutput(Job job,String tableName,String ...fieldNames)

示例:

Configuration conf = new Configuration();
Job job = new Job(conf,JobClass.class);
job.setOutputFormat(DBOutputFormat.class);
DBConfiguration.configureDB(job,"com.mysql.jdbc.Driver","jdbc:mysql://db.host.com/mydb","myname","mypassword");
DBOutputFormat.setOutput(job,"Customers","Name","PhoneNumber");

 此外为了向数据库中写入数据还得实现DBWritable

package test;

import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.apache.hadoop.io.Writable;
import org.apache.hadoop.mapred.lib.db.DBWritable;

public class CustomersDBWritable implements Writable, DBWritable {
	private String CustomerName;
	private String PhoneNumber;

	@Override
	public void readFields(ResultSet resultSet) throws SQLException {
		CustomerName = resultSet.getString(1);
		PhoneNumber = resultSet.getString(2);
		// 除非是用DBInputFormat直接向数据库输入数据,否则readFields方法不会被调用
	}

	@Override
	public void write(PreparedStatement statement) throws SQLException {
		statement.setString(1, CustomerName);
		statement.setString(2, PhoneNumber);
	}

	@Override
	public void readFields(DataInput in) throws IOException {
		CustomerName = in.readUTF();
		PhoneNumber = in.readUTF();
	}

	@Override
	public void write(DataOutput out) throws IOException {
		out.writeUTF(CustomerName);
		out.writeUTF(PhoneNumber);
	}
}

  

 

分享到:
评论

相关推荐

    hadoop连接mysql数据库访问数据和导入数据

    hadoop连接数据库查询数据,并添加到hdfs;从hdfs进行mapreduce数据导入到数据库 hadoop连接数据库查询数据,并添加到hdfs;从hdfs进行mapreduce数据导入到数据库 hadoop连接数据库查询数据,并添加到hdfs;从hdfs...

    hadoop+hive+mapreduce的java例子

     Hive提供了jdbc驱动,使得我们可以用Java代码来连接Hive并进行一些类关系型数据库的sql语句查询等操作。同关系型数据库一样,我们也需要将Hive的服务打开;在Hive 0.11.0版本之前,只有HiveServer服务可用,你得在...

    中安威士数据库防火墙系统(VS-FW).docx

    特性优势 技术优势 全自主技术体系:形成高技术壁垒 高速分析技术:特殊数据包分析和转发技术,实现高效的网络通信内容过滤多线程技术和缓存技术,支持高并发连接 基于BigTable和MapReduce的存储:单机环境高效、...

    Hive用户指南(Hive_user_guide)_中文版.pdf

    1.3Hive 和普通关系数据库的异同 Hive RDBMS 查询语言 HQL SQL 数据存储 HDFS Raw Device or Local FS 索引 无 有 执行 MapReduce Excutor 执行延迟 高 低 处理数据规模 大 小 1. 查询语言。由于 SQL 被广泛...

    nosql 入门教程

    4.1.1 使用关系型数据库中的表格和列 63 4.1.2 列数据库对比RDBMS 65 4.1.3 列数据库当做键/值对的嵌套映射表 67 4.1.4 Webtable布局 70 4.2 HBase分布式存储架构 71 4.3 文档存储内部机制 73 4.3.1 用内存...

    深入云计算 MongoDB管理与开发实战详解pdf.part1

    3.5 客户端请求和MongoDB数据库连接 3.6 本章小结 第2篇 应用篇 第4章 查询 4.1 find简介 4.1.1 返回指定的键 4.1.2 find查询限制 4.2 条件操作符 4.2.1 $all匹配所有 4.2.2 $exists判断字段...

    深入云计算 MongoDB管理与开发实战详解pdf.part2

    3.5 客户端请求和MongoDB数据库连接 3.6 本章小结 第2篇 应用篇 第4章 查询 4.1 find简介 4.1.1 返回指定的键 4.1.2 find查询限制 4.2 条件操作符 4.2.1 $all匹配所有 4.2.2 $exists判断字段...

    10-Hive数据仓库

    Hive 运行时,元数据存储在关系型数据库里面 Hive架构 (1)用户接口主要有三个:CLI,Client 和 WUI。其中最常用的是CLI,Cli启动的时候,会同时启动一个Hive副本。Client是Hive的客户端,用户连接至Hive Server。...

    python数据分析随书代码

    8.2 通过pandas访问数据库 183 8.3 SQLAlchemy 185 8.3.1 SQLAlchemy的安装和配置 186 8.3.2 通过SQLAlchemy填充数据库 188 8.3.3 通过SQLAlchemy查询数据库 189 8.4 Pony ORM 191 8.5 Dataset:懒人数据库 ...

    mongotor:用于在Tornado中访问MongoDB的异步驱动程序和工具包

    支持运行数据库命令( count , sum , mapreduce等) ORM喜欢映射文档和字段 Signals为pre_save,post_save,pre_remove,post_remove,pre_update和post_update 通过测试覆盖100%的代码 后续步骤为以下内容...

    大数据场景化解决方案.pdf

    使⽤Sqoop可以交互关系型数据库,进⾏导⼊导出数据。 使⽤爬⾍技术,可在⽹上爬取海量⽹页数据。 数据存储与管理: ⼤数据利⽤分布式⽂件系统HDFS、HBase、Hive,实现对结构化、半结构化和⾮结构化数据的存储和管理...

    个性化智能推荐系统分析与调研.pdf

    ⾸先需要在采集的互联⽹平台进⾏埋点,在页⾯放置"蜘蛛"探针、采集业务系统所有访问和操作⽇志、从数据库中提取业务数据,采 集回来存储在数据仓库,采集服务器组负责将采集到的⽇志信息⽣成⽂件,落地到存储设备;...

    java重量级源码-alpakka-jdbc:面向Java开发人员的JDBC流简介

    连接器和示例集成的系列中的第一个配方。 介绍 在深入研究代码示例之前,了解一些有关流式传输和与现有应用程序交互的相关性的背景知识将有助于识别整体架构用例。 单体世界中的流 经典的大数据解决方案有几个组件。...

    2017最新大数据架构师精英课程

    80_hdfs-maven-hdfs API访问8 s8 J# W* l- i% x, ]: L! L 81_hdfs-maven-idea的集成处理 82_hdfs-block大小-副本数设定9 o$ I! k4 |+ ]9 q2 h8 ]# x6 B, S* Y$ W 83_hdfs-网络拓扑-写入剖析2 g4 Z0 j& K; Z, K 84_...

Global site tag (gtag.js) - Google Analytics