当前位置: 首页 > news >正文

网站建设 广西合肥百度推广排名优化

网站建设 广西,合肥百度推广排名优化,网站建设找d云世家,外贸零售网站建设p67 课程介绍 p68概述 p69 mapreduce核心思想 p70 wordcount源码 序列化类型 mapReduce三类进程 p71 编程规范 用户编写的程序分成三个部分:Mapper、Reducer和Driver。 P72 wordcount需求案例分析 p 73 -78 案例环境准备 (1)创建maven…

p67 课程介绍

在这里插入图片描述

p68概述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

p69 mapreduce核心思想

在这里插入图片描述

p70 wordcount源码 序列化类型

mapReduce三类进程
在这里插入图片描述

在这里插入图片描述

p71 编程规范

用户编写的程序分成三个部分:Mapper、Reducer和Driver。
在这里插入图片描述
在这里插入图片描述

P72 wordcount需求案例分析

在这里插入图片描述

p 73 -78 案例环境准备

(1)创建maven工程,MapReduceDemo
(2)在pom.xml文件中添加如下依赖

<dependencies><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-client</artifactId><version>3.1.3</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.30</version></dependency>
</dependencies>

(2)在项目的src/main/resources目录下,新建一个文件,命名为“log4j.properties”,在文件中填入。

log4j.rootLogger=INFO, stdout  
log4j.appender.stdout=org.apache.log4j.ConsoleAppender  
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout  
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n  
log4j.appender.logfile=org.apache.log4j.FileAppender  
log4j.appender.logfile.File=target/spring.log  
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout  
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n

(3)创建包名:com.atguigu.mapreduce.wordcount
4)编写程序
(1)编写Mapper类

