《Hadoop实战手册》一1.9 使用Pig从HDFS导出数据到MongoDB

1.9 使用Pig从HDFS导出数据到MongoDB

MongoDB是一种NoSQL数据库,用于存储和检索海量数据。MongoDB通常用于存储面向用户的数据,这些数据必须经过清洗、格式化之后才可以被使用。Apache Pig从某种程度上讲就是用来处理这种任务的。Mongostorage类使得使用Pig可以非常方便地批量处理HDFS上的数据,再直接将这些数据导入MongoDB中。本节将使用Mongostorage类将HDFS上的数据导出到MongoDB数据库中。

准备工作
使用Mongo Hadoop适配器最简单的方法是从GitHub上克隆Mongo-Hadoop工程,并且将该工程编译到一个特定的Hadoop版本。克隆该工程需要安装一个Git客户端。

本节假定你使用的Hadoop版本是CDH3。

Git客户端官方的下载地址是:http://git-scm.com/downloads。

在Windows操作系统上可以通过http://windows.github.com/访问GitHub。

在Mac操作系统上可以通过http://mac.github.com/访问GitHub。

可以通过https://github.com/mongodb/mongo-hadoop获取到Mongo Hadoop适配器。该工程需要编译在特定的Hadoop版本上。编译完的JAR文件需要复制到Hadoop集群每个节点的$HADOOP_HOME/lib目录下。

Mongo Java的驱动包也需要安装到Hadoop集群每个节点的$HADOOP_HOME/lib目录下。该驱动包可从https://github.com/mongodb/mongo-java-driver/downloads下载。

操作步骤
完成下面的步骤,将数据从HDFS复制到MongoDB。

1.通过下面的命令实现克隆mongo-hadoop工程:

git clone https://github.com/mongodb/mongo-hadoop.git

2.切换到稳定发布的1.0分支版本:

git checkout release-1.0

3.必须保持mongo-hadoop与Hadoop的版本一致。使用文本编辑器打开mongo-hadoop克隆目录下的build.sbt文件,修改下面这行:

hadoopRelease in ThisBuild := "default"

修改为:

hadoopRelease in ThisBuild := "cdh3"

4.编译mongo-hadoop:

./sbt package.

这将会在core/target文件夹下生成一个名为mongo-hadoop-core_cdh3u3-1.0.0.jar的JAR文件。

5.从https://github.com/mongodb/mongo-java-driver/downloads下载MongoDB 2.8.0版本的Java驱动包。

6.复制mongo-hadoop-core、mongo-hadoop-pig和MongoDB Java驱动包到Hadoop集群每个节点的$HADOOP_HOME/lib:

cp mongo-hadoop-core_cdh3u3-1.0.0.jar mongo-2.8.0.jar $HADOOP_HOME/lib

7.创建一个Pig脚本读取HDFS上的weblogs数据并将其存储到MongoDB数据库:

register /path/to/mongo-hadoop/mongo-2.8.0.jar
register /path/to/mongo-hadoop/core/target/mongo-hadoop-core- 1.0.0.jar
register /path/to/mongo-hadoop/pig/target/mongo-hadoop-pig- 1.0.0.jar 

define MongoStorage com.mongodb.hadoop.pig.MongoStorage(); 

weblogs = load '/data/weblogs/weblog_entries.txt' as
               (md5:chararray, url:chararry, date:chararray, time:chararray,
               ip:chararray); 

store weblogs into 'mongodb://<HOST>:<PORT>/test.weblogs_from_pig' using
MongoStorage();

工作原理
Mongo Hadoop适配器提供了一种新的兼容Hadoop的文件系统实现,包括MongoInputFormat和MongoOutputFormat。这些抽象实现使得访问MongoDB和访问任何兼容Hadoop的文件系统一样。MongoStorage将Pig类型转化为MongoDB可以直接访问的BasicDBObjectBuilder类型。

时间: 2024-08-06 21:49:41

《Hadoop实战手册》一1.9 使用Pig从HDFS导出数据到MongoDB的相关文章

《Hadoop实战手册》一1.7 从HDFS导出数据到MongoDB

1.7 从HDFS导出数据到MongoDB 本节将使用MongoOutputFormat类加载HDFS中的数据并收集到MongoDB中. 准备工作使用Mongo Hadoop适配器最简单的方法是从GitHub上克隆 Mongo-Hadoop工程,并且将该工程编译到一个特定的Hadoop版本.克隆该工程需要安装一个Git客户端. 本节假定你使用的Hadoop版本是CDH3. Git客户端官方的下载地址是:http://git-scm.com/downloads. 在Windows操作系统上可以通过

《Hadoop实战手册》一1.11 利用Flume加载数据到HDFS中

