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

pc端网站建设cps广告联盟

pc端网站建设,cps广告联盟,网站建立不安全怎么设置通过,后台网站更新 网站没显示1.1MapReduce定义 MapReduce是一个分布式计算框架,用于编写批处理应用程序,是用户开发“基于Hadoop的数据分析应用”的核心框架。 MapReduce核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在一…

1.1MapReduce定义

MapReduce是一个分布式计算框架,用于编写批处理应用程序,是用户开发“基于Hadoop的数据分析应用”的核心框架。

MapReduce核心功能是将用户编写的业务逻辑代码自带默认组件整合成一个完整的分布式运算程序,并发运行在一个Hadoop集群上。

这里以词频统计为例进行说明,MapReduce 处理的流程如下:

1MapReduce%E6%A6%82%E8%BF%B0%2027fb072a6b5c4c94b5093f462126f565/v2-8cd36043096252ac626adc292b5c9a7b_720w.png

  1. input : 读取文本文件;
  2. splitting : 将文件按照行进行拆分,此时得到的 K1 行数,V1 表示对应行的文本内容;
  3. mapping : 并行将每一行按照空格进行拆分,拆分得到的 List(K2,V2),其中 K2 代表每一个单词,由于是做词频统计,所以 V2 的值为 1,代表出现 1 次;
  4. shuffling:由于 Mapping 操作可能是在不同的机器上并行处理的,所以需要通过 shuffling 将相同 key 值的数据分发到同一个节点上去合并,这样才能统计出最终的结果,此时得到 K2 为每一个单词,List(V2) 为可迭代集合,V2 就是 Mapping 中的 V2;
  5. Reducing : 这里的案例是统计单词出现的总次数,所以 ReducingList(V2) 进行归约求和操作,最终输出。

MapReduce 编程模型中 splittingshuffing 操作都是由框架实现的,需要我们自己编程实现的只有 mappingreducing,这也就是 MapReduce 这个称呼的来源。

1.2MapReduce优缺点

1、优点

  • Mapr易于编程

它简单的实现一些接口,就可以完成一个分布式程序,这个分布式程序可以分布在大量廉价的PC机器上运行。也就是说你写一个分布式程序,跟写一个简单的串行程序是一模一样的。就是因为这个特点使得MapReduce编程变得非常流行。

  • 良好的扩展性

当你的计算资源不能得到满足的时候,你可以通过简单的增加机器来扩展它的计算能力。

  • 高容错性

MapReduce设计的初衷就是使程序能够部署在廉价的PC机器上,这就要求它就有很高的容错性。比如其中一台机器挂了,它可以把上面的计算任务转移到另外一个节点上运行,不至于这个任务运行失败,而且这个过程不需要人工参与,而完全是由Hadoop内部完成的。

  • 适合PB级以上海量数据的离线处理

可以实现上千台服务器集群并发工作,提供数据处理能力。

2、缺点

  • 不擅长实时计算

MapReduce无法像MySQL一样,在毫秒或者秒级内返回结果。

  • 不擅长流式计算

流失计算的输入数据时动态的,而MapReduce的输入数据集是静态的,不能动态变化。这是因为MapReduce自身的设计特点决定了数据源必须是静态的。

  • 不擅长DAG(有向图)计算

多个应用程序存在依赖关系,后一个应用程序的输入为前一个的输出。在这种情况下,MapReduce并不是不能,而是使用后,每个MapReduce作业的输出结果都会写入磁盘,会造成大量的磁盘IO,导致性能非常低下

1.3MapReduce核心思想

Untitled

1)分布式的运算程序往往需要分成至少2个阶段。

2)第一个阶段的MapTask并发实例,完全并行运行,互不相干。

3)第二个阶段的ReduceTask并发实例互不相干,但是他们的数据依赖于上一个阶段的所有MapTask并发实例的输出。

4)MapReduce编程模型只能包含一个Map阶段和一个Reduce阶段,如果用户的业务逻辑非常复杂,那就只能多个MapReduce程序,串行运行。

总结:分析WordCount数据流走向深入理解MapReduce核心思想。

1.4MapReduce进程

一个完整的MapR程序在分布式运行时有三类实例进程:

1)MrAppMaster:负责整个程序的过程调度及状态协调

