文档章节

hadoop整合mongdb

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

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
博文 159
码字总数 102864
作品 0
杭州
论坛的个位老大,这个问题你们遇到过么

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

开源oschina
2014/05/07
282
5
Spring整合Mongodb 控制事务

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

一个人眺望碧海和蓝天
2014/12/24
4K
3
mongdb和hadoop

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

陈舵主
2013/06/28
268
4
hadoop特性讲解

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

yope
2015/11/22
216
1
在JAVA中使用MongoDB

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

kakakakaka
2014/11/23
0
2

没有更多内容

加载失败,请刷新页面

加载更多

下一页

高三暑假我是怎么想开去学linux系统的

高三的时候,我有一句口头禅:“老了老了,现在做题越来越迟钝了”。当时整天日夜苦读,体重日益增加,脸色越来越黯淡,我在终于熬过了高考的时候,简直心里面乐得开了花。我终于可以去做自己...

linuxprobe16
26分钟前
0
0
Python 获得命令行参数的方法

需要模块:sys 参数个数:len(sys.argv) 脚本名: sys.argv[0] 参数1: sys.argv[1] 参数2: sys.argv[2]

编程老陆
33分钟前
0
0
链队

队列用链表来表示时,需要用两个变量来记录队列两端的变化:theFront,theBack. 根据链接方向的不同,链队有两种链接方式(其实就是链表的头插入节点和尾插入节点,头删除节点和尾删除节点)。...

Frost729
36分钟前
0
0
IDEA toString() json模板

public java.lang.String toString() {java.lang.StringBuilder builder = new java.lang.StringBuilder();#set ($i = 0)#foreach ($member in $members)#if ($i == 0)builder.appen......

Mtok
46分钟前
0
0
Dubbo内核实现之SPI简单介绍

Dubbo采用微内核+插件体系,使得设计优雅,扩展性强。那所谓的微内核+插件体系是如何实现的呢!即我们定义了服务接口标准,让厂商去实现(如果不了解spi的请谷歌百度下), jdk通过ServiceLo...

明理萝
51分钟前
0
1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部