文档章节

hadoop整合mongdb

Java_Coder
 Java_Coder
发布于 2015/05/28 22:19
字数 637
阅读 52
收藏 3
点赞 0
评论 0

1、确保已经安装了mongdb

2、下载jar包

注意:列出了两个重要的jar包,其他的hadoop的jar包同样需要!

3、准备

数据格式是这种:

创建数据库和集合

4、代码实现

public class CityDis {

	private static class CityDisMapper extends
			Mapper<LongWritable, Text, Text, IntWritable> {

		@Override
		protected void map(LongWritable key, Text value,
				Mapper<LongWritable, Text, Text, IntWritable>.Context context)
				throws IOException, InterruptedException {

			if( value.toString().split(",")[5].contains(" ")){
				String outKey = value.toString().split(",")[5].split(" ")[1];
				context.write(new Text(outKey), new IntWritable(1));
			}

		}
	}

	private static class CityDisReduce extends
			Reducer<Text, IntWritable, NullWritable, BSONWritable> {

		@Override
		protected void reduce(Text key, Iterable<IntWritable> values,
				Reducer<Text, IntWritable, NullWritable, BSONWritable>.Context context)
				throws IOException, InterruptedException {

			int count = 0;
			for (IntWritable value : values) {
				count += value.get();
			}
			
			BasicBSONObject out = new BasicBSONObject();
			
			out.put("name",key.toString());
			out.put("value",count);
			
			context.write(NullWritable.get(), new BSONWritable(out));

		}

	}

	public static void main(String[] args) throws IOException,
			ClassNotFoundException, InterruptedException {

		Configuration configuration = HadoopConfig.getConfiguration();
		
		Job job = Job.getInstance(configuration, "地区分布");

		job.setJarByClass(CityDis.class);
		job.setMapperClass(CityDisMapper.class);
		job.setMapOutputKeyClass(Text.class);
		job.setMapOutputValueClass(IntWritable.class);
		job.setOutputKeyClass(NullWritable.class);
		job.setOutputValueClass(BSONWritable.class);
		job.setReducerClass(CityDisReduce.class);

		FileInputFormat.addInputPath(job, new Path("/data/user.txt"));
		job.setOutputFormatClass(MongoOutputFormat.class);		
		System.exit(job.waitForCompletion(true) ? 0 : 1);

	}
mongo-defaults.xml:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <property>
    <!-- run the job verbosely ? -->
    <name>mongo.job.verbose</name>
    <value>false</value>
  </property>
  <property>
    <!-- Run the job in the foreground and wait for response, or background it? -->
    <name>mongo.job.background</name>
    <value>false</value>
  </property>
  <property>
      <!-- The field to pass as the mapper key. Defaults to _id if blank -->
      <name>mongo.input.key</name>
      <value></value>
  </property>
  
  <!--我们可以从这里来设置读取mongdb数据的位置-->
  <!--<property>
    <name>mongo.input.uri</name>
    <value>mongodb://127.0.0.1/bigdata.test</value>    
  </property>-->
  
