你好,游客 登录
背景:
阅读新闻

MapReduce编程实战

[日期:2014-04-23] 来源:Linux社区  作者:puma_dong [字体: ]

  MapReduce是什么

  MapReduce是hadoop(这种大数据处理生态环境)的编程模型。既然称为模型,则意味着它有固定的形式。

  MapReduce编程模型,就是Hadoop生态环境进行数据分析处理的固定的编程形式。

  这种固定的编程形式描述如下:

  MapReduce任务过程被分为两个阶段:map阶段和reduce阶段。每个阶段都以键/值对作为输入和输出,并由程序员选择他们的类型。

  也就是说,程序员只需要定义两个函数:map函数和reduce函数就好了,其他的计算过程交给hadoop就好了。

  通过以上描述,我们可以看出:

  MapReduce所能处理的场景实际是非常具体的,非常有限的,只是“数据的统计分析”场景。

  输入数据准备

  天气预报官方网址:ftp://ftp.ncdc.noaa.gov/pub/data/gsod/

  但是,发现这个官方网址的文件格式和《Hadoop权威指南》( http://www.linuxidc.com/Linux/2012-07/65972.htm )所用的格式不一致,不知道是时间久了,官网的格式变了,还是作者对原始格式进行过处理,亦或这个网址根本不对,所以继而又到《Hadoop权威指南》指定的地址下载了一个,地址如下:

  https://github.com/tomwhite/hadoop-book/tree/master/input/ncdc/all

  如果简单测试,也可以把下面这几行粘贴到一个文本文件也行,这就是正确的天气文件:

  0035029070999991902010113004+64333+023450FM-12+000599999V0201401N011819999999N0000001N9-01001+99999100311ADDGF104991999999999999999999MW1381

  0035029070999991902010120004+64333+023450FM-12+000599999V0201401N013919999999N0000001N9-01171+99999100121ADDGF108991999999999999999999MW1381

  0035029070999991902010206004+64333+023450FM-12+000599999V0200901N009819999999N0000001N9-01611+99999100121ADDGF108991999999999999999999MW1381

  0029029070999991902010213004+64333+023450FM-12+000599999V0200901N011819999999N0000001N9-01721+99999100121ADDGF108991999999999999999999

  0029029070999991902010220004+64333+023450FM-12+000599999V0200901N009819999999N0000001N9-01781+99999100421ADDGF108991999999999999999999

  本文中,我们把存储天气格式的文本文件命名为:temperature.txt

  MapReduce Java编程

  有两套JavaAPI,旧的是org.apache.hadoop.mapred包,MapReduce编程是使用实现接口的方式;新的是org.apache.hadoop.marreduce包,MapReduce编程是使用继承抽象基类的方式;其实都差不多,下面都会有显示。

  Maven

  <dependency>

  <groupId>org.apache.hadoop</groupId>

  <artifactId>hadoop-core</artifactId>

  <version>1.0.4</version>

  </dependency>

  也可以不用官方的,用别人修改重新编译过的,可以直接在Eclipse里面像运行普通Java程序一样运行MapReduce。

  编译过的hadoop-core-1.0.4.jar,可以在本地模拟MapReduce

  如果Eclipse workspace在d:,则我们可以把d:的某个目录,比如d:\input作为输入目录;d:\output作为输出目录。

  MapReduce编程模型里面这样写就可以了:

  FileInputFormat.setInputPaths(job, new Path("/input"));

  FileOutputFormat.setOutputPath(job, new Path("/output"));





收藏 推荐 打印 | 录入: | 阅读:
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数
点评:
       
评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款