package com.atguigu.mapreduce.wordcount;
import java.io.IOException;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;public class WordCountMapper extends Mapper<LongWritable, Text, Text, IntWritable>{Text k = new Text();IntWritable v = new IntWritable(1);@Overrideprotected void map(LongWritable key, Text value, Context context)	throws IOException, InterruptedException {// 1 获取一行String line = value.toString();// 2 切割String[] words = line.split(" ");// 3 输出for (String word : words) {k.set(word);context.write(k, v);}}
}

(2)编写Reducer类

package com.atguigu.mapreduce.wordcount;
import java.io.IOException;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;public class WordCountReducer extends Reducer<Text, IntWritable, Text, IntWritable>{int sum;
IntWritable v = new IntWritable();@Overrideprotected void reduce(Text key, Iterable<IntWritable> values,Context context) throws IOException, InterruptedException {// 1 累加求和sum = 0;for (IntWritable count : values) {sum += count.get();}// 2 输出v.set(sum);context.write(key,v);}
}

(3)编写Driver驱动类

package com.atguigu.mapreduce.wordcount;
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;public class WordCountDriver {public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {// 1 获取配置信息以及获取job对象Configuration conf = new Configuration();Job job = Job.getInstance(conf);// 2 关联本Driver程序的jarjob.setJarByClass(WordCountDriver.class);// 3 关联Mapper和Reducer的jarjob.setMapperClass(WordCountMapper.class);job.setReducerClass(WordCountReducer.class);// 4 设置Mapper输出的kv类型job.setMapOutputKeyClass(Text.class);job.setMapOutputValueClass(IntWritable.class);// 5 设置最终输出kv类型job.setOutputKeyClass(Text.class);job.setOutputValueClass(IntWritable.class);// 6 设置输入和输出路径FileInputFormat.setInputPaths(job, new Path(args[0]));FileOutputFormat.setOutputPath(job, new Path(args[1]));// 7 提交jobboolean result = job.waitForCompletion(true);System.exit(result ? 0 : 1);}
}

本地测试

(1)需要首先配置好HADOOP_HOME变量以及Windows运行依赖
(2)在IDEA/Eclipse上运行程序

提交到集群测试

集群上测试
(1)用maven打jar包,需要添加的打包插件依赖

<build><plugins><plugin><artifactId>maven-compiler-plugin</artifactId><version>3.6.1</version><configuration><source>1.8</source><target>1.8</target></configuration></plugin><plugin><artifactId>maven-assembly-plugin</artifactId><configuration><descriptorRefs><descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs></configuration><executions><execution><id>make-assembly</id><phase>package</phase><goals><goal>single</goal></goals></execution></executions></plugin></plugins>
</build>

(2)将程序打成jar包

(3)修改不带依赖的jar包名称为 wc.jar,并拷贝该jar包到Hadoop集群的 /opt/module/hadoop-3.1.3 路径。
(4)启动Hadoop集群
[atguigu@hadoop102 hadoop-3.1.3]sbin/start-dfs.sh
[atguigu@hadoop103 hadoop-3.1.3]$ sbin/start-yarn.sh
(5)执行WordCount程序
[atguigu@hadoop102 hadoop-3.1.3]$ hadoop jar wc.jar
com.atguigu.mapreduce.wordcount.WordCountDriver /user/atguigu/input /user/atguigu/output

p79-86 序列化案例

在这里插入图片描述
在这里插入图片描述
编写MapReduce程序

package com.atguigu.mapreduce.writable;import org.apache.hadoop.io.Writable;import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;public class FlowBean implements Writable {private  long upFlow;private  long downFlow;private  long sumFlow;public FlowBean() {}public long getUpFlow() {return upFlow;}public void setUpFlow(long upFlow) {this.upFlow = upFlow;}public long getDownFlow() {return downFlow;}public void setDownFlow(long downFlow) {this.downFlow = downFlow;}public long getSumFlow() {return sumFlow;}public void setSumFlow() {sumFlow= upFlow+downFlow;}@Overridepublic void write(DataOutput out) throws IOException {out.writeLong(upFlow);out.writeLong(downFlow);out.writeLong(sumFlow);}@Overridepublic void readFields(DataInput in) throws IOException {upFlow = in.readLong();downFlow = in.readLong();sumFlow = in.readLong();}@Overridepublic String toString() {return upFlow + "\t" + downFlow + "\t" + sumFlow;}
}
package com.atguigu.mapreduce.writable;import com.sun.org.apache.bcel.internal.generic.NEW;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;import javax.sound.sampled.Line;
import java.io.IOException;public class FlowMapper extends Mapper<LongWritable, Text,Text,FlowBean> {FlowBean flowBean = new FlowBean();Text keyPhone = new Text();@Overrideprotected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {String line = value.toString();String[] arr = line.split("\t");String phone=arr[1];String up=arr[arr.length-3];String down=arr[arr.length-2];keyPhone.set(phone);flowBean.setUpFlow(Long.parseLong(up));flowBean.setDownFlow(Long.parseLong(down));flowBean.setSumFlow();context.write(keyPhone,flowBean);}
}
package com.atguigu.mapreduce.writable;import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;import java.io.IOException;public class FlowReducer extends Reducer<Text,FlowBean,Text,FlowBean> {private FlowBean reduceFlowBean=new FlowBean();@Overrideprotected void reduce(Text key, Iterable<FlowBean> values, Context context) throws IOException, InterruptedException {long up=0;long down=0;for (FlowBean flowBean: values) {up+=flowBean.getUpFlow();down+=flowBean.getDownFlow();}reduceFlowBean.setUpFlow(up);reduceFlowBean.setDownFlow(down);reduceFlowBean.setSumFlow();context.write(key,reduceFlowBean);}
}
package com.atguigu.mapreduce.writable;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;import java.io.IOException;public class FlowDriver  {public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {Configuration config = new Configuration();Job job = Job.getInstance(config);job.setJarByClass(FlowDriver.class);job.setMapperClass(FlowMapper.class);job.setReducerClass(FlowReducer.class);job.setMapOutputKeyClass(Text.class);job.setMapOutputValueClass(FlowBean.class);job.setOutputKeyClass(Text.class);job.setOutputValueClass(FlowBean.class);FileInputFormat.setInputPaths(job,new Path("D:\\inputFlow"));FileOutputFormat.setOutputPath(job,new Path("D:\\outputFlow"));boolean completion = job.waitForCompletion(true);System.exit(completion?0:1);}
}

p87 88 切片机制与并行度决定机制

1)问题引出
MapTask的并行度决定Map阶段的任务处理并发度,进而影响到整个Job的处理速度。
思考:1G的数据,启动8个MapTask,可以提高集群的并发处理能力。那么1K的数据,也启动8个MapTask,会提高集群性能吗?MapTask并行任务是否越多越好呢?哪些因素影响了MapTask并行度?

2)MapTask并行度决定机制
数据块:Block是HDFS物理上把数据分成一块一块。数据块是HDFS存储数据单位。
数据切片:数据切片只是在逻辑上对输入进行分片,并不会在磁盘上将其切分成片进行存储。数据切片是MapReduce程序计算输入数据的单位,一个切片会对应启动一个MapTask。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
生成临时目录 ,split文件和xml配置,如果是集群模式还要上传jar包
在这里插入图片描述

p89-91 切片源码

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

92 TextInputFormat

在这里插入图片描述
在这里插入图片描述

p92 93 CombineTextInputFormat切片机制

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

CombineTextInputFormat案例实操

在这里插入图片描述
在这里插入图片描述

p94 mapreduce工作流程

在这里插入图片描述
在这里插入图片描述
上面的流程是整个MapReduce最全工作流程,但是Shuffle过程只是从第7步开始到第16步结束,具体Shuffle过程详解,如下:
(1)MapTask收集我们的map()方法输出的kv对,放到内存缓冲区中
(2)从内存缓冲区不断溢出本地磁盘文件,可能会溢出多个文件
(3)多个溢出文件会被合并成大的溢出文件
(4)在溢出过程及合并的过程中,都要调用Partitioner进行分区和针对key进行排序
(5)ReduceTask根据自己的分区号,去各个MapTask机器上取相应的结果分区数据
(6)ReduceTask会抓取到同一个分区的来自不同MapTask的结果文件,ReduceTask会将这些文件再进行合并(归并排序)
(7)合并成大文件后,Shuffle的过程也就结束了,后面进入ReduceTask的逻辑运算过程(从文件中取出一个一个的键值对Group,调用用户自定义的reduce()方法)
注意:
(1)Shuffle中的缓冲区大小会影响到MapReduce程序的执行效率,原则上说,缓冲区越大,磁盘io的次数越少,执行速度就越快。
(2)缓冲区的大小可以通过参数调整,参数:mapreduce.task.io.sort.mb默认100M。

p95 shuffle工作机制

http://www.yidumall.com/news/11805.html

相关文章:

  • 网站查询真伪手机网站模板建站
  • 兰州公司网站建设搜索引擎的关键词优化
  • 高校网站建设评比标准怎么优化百度关键词
  • 沈阳网页设计公司排名百度排名优化工具
  • wordpress在线更新要多久西安seo服务
  • 菏泽手机网站建设专业恶意点击软件
  • 网站seo外包服务潍坊网站建设方案咨询
  • 新手建网站视频教程上海优化公司选哪个
  • wordpress blogger太原关键词优化报价
  • seo网站建设是什么意思万能优化大师下载
  • 想学做网站学什么教程公司做网络推广哪个网站好
  • 开发网站建设微信推广引流加精准客户
  • 我做推广找不到我的网站软文网站
  • 建设个人技术网站发帖效果好的网站
  • 专业做网站咨询微信上怎么做广告推广
  • 四川网站开发哪家好免费推广引流app
  • 企业网站策划书模板范文网络推广软文怎么写
  • 可以做超链接或锚文本的网站有哪些关键词整站优化
  • 用自己点电脑做电影网站建设网站流程
  • 信息技术网站建设专业2023年8月疫情恢复
  • 外贸网站建设如何做呢互联网推广运营
  • PHP调用wordpress数据库ID优化营商环境个人心得
  • wordpress升级方法做seo网页价格
  • vs2013 web网站开发下载百度app
  • 大气自适应网站源码百度的广告
  • 集宁做网站上海牛巨微seo优化
  • 和文化有关的吉网站建设模板百度网首页登录入口
  • 网站域名续费多少钱站长工具使用
  • 重庆企业网站建设官网个人接外包的网站
  • java 网站开发总结如何找做网站的公司