  <property>
    <!-- If you are writing to mongo, the URI -->
    <name>mongo.output.uri</name>
    <value>mongodb://127.0.0.1/bigdata.city_weibo</value>
  </property>
  <property>
    <!-- The query, in JSON, to execute [OPTIONAL] -->
    <name>mongo.input.query</name>
    <value></value>
  </property>
  <property>
    <!-- The fields, in JSON, to read [OPTIONAL] -->
    <name>mongo.input.fields</name>
    <value></value>
  </property>
  <property>
    <!-- A JSON sort specification for read [OPTIONAL] -->
    <name>mongo.input.sort</name>
    <value></value>
  </property>
  <property>
    <!-- The number of documents to limit to for read [OPTIONAL] -->
    <name>mongo.input.limit</name>
    <value>0</value> <!-- 0 == no limit -->
  </property>
  <property>
    <!-- The number of documents to skip in read [OPTIONAL] -->
    <!-- TODO - Are we running limit() or skip() first? -->
    <name>mongo.input.skip</name>
    <value>0</value> <!-- 0 == no skip -->
  </property>
  <property>
    <!-- IF you want to control the split size for input, set it here.
      Should be a long indicating # of docs per split
      Affects # of mappers so be careful what you do -->
    <name>mongo.input.split_size</name>
  </property>
  <!-- These .job.* class defs are optional and only needed if you use the MongoTool baseclass -->
  <property>
    <!-- Class for the mapper -->
    <name>mongo.job.mapper</name>
    <value></value>
  </property>
  <property>
    <!-- Reducer class -->
    <name>mongo.job.reducer</name>
    <value></value>
  </property>
  <property>
    <!-- InputFormat Class -->
    <name>mongo.job.input.format</name>
    <!-- <value>com.mongodb.hadoop.MongoInputFormat</value> -->
    <value></value>
  </property>
  <property>
    <!-- OutputFormat Class -->
    <name>mongo.job.output.format</name>
    <!-- <value>com.mongodb.hadoop.MongoOutputFormat</value> -->
    <value></value>
  </property>
  <property>
    <!-- Output key class for the output format -->
    <name>mongo.job.output.key</name>
    <value></value>
  </property>
  <property>
    <!-- Output value class for the output format -->
    <name>mongo.job.output.value</name>
    <value></value>
  </property>
  <property>
    <!-- Output key class for the mapper [optional] -->
    <name>mongo.job.mapper.output.key</name>
    <value></value>
  </property>
  <property>
    <!-- Output value class for the mapper [optional] -->
    <name>mongo.job.mapper.output.value</name>
    <value></value>
  </property>
  <property>
    <!-- Class for the combiner [optional] -->
    <name>mongo.job.combiner</name>
    <value></value>
  </property>
  <property>
    <!-- Partitioner class [optional] -->
    <name>mongo.job.partitioner</name>
    <value></value>
  </property>
  <property>
    <!-- Sort Comparator class [optional] -->
    <name>mongo.job.sort_comparator</name>
    <value></value>
  </property>
</configuration>

5、运行效果

© 著作权归作者所有

共有 人打赏支持
Java_Coder
粉丝 58
博文 155
码字总数 102864
作品 0
杭州
论坛的个位老大,这个问题你们遇到过么

在此,跪拜 你们有木有一个springmvc+mybates+maven+mongdb 的框架!!! 以前是用的mysql整合的 mongdb跟mysql、oracle等不一样 请大神发一个整合的,让小弟参考参考 以前的整合 spring.xml...

开源oschina ⋅ 2014/05/07 ⋅ 5

Spring整合Mongodb 控制事务

@红薯 你好,想跟你请教个问题:最近在研究非关系数据库 Mongodb整合Spring怎么控制事务,好像Mongdb没有控制事务的机制

一个人眺望碧海和蓝天 ⋅ 2014/12/24 ⋅ 3

mongdb和hadoop

请问下大家,假如有一批大数据需要查询,给定的机器是同样的,mongodb和hadoop哪个查的更快? 还有hadoop内部的排序是怎么排的?mongodb内部的排序是怎么排的? 这2个我都没用过,求普及啊...

陈舵主 ⋅ 2013/06/28 ⋅ 4

hadoop特性讲解

1.Hadoop是什么?2.Hadoop能做什么? 这两个问题,我相信大家都比较的关心。那么我们就来聊聊它们。 首先,Hadoop是一个由Apache基金会所开发的分布式系统基础架构。 Hadoop是一个能够让用户...

yope ⋅ 2015/11/22 ⋅ 1

java开发须知

ant maven vss cvs svn git rose staruml powerdeisgn visio bugzilla javame javase javaweb javaee chrome ie firefox http https eclipse myeclipse springsts struts spring hibernate m......

aiscv ⋅ 2014/06/23 ⋅ 0

hadoop使用场景

大数据量存储:分布式存储 日志处理: Hadoop擅长这个 海量计算: 并行计算 ETL:数据抽取到oracle、mysql、DB2、mongdb及主流数据库 使用HBase做数据分析: 用扩展性应对大量的写操作—Faceboo...

一枚Sir ⋅ 2014/08/07 ⋅ 0

MongDB_插入详解

insert_api 1,结构 db.collection.insert( <document or array of documents>, { writeConcern: <document>, ordered: <boolean> }) 名称 类型 说明 document or docuemnts document 需要插入......

天呀鲁哇 ⋅ 2015/08/18 ⋅ 0

在JAVA中使用MongoDB

首先,下载mongdb对JAVA的支持,点击这里下载驱动包,这里博主下载的是2.10.1版。 mongdb版本为2.4.9 在项目中导入该驱动包。 打开shell,在终端输入mongo,显示如下 只有默认的三个数据库。...

kakakakaka ⋅ 2014/11/23 ⋅ 2

MongoDB 查询超时异常 SocketTimeoutException

在对超过百万条记录的集合进行聚合操作。 DBObject match=(DBObject)JSON.parse("{$match:{logType:{'$in':[5,9]}}}");DBObject group=(DBObject)JSON.parse("{$group:{'_id':'$domainUrl','......

忙碌的键盘 ⋅ 2015/03/04 ⋅ 9

Pydoop 架构和模块包介绍

背景 Hadoop支持Java以及C/C++开发,其中Hadoop Pipes(C++)支持MapReduce,而Hadoop libhdfs(C)支持HDFS的访问。但Python的解决方案仅能支持Hadoop部分功能,具体如下。 Hadoop Streaming:1...

索隆 ⋅ 2012/09/13 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Jenkins实践3 之脚本

#!/bin/sh# export PROJ_PATH=项目路径# export TOMCAT_PATH=tomcat路径killTomcat(){pid=`ps -ef | grep tomcat | grep java|awk '{print $2}'`echo "tom...

晨猫 ⋅ 今天 ⋅ 0

Spring Bean的生命周期

前言 Spring Bean 的生命周期在整个 Spring 中占有很重要的位置,掌握这些可以加深对 Spring 的理解。 首先看下生命周期图: 再谈生命周期之前有一点需要先明确: Spring 只帮我们管理单例模...

素雷 ⋅ 今天 ⋅ 0

zblog2.3版本的asp系统是否可以超越卢松松博客的流量[图]

最近访问zblog官网,发现zlbog-asp2.3版本已经进入测试阶段了,虽然正式版还没有发布,想必也不久了。那么作为aps纵横江湖十多年的今天,blog2.2版本应该已经成熟了,为什么还要发布这个2.3...

原创小博客 ⋅ 今天 ⋅ 0

聊聊spring cloud的HystrixCircuitBreakerConfiguration

序 本文主要研究一下spring cloud的HystrixCircuitBreakerConfiguration HystrixCircuitBreakerConfiguration spring-cloud-netflix-core-2.0.0.RELEASE-sources.jar!/org/springframework/......

go4it ⋅ 今天 ⋅ 0

二分查找

二分查找,也称折半查找、二分搜索,是一种在有序数组中查找某一特定元素的搜索算法。搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;如果某一特定元素大于...

人觉非常君 ⋅ 今天 ⋅ 0

VS中使用X64汇编

需要注意的是,在X86项目中,可以使用__asm{}来嵌入汇编代码,但是在X64项目中,再也不能使用__asm{}来编写嵌入式汇编程序了,必须使用专门的.asm汇编文件来编写相应的汇编代码,然后在其它地...

simpower ⋅ 今天 ⋅ 0

ThreadPoolExecutor

ThreadPoolExecutor public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, ......

4rnold ⋅ 昨天 ⋅ 0

Java正无穷大、负无穷大以及NaN

问题来源:用Java代码写了一个计算公式,包含除法和对数和取反,在页面上出现了-infinity,不知道这是什么问题,网上找答案才明白意思是负的无穷大。 思考:为什么会出现这种情况呢?这是哪里...

young_chen ⋅ 昨天 ⋅ 0

前台对中文编码,后台解码

前台:encodeURI(sbzt) 后台:String param = URLDecoder.decode(sbzt,"UTF-8");

west_coast ⋅ 昨天 ⋅ 0

实验楼—MySQL基础课程-挑战3实验报告

按照文档要求创建数据库 sudo sercice mysql startwget http://labfile.oss.aliyuncs.com/courses/9/createdb2.sqlvim /home/shiyanlou/createdb2.sql#查看下数据库代码 代码创建了grade......

zhangjin7 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部