文档章节

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
粉丝 59
博文 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

没有更多内容

加载失败,请刷新页面

加载更多

Shell特殊符号总结以及cut,sort,wc,uniq,tee,tr,split命令

特殊符号总结一 * 任意个任意字符 ? 任意一个字符 # 注释字符 \ 脱义字符 | 管道符 # #号后的备注被忽略[root@centos01 ~]# ls a.txt # 备注 a.txt[root@centos01 ~]# a=1[root@centos01...

野雪球
28分钟前
1
0
OSChina 周二乱弹 —— 程序员圣衣

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @达尔文:分享Skeeter Davis的单曲《The End of the World》 《The End of the World》- Skeeter Davis 手机党少年们想听歌,请使劲儿戳(这里...

小小编辑
43分钟前
4
0
[ python import module ] 导入模块

import moudle_name ----> import module_name.py ---> import module_name.py文件路径 -----> sys.path (这里进行查找文件) # from app.web import Personimport app.web.Person as Pe......

_______-
昨天
3
0
Redis性能问题排查解决手册

一、性能相关的数据指标 通过Redis-cli命令行界面访问到Redis服务器,然后使用info命令获取所有与Redis服务相关的信息。通过这些信息来分析文章后面提到的一些性能指标。 nfo命令输出的数据可...

IT--小哥
昨天
1
0
mixin混入

①新建mixin.js文件 const mixin = { methods: { /** * 分页公共方法 */ handleSizeChange(val) { this.pageData.size = val; this.query(); }, hand......

不负好时光
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部