1.11 利用Flume加载数据到HDFS中 Apache Flume是Hadoop社区的一个项目,由多个相关项目组成,用于从不同的数据源可靠有效地加载数据流到HDFS中.Flume最常见的一个场景是加载多个数据源的网站日志数据.本节将介绍如何使用Flume加载数据到HDFS中. 准备工作在本节中假定你已经安装和配置好Flume. Flume可以从Apache网页(http://incubator.apache.org/flume/)下载. 如果你使用的是CDH3,那么默认已经安装了Flume

《Hadoop实战手册》一导读

前 言 Hadoop实战手册 本书能帮助开发者更方便地使用Hadoop,从而熟练地解决问题.读者会更加熟悉Hadoop相关的各种工具从而进行最佳的实践. 本书指导读者使用各种工具解决各种问题.这些工具包括:Apache Hive.Pig.MapReduce.Mahout.Giraph.HDFS.Accumulo.Redis以及Ganglia. 本书提供了深入的解释以及代码实例.每章的内容包含一组问题集的描述,并对面临的技术挑战提出了解决方案,最后完整地解决了这些问题.每节将单一问题分解成不同的步

《Hadoop实战手册》一第1章 Hadoop分布式文件系统——导入和导出数据

第1章 Hadoop分布式文件系统--导入和导出数据 Hadoop实战手册 本章我们将介绍: 使用Hadoop shell命令导入和导出数据到HDFS 使用distcp实现集群间数据复制 使用Sqoop从MySQL数据库导入数据到HDFS 使用Sqoop从HDFS导出数据到MySQL 配置Sqoop以支持SQL Server 从HDFS导出数据到MongoDB 从MongoDB导入数据到HDFS 使用Pig从HDFS导出数据到MongoDB 在Greenplum外部表中使用HDFS 利用Flum

《Hadoop实战手册》一1.4 使用Sqoop从MySQL数据库导入数据到HDFS

1.4 使用Sqoop从MySQL数据库导入数据到HDFS Sqoop是Apache基金下的一个项目,是庞大Hadoop生态圈中的一部分.在很多方面Sqoop和distcp很相似(见1.3节).这两个工具都是构建在MapReduce之上的,利用了MapReduce的并行性和容错性.与集群间的数据复制不同,Sqoop设计通过JDBC驱动连接实现Hadoop集群与关系数据库之间的数据复制. 它的功能非常广泛,本节将以网络日志条目为例展示如何使用Sqoop从MySQL数据库导入数据到HDFS. 准备工

《Hadoop实战手册》一1.5 使用Sqoop从HDFS导出数据到MySQL

1.5 使用Sqoop从HDFS导出数据到MySQL Sqoop是Apache基金会下的一个项目,是庞大Hadoop生态圈中的一部分.在很多方面Sqoop和distcp很相似(见1.3节).这两个工具都是构建在MapReduce之上的,利用了MapReduce的并行性和容错性.与集群间的数据复制不同,Sqoop设计通过JDBC驱动连接实现Hadoop集群与关系数据库之间的数据复制. 它的功能非常广泛,本节将以网络日志条目为例展示如何使用Sqoop从HDFS导入数据到MySQL数据库. 准备工作

《Hadoop实战手册》一1.2 使用Hadoop shell命令导入和导出数据到HDFS

1.2 使用Hadoop shell命令导入和导出数据到HDFS HDFS提供了许多shell命令来实现访问文件系统的功能,这些命令都是构建在HDFS FileSystem API之上的.Hadoop自带的shell脚本是通过命令行来执行所有操作的.这个脚本的名称叫做hadoop,通常安装在$HADOOP_BIN目录下,其中$HADOOP_BIN是Hadoopbin文件完整的安装目录,同时有必要将$HADOOP_BIN配置到$PATH环境变量中,这样所有的命令都可以通过hadoop fs -co

《Hadoop实战手册》一1.8 从MongoDB导入数据到HDFS

1.8 从MongoDB导入数据到HDFS 本节将使用MongoInputFormat类加载MongoDB中的数据导入HDFS中. 准备工作 使用Mongo Hadoop适配器最简单的方法是从GitHub上克隆Mongo-Hadoop工程,并且将该工程编译到一个特定的Hadoop版本.克隆该工程需要安装一个Git客户端. 本节假定你使用的Hadoop版本是CDH3. Git客户端官方的下载地址是:http://git-scm.com/downloads. 在Windows操作系统上可以通过htt

《Hadoop实战手册》一1.6 配置Sqoop以支持SQL Server

1.6 配置Sqoop以支持SQL Server 本节将展示如何配置Sqoop和SQL Server数据库进行连接.这样可以允许数据从SQL Server数据库有效地导入HDFS中. 准备工作 本例子使用了Sqoop V1.3.0版本. 如果你使用的是CDH3版本,Sqoop默认是已经安装了.如果不是CDH3,你可以通过https://ccp.cloudera.com/display/CDHDOC/Sqoop+Installation找到发行版的说明. 在本节假设你已经启动了一个Microsof