Hadoop点滴-初识MapReduce(1)
2024-09-01 08:05:47
- 分析气候数据,计算出每年全球最高气温(P25页)
- Map阶段:输入碎片数据,输出一系列“单键单值”键值对
- 内部处理,将一系列“单键单值”键值对转化成一系列“单键多值”键值对
- Reduce阶段,输入“单键多值”键值对,输出具体结果
- Mapper类是一个泛型类型,它有四个形参类型,分别制定map函数的输入键、输入值、输出键、输出值的类型。
- Hadoop本身提供了一套可优化网络序列化传输的基本类型,而不直接使用java内嵌的类型。这些类型都在org.apache.hadoop.io包中
- Reduce函数也有四个形式参数,用于指定输入和输出类型
- reduce函数的输入类型,必须匹配map函数的输出类型
- 在Hadoop上运行作业时,要把代码打包成JAR文件。Job不在乎JAR的名称,在乎JAR中主函数所在类的名称
- 构造job对象后,需要指定输入和输出数据的路径,调用FileInputFormat类的静态方法addInputPath()来定义输入数据的路径。这个路径可以是单个文件、一个目录、或复合特定模式的一些列文件。该函数可调用多次,实现多路径输入
- 调用FileOutputFormat类中的静态方法setOutputPath()来制定输出路径(只能有一个输出路径),且该路径是不应该存在的。
- 通过setOutputKeyClass()、setOutputValueClass()方法控制reduce函数的输出类型,必须和reduce类产出的向匹配
- map函数的输出类型默认情况下和reduce函数是相同的,不需要单独设置;如果不同,调用setMapOutputKeyClass、setMapOutputValueClss来设置map函数的输出类型
- FileInputFormat函数负责完成数据分块,并传递给map
- hadoop 的map key是如何来划分:
- 一般的hadoop任务,有三段传输要搞清楚,首先是hadoop整理给map的输入map(key1,value1),这段默认是各个文件的每一行作为输入,此时key1是此行在文件中的偏移量,value1则是行号;其次是map输出(key2,value2)这段是给reduce做为输入的,也就是reduce(key2,inter<value2>)的输入;第三部分是reduce输出(key3,value3)。
map的key一般不是考虑的因素,考虑更多是value的值,比如每个文件做输入,文件内容才是最重要;每行做输入,行内容才是重要。
- 一般的hadoop任务,有三段传输要搞清楚,首先是hadoop整理给map的输入map(key1,value1),这段默认是各个文件的每一行作为输入,此时key1是此行在文件中的偏移量,value1则是行号;其次是map输出(key2,value2)这段是给reduce做为输入的,也就是reduce(key2,inter<value2>)的输入;第三部分是reduce输出(key3,value3)。
- 运行job(Hadoop会启动一个JVM来运行这个类,所以可以通过FileInputFormat静态方法设置输出路径)
export HADOOP_CLASSPATH=hadoop-examples.jar
hadoop MaxTemperature(类名) input/ncdc/sample.txt(参数一,输入文件路径,本地文件系统) output(参数二,输出文件路径,本地文件系统)
最新文章
- mysql多字段排序
- net core 控制台中文乱码的解决方案
- 个人作业-Week3
- 饭团(1):用NABCD大法为项目奠基
- C++中static用法总结
- 讽刺的是,我在linux下使用最多的命令,竟然是windows的
- SharePoint - 添加图片到Survey的某一问题之上
- find-all-duplicates-in-an-array(典型的数组中的重复数,不错,我做出来了,可是发现别人有更好的做法)
- ImageView 缩放
- Spring MVC使用@ResponseBody返回JSON数据406以及乱码问题解决方案
- 针对苹果最新审核要求 为应用兼容IPv6
- OCA读书笔记(13) - 性能管理
- java程序员常见面试题目
- tomcat配置JNDI获取数据源
- win下开机不登陆系统自动运行程序的解决方案
- SecureCRT8.1发送命令到多个或所有linux终端
- JMeter学习FTP测试计划(转)
- 声明式调用---Feign
- CentOS7搭建jdk
- 非常棒的轨迹插件Better Trails v1.4.6
热门文章
- Java多线程之线程的生命周期
- 栅格数据的批量镶嵌(附Python脚本)
- SqlServer关于“无法删除数据库 ";XXXX";,因为该数据库当前正在使用”问题的解决方案
- d3.js 教程 模仿echarts legend功能
- 系统模块 OS
- CFdiv2 165E. Compatible Numbers 子集枚举
- CodeForces - 697C-Lorenzo Von Matterhorn(有点像LCA,原创
- poj 3026 Borg Maze(最小生成树+bfs)
- Erlang模块gen_fsm翻译
- super(classname,self).__init__() 作用