2)MapTask:负责Map阶段的整个数据处理流程

3)ReduceTask:负责Reduce阶段的整个数据处理流程。

1.5常用数据序列化类型

Java类型Hadoop Writable类型
booleanBooleanWritable
byteByteWritable
intIntWritable
floatFloatWritable
longLongWritable
doubleDoubleWritable
StringText
mapMapWritable
arrayArrayWritable

1.6MapReduce编程规范

用户编写的程序分成三个部分:Mapper、Reducer和Driver。

1、Mapper阶段

(1)用户自定义的Mapper要继承自己的父类

(2)Mapper的输入数据是KV对的形式(KV的类型可自定义)

(3)Mapper中的为业务逻辑写在map()方法中

(4)Mapper的输出数据是KV对的形式(KV的类型可自定义)

(5)map()方法(MapTask进程)对每一个<K,V>调用一次

2、Reducer阶段

(1)用户自定义的Reducer要继承自己的父类

(2)Reducer的输入数据类型对应Mapper的输出数据类型,也是KV

(3)Reducer的业务逻辑写在reduce()方法中

(4)ReduceTask进程对每一组相同的K的<k,v>组调用一次reduce()方法

3、Driver阶段

相当于YARN集群的客户端,用于提交我们整个程序到YARN集群,提交的是封装了MapReduce程序相关运行参数的job对象。

1.7WordCount词频统计案例实操

1、需求

在给定的文本文件中统计输出每个单词出现的总次数

(1)输入数据

atguigu atguigu
ss ss
cls cls
jiao
banzhang
xue
hadoop

(2)期望输出数据

atguigu    2
banzhang 1
cls   2
hadoop    1
jiao  1
ss    2
xue  1

2、需求分析

按照MapReduce编程规范,分别编写Mapper,Reducer,Driver。

需求:统计一堆文件中单词出现的个数(WordCount案例)

Untitled

3、环境准备

(1)创建maven工程

Untitled

Untitled

按照要求填写相应的名称即可

Untitled

(2)在pom.xml文件中添加如下依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.cuiyf41</groupId><artifactId>mr-quickstart-java</artifactId><version>1.0-SNAPSHOT</version><properties><maven_compiler_plugin.version>3.6.1</maven_compiler_plugin.version><java.version>1.8</java.version></properties><!-- 仓库 --><repositories><repository><id>central</id><name>Maven Repository</name><url>http://maven.aliyun.com/nexus/content/groups/public</url><releases><enabled>true</enabled></releases></repository></repositories><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>RELEASE</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.8.2</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-common</artifactId><version>2.7.6</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-client</artifactId><version>2.7.6</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-hdfs</artifactId><version>2.7.6</version></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>${maven_compiler_plugin.version}</version><configuration><source>${java.version}</source><target>${java.version}</target></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>2.12.4</version><configuration><skipTests>true</skipTests></configuration></plugin><!-- 打包工具 --><plugin><artifactId>maven-assembly-plugin</artifactId><configuration><descriptorRefs><descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs><archive><manifest><mainClass>com.cuiyf41.wordCount.WordcountDriver</mainClass></manifest></archive></configuration><executions><execution><id>make-assembly</id><phase>package</phase><goals><goal>single</goal></goals></execution></executions></plugin></plugins></build></project>

(3)在项目的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

4、编写程序

(1)编写Mapper类

package com.cuiyf41.wordCount;import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;import java.io.IOException;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);}}
}

WordCountMapper 继承自 Mapper 类,这是一个泛型类,定义如下:

WordCountMapper extends Mapper<LongWritable, Text, Text, IntWritable>public class Mapper<KEYIN, VALUEIN, KEYOUT, VALUEOUT> {......
}
  • KEYIN : mapping 输入 key 的类型,即每行的偏移量 (每行第一个字符在整个文本中的位置),Long 类型,对应 Hadoop 中的 LongWritable 类型;
  • VALUEIN : mapping 输入 value 的类型,即每行数据;String 类型,对应 Hadoop 中 Text 类型;
  • KEYOUTmapping 输出的 key 的类型,即每个单词;String 类型,对应 Hadoop 中 Text 类型;
  • VALUEOUTmapping 输出 value 的类型,即每个单词出现的次数;这里用 int 类型,对应 IntWritable 类型。

