Hadoop数据分析与应用 MapReduce(一)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

技术讲解
实践练习
实践时间: 25 分钟
1. 使用 Hadoop 内置 jar 文件进行单词计数统计
3.1.1 MapReduce 的概念
MapReduce 是一种编程模型,用于大规模数据集(大于 1TB)的并行运算。 概念 Map(映射)和 Reduce(归约)是它们的主要思想,都是从函数式和矢量
3.1.4 MapReduce 执行流程
MapReduce 执行流程是先执行 Map 后执行 Reduce 的过程
3.1.4 MapReduce 执行流程
Map 任务处理
读取 HDFS 中的文件,每一行解析成一个 <k,v>,每一个键值对调用一次 map() 方法 覆盖 map() 方法,接收上一步产生的 <k,v> 进行处理,转换为新的 <k,v> 输出 对上一步输出的 <k,v> 进行分区,并默认分为一个区 对不同分区中的数据按照 k 进行排序和分组。分组指的是相同 key 的 value 放到一个集合中 对分组后的数据进行归约(可选)
public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException { Configuration conf = new Configuration(); Job job = Job.getInstance(conf); job.setJarByClass(MapReduceDemo.class); job.setMapperClass(WCMap.class); job.setReducerClass(WCReduce.class); job.setMapOutputKeyClass(Text.class); job.setMapOutputValueClass(LongWritable.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(LongWritable.class); Path inputPath = new Path("/data"); Path outputPath = new Path("/output"); FileInputFormat.setInputPaths(job, inputPath); FileOutputFormat.setOutputPath(job, outputPath); boolean waitForCompletion = job.waitForCompletion(true); System.exit(waitForCompletion?0:1);
Driver 类:负责与 Hadoop 框架通信,并指定运行 MapReduce 作业所需的配置元素的驱 动程序
3.2.3 编写 MapReduce 程序
实现一个 WordCount 程序,并将 WordCount 程序打包发布到 Hadoop 集群
中运行。
创建 Mapper 子类继承 Mapper 基类
String[] splited=value.toString().split(" "); for(String str :splited) {
context.write(new Text(str),new LongWritable(1)); } } }
3.2.3 编写 MapReduce 程序
创建 Reducer 子类继 承 Reducer 基类
3.2.1 新旧 API 的差异
adoop 在 0.20.0 版本中第一次使用新的 API,部分早期的 Hadoop 0.20.0 版本 不支持使用旧的 API,但在接下来的 Hadoop 1.x 和 Hadoop 2.x 版本中新旧 API 都可以使用
3.2.1 新旧 API 的差异
新旧 API 的差异主要有以下 9 点:
需求说明
实践时间: 25 分钟
上传一个英文文档,使用 hadoop-mapreduce-example2.7.3.jar 对英文文档进行单词计数的统计。
3.1.6 学生实践练习
实现思路
上传文件到 HDFS 系统;使用“hadoop fs -put <localsrc> ... <dst>” 命令将文件上传到 HDFS。
MapReduce 提供了以下主要功能:
数据拆分和计算任务调度 数据与代码互定位 系统优化 出错检测和恢复
3.1.3 MapReduce 键值对
MapReduce 的 <key,value> 存储模型能够存储任意格式的数据,Map() 方法和 reduce() 方法可以进行各种复杂的数据处理,这也使得程序员的负担加重,在对 上层业务的开发效率上不如 SQL 简单。
public class WCReduce extends Reducer<Text, LongWritable,Text, LongWritable> { @Override protected void reduce(Text text, Iterable<LongWritable> iterable,Reducer<Text, LongWritable,Text,LongWritable>.Context context) throws IOException,InterruptedException {
Reducer 类:Reducer reduces 是 一 组 中 间 值, 这 些 值 通 过 key 组 成 较 小 的 单 元。 作 业 的 reduces 数 由 用 户 通 过 Java.StUnNoTrimeTebug(int)方法设置。常见方法: reduce()、 setup()、cleanup()、run()
MapReduce 在速度上会占有一定优势,MapReduce 是为非结构化大数据的复 杂处理而设计的,这些业务具有一次性处理的特点;此外由于采取了全数据扫描 的模式以及对中间结果逐步汇总的策略,使其在拥有良好扩展能力和容错能力的 同时,也导致了较高的磁盘和网络 I/O 的负载以及较高的数据解析代价。
使用“hadoop jar”命令执行 Java 程序;使用 hadoop-mapreduceexample-2.7.3.jar 这个 jar 包中的wordcount() 方法进行单词计数。
最后使用浏览器通过 50070 端口访问站点,并在文件系统中下载文件, 查看统计结果。
Hadoop 分布式模式搭建
org.apache.hadoop.mapreduce 包提供了 Mapper 和 Reduce 基类。在大多 数情况下,MapReduce 作业会使用以上两个基类实现针对该作业的 Mapper 和 Reduce 的子类。
Mapper 类:Mapper maps 将键值对输入到一组中间的键值对。maps 是将输入记录转换为 中间记录的单个任务,转换后的中间记录与输入记录的类型不一定是相同的。常见方法: map() 、setup()、cleanup()、run()
public class WCMap extends Mapper<LongWritable, Text, Text, LongWritable> { @Override protected void map(LongWritable key, Text value, Mapper<LongWritable, Text, Text,LongWritable>.Context context) throws IOException, InterruptedException {
讲解时间: 20 分钟
1. 新旧 API 的差异 2. MapReduce Java API 的介绍 3. 编写 MapReduce 程序 4. 运行 MapReduce 程序 5. Combiner 的介绍
技术讲解
实践练习
实践时间: 25 分钟
1. 编写 MapReduce 实现 气象数据最高温与最低温 统计
long time=0; for(LongWritable lw :iterable) {
time+=lw.get(); } context.write(text, new LongWritable(time)); } }
3.2.3 编写 MapReduce 程序
创建 Driver 对象并封装 MapReduce 作业类的相 关方法
Hadoop 的发布包中内置了一个 hadoop-mapreduce-examples-2.7.3.jar 供用 户使用,该安装包位于安装目录下的 share/hadoop/mapreduce 文件夹中,该 jar 包中有各种 MR 示例程序
3.1.5 MapReduce 程序运行
以单词计数为例,可以通过以下步骤运行:
关闭服务器防火墙 格式化 NameNode 系统 启动 HDFS 启动 YARN 通过网页管理端访问
回顾
HDFS 的设计特点:
能够存储超大文件 流式数据访问 商用硬件 不能处理低时间延迟的数据访问 不能存放大量小文件 无法高效实现多用户写入或者任意修改文件
封装
1 MapReduce 执行流程 2 MapReduce 编写与运行 3 Hadoop 序列化与反序列化 4 Hadoop 分区
新的 API 放在 org.apache.hadoop.mapreduce 包中,旧的 API 放在 org.apache.hadoop.mapred 中 新 API 倾向于使用抽象类,而不是接口,更有利于扩展 新 API 充分使用上下文对象 context,允许用户能与 MapReduce 系统通信 键值对记录在这两类 API 中都被推给了 Mapper 和 Reducer,除此之外,新的 API 通过重写 run() 方法,允
现中断响应。 在新的 API 中,reduce() 传递的值是 ng.Iterable 类型的,而非旧 API 中传递的 ng.Iterator 类
型。这一改变使我们更容易通过 Java 的 for-each 循环结构来迭代这些值。
3.2.2 MapReduce Java API 的介绍
启动 HDFS 与 YARN。 上传需要统计的文件到 HDFS 下的 data 目录。 在集群中的任意一台服务器上启动执行程序。
输入:hadoop jar hadoop-mapreduce-example-2.7.3.jar wordcount /data /output
3.1.6 学生实践练习
许 Mapper 和 Reducer 控制数据执行流程,允许数据按条处理或者分批处理。旧的 API 只在 Map 中允许。 新的 API 中,作业控制由 Job 类实现,而非旧 API 中的 JobClient 类,新的 API 中删除了 JobClient 类 新增的 API 实现了配置的统一 输出文件的命名方式略有不同 新 API 中的用户重载函数(ng.InterruptedException)被声明为抛出异常,这意味着可以用代码来实
3.ห้องสมุดไป่ตู้.4 MapReduce 执行流程
Reduce 任务处理
多个 Map 任务的输出,按照不同的分区,通过网络 Copy 到不同的 Reduce 节点上 对多个 Map 的输出进行合并和排序 将 Reduce 输出的 <k,v> 写到 HDFS 中
3.1.5 MapReduce 程序运行
Hadoop数据分析与应用
第3章 MapReduce(一)
回顾
Hadoop 分布式模式配置与启动步骤:
配置 Hadoop 配置文件,包括 core-site.xml、hdfs-site.xml、mapred-site.xml、yarnsite.xml 和slaves
远 程 拷 贝 资 源, 将 Master 上 的 jdk 文 件 夹、hadoop 文 件 夹、hadoop-record 文 件 夹 以 及 环 境 变 量hadoop-eco.sh 远程拷贝到其他机器上
编程语言里借来的特性,它极大地方便了编程人员在不会分布式并行编程的情况 下,将自己的程序运行在分布式系统上。 Hadoop MapReduce 是一个易于编写应用程序的软件框架,该应用程序以可靠、 容错的方式并行处理大量硬件(数千个节点)上的大量数据(多兆字节数据集)。
3.1.2 MapReduce 的功能
1 使用 Hadoop 内置 jar 文件进行单词计数统计 2 编写 MapReduce 实现气象数据最高温与最低温统计 3 使用 Hadoop 序列化与反序列化进行用户流量统计 4 使用 Hadoop 分区根据用户类型进行分区统计
定义属性
讲解时间: 20 分钟
1. MapReduce 的概念 2. MapReduce 的功能 3. MapReduce 键值对 4. MapReduce 执行流程 5. MapReduce 程序运行
相关文档
最新文档