(2)编写Reducer类

package com.cuiyf41.wordCount;import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;import java.io.IOException;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.cuiyf41.wordCount;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;import java.io.IOException;public class WordcountDriver {public static void main(String[] args) throws IOException, InterruptedException, ClassNotFoundException {// 输入输出路径需要根据自己电脑上实际的输入输出路径设置args = new String[] { "/Users/cuiyufei/IdeaProjects/input", "/Users/cuiyufei/IdeaProjects/output" };// 1 获取配置信息以及封装任务Configuration conf = new Configuration();Job job = Job.getInstance(conf);// 2 设置jar加载路径job.setJarByClass(WordcountDriver.class);// 3 设置map和reduce类job.setMapperClass(WordcountMapper.class);job.setReducerClass(WordcountReducer.class);// 4 设置map输出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 提交boolean result = job.waitForCompletion(true);System.exit(result ? 0 : 1);}
}

5、本地测试

在Driver中添加本地测试文件和输出文件目录

// 输入输出路径需要根据自己电脑上实际的输入输出路径设置
args = new String[] { "/Users/cuiyufei/IdeaProjects/input", "/Users/cuiyufei/IdeaProjects/output" };

在Driver文件中右键运行即可。

Untitled

6、集群上测试

(0)用maven打jar包,需要添加的打包插件依赖

注意:标记红颜色的部分需要替换为自己工程主类

<build><plugins><plugin><artifactId>maven-compiler-plugin</artifactId><version>2.3.2</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><archive><manifest><mainClass>com.atguigu.mr.WordcountDriver</mainClass></manifest></archive></configuration><executions><execution><id>make-assembly</id><phase>package</phase><goals><goal>single</goal></goals></execution></executions></plugin></plugins></build>

注意:如果工程上显示红叉。在项目上右键->maven->update project即可。

(1)将程序打成jar包,然后拷贝到Hadoop集群中

步骤详情:右键->Run as->maven install。等待编译完成就会在项目的target文件夹中生成jar包。如果看不到。在项目上右键->Refresh,即可看到。修改不带依赖的jar包名称为wc.jar,并拷贝该jar包到Hadoop集群。

(2)启动Hadoop集群

(3)执行WordCount程序

[root@hdp101 software]# hadoop jar  wc.jar com.atguigu.wordcount.WordcountDriver /user/atguigu/input /user/atguigu/output
http://www.mnyf.cn/news/34128.html

相关文章:

  • 做 网站 要专线吗百度站长平台官网
  • wix做的网站在国内访问不媒体资源
  • 河北高端网站建设专业做seo推广
  • 大学生做网站新网站怎么快速收录
  • 朔州网站建设千峰培训可靠吗?
  • 网站建设公司兴田德润优惠西安seo服务培训
  • 网站从建设到运行要多少钱怎么在网上做广告
  • 幼儿园行风建设网站用稿资料广告投放渠道有哪些
  • 怎么做有图有声的网站seo关键词优化哪个平台好
  • seo课程多少钱杭州网站seo价格
  • 机械做卖产品网站网站优化推广教程
  • 龙岗做网站的公司郑州seo代理外包公司
  • 日本做a片在线观看网站有哪些百度资源分享网
  • 360安全网站怎么做号码认证品牌设计公司排名前十强
  • 济南莱芜又出新情况了seo排名怎样
  • 分栏式网站网站视频
  • 小程序网站建设搜索引擎入口google
  • 网站页脚内容济宁网站建设
  • 山西网站建设哪家好微博今日热搜榜
  • 怎么关闭网站安全检测seo网络贸易网站推广
  • 网站seo谷歌手机怎么制作网站
  • 中国建设银行个人登录入口seo课程心得体会
  • 淄博市建设局网站微信推广文案
  • 湖北建设厅官方网站网络推广的方法和技巧
  • 深圳网站建设公司怎么做企业微信管理系统
  • .net cms网站管理系统如何做品牌宣传与推广
  • 用网站做CAN总线通信好吗怎么做电商平台
  • 宿州市住房建设委员会网站软文撰写案例
  • 网站建设步骤详解视频教程苹果aso优化
  • 企业简介 网站建设百度网盘资源分享