Hadoop大数据开发基础系列:四、MapReduce初级编程

13 篇文章 12 订阅
订阅专栏

第四章、MapReduce编程入门

目录结构

1.使用Eclipse建立MapReduce工程

    1.1 下载与安装Eclipse

    1.2 配置MapReduce环境

    1.3 新建MapReduce工程

2.通过源码初识MapReduce工程

    2.1 通俗理解MapReduce原理

    2.2 了解MR实现词频统计的执行流程

    2.3 读懂官方提供的WordCount源码

3.编程实现按日期统计访问次数

    3.1 分析思路与处理逻辑

    3.2 编写核心模块代码

    3.3 任务实现

4.编程实现按访问次数排序

    4.1 分析思路与处理逻辑

    4.2 编写核心模块代码

    4.3 任务实现

5.小结

6.实训

    实训1.获取成绩表的最高分记录

    实训2.对两个文件中的数据进行合并和去重

7.课后练习


背景:某社交网站经过几年的发展,注册用户超过1000万,其中付费用户(VIP)占用户总数的0.1%。网站运营方的重点之一是向付费用户提供更加优质的服务,必须根据服务对象的特点设计有针对性的服务方案。需要对付费用户访问网站的数据分析,这是一项非常重要的工作任务。这个任务由以下几个阶段来详细展开:

1.使用Eclipse建立MapReduce工程

    具体参考: https://blog.csdn.net/hehe_soft_engineer/article/details/102147721

2.通过源码初识MapReduce工程

此部分,目的是对MapReduce的核心模块 Mapper与Reducer的执行流程有一定的认识。通过学习wordcount的源码来了解一下。

    2.1 通俗理解MapReduce原理

        (1)MapReduce包括Mapper模块和Reducer模块,MapReduce可以看做是一个专业处理大数据的工程队,主要由下面成员构成:

            ①Mapper:映射器 ②Mapper助理InputFormat:输入文件读取器

            ③Shuffle:运输队 ④Shuffle助理Sorter:排序器 

            ⑤Reducer:归约器 ⑥Reducer助理OutputFormat:输出结果写入器

        (2)简化的MapReduce处理流程图:

            ①数据切片:系统把数据分给多个Mapper来处理,通过数据分片的形式,这是分布式计算的第一步。

            ②数据映射:分片完成后,Mapper助理InputFormat从文件输入目录读取数据,再由Mapper对数据进行解析,组织成为新的格式(键值对形式),最后Mapper将处理好的数据输出,等待shuffle运输队取走结果。

            ③数据混洗:shuffle运输队把获取的结果按照相同的键(Key)进行汇集,再把结果送到Shuffle助理Sorter处,由Sorter负责对这些结果排序,,然后提交给Reducer。

            ④数据归约:Reducer收到数据后,将结果进行汇总与映射工作,得到最终的计算结果,最后由Reducer助理OutputFormat将结果输出到指定位置处。

    2.2 了解MR实现词频统计的执行流程

        下面举一个实例来说明一下Map和Reduce过程

 

输入

输出

Hello World Our World

BigData               2

Hello BigData Real BigData

Great               1

Hello Hadoop Great Hadoop

Hadoop               3

Hadoop MapReduce

Hello               3

 

MapReduce               1

 

Our               1

 

Real               1

 

World               2

        (1)Map任务的处理过程

        (2)Reduce任务的处理过程

    2.3 读懂官方提供的WordCount源码

        要编写数据处理程序,还要参考MapReduce编程的具体规范,下面进行代码级别的分析和说明:

        在“D:\tools\hadoop-2.7.7\share\hadoop\mapreduce\sources”目录下找到“hadoop-mapreduce-examples-2.7.7-sources.jar”,解压缩此文件,在子目录“\org\apache\hadoop\examples”看到WordCount文件,这就是WordCount程序的源代码。

        从结构上可以分为3部分,分别是应用程序Driver、Mapper模块与Reducer模块

        (1)应用程序Driver分析

            这里的Driver程序主要是指的main函数,在main函数里面进行MapReduce程序的一些初始化设置,并提交任务,等待程序运行完成。

            基本上是这样的格式,在此基础上只需要修改部分参数即可。

        (2)Mapper模式分析

        (3)Reducer模式分析

        (4)概括地讲:

            进行MapReduce编程时,开发者主要处理的是Mapper和Reducer两个模块,其中包括定义输入输出的键值对格式、编写map与reduce函数中定义的处理逻辑等。

3.编程实现按日期统计访问次数

    本部分任务目标是统计用户在2016年每个自然日的总访问次数。原始数据文件中提供了用户名称与访问日期,这个任务实质就是要获取以每个自然日为单位的所有用户访问次数的累加值。如果通过MapReduce编程实现这个任务,首先要考虑的是,Mapper与Reducer各自的处理逻辑是怎样的,然后根据处理逻辑编写核心代码,最后在Eclipse中编写核心代码,编译打包后提交集群运行。

    3.1 分析思路与处理逻辑

        着重考虑以下几个要素:

        ①输入输出格式 ②Mapper要实现的逻辑 ③Reducer要实现的计算逻辑

        (1) 定义输入/输出格式 

            社交网站用户的访问日期在格式上属于文本格式,访问次数为整型数值格式。其组成的键值对为<访问日期,访问次数>,因此Mapper的输出与Reducer的输出都选用Text类与IntWritable类。

        (2)Mapper 类的逻辑实现

            Mapper类中最主要的部分就是map函数。map函数的主要任务就是读取用户访问文件中的数据,输出所有访问日期与初始次数的键值对。因此访问日期是数据文件的第二列,所有先定义一个数组,再提取第二个元素,与初始次数1一起构成要输出的键值对,即<访问日期,1>。

        (3)Reducer的逻辑实现

            Reducer类中最主要的部分就是reduce函数。reduce的主要任务就是读取Mapper输出的键值对<访问日期,1>。这一部分与官网给出的WordCount中的Reducer完全相同。

    3.2 编写核心模块代码

        目录结构:

        

package test;
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.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
public class DailyAccessCount {
       // Mapper模块
       public static class MyMapper
    extends Mapper<Object, Text, Text, IntWritable>{
             private final static IntWritable one = new IntWritable(1);
             public void map(Object key, Text value, Context context) //map函数的编写要根据读取的文件内容和业务逻辑来写
                           throws IOException, InterruptedException {
                    String line = value.toString();
                    String array[] = line.split(",");//指定,为分隔符,组成数组
                    String keyOutput = array[1];//提取数组中的访问日期作为Key
                    context.write(new Text(keyOutput), one);//形成键值对
             }
       }
       
       // Reducer模块
       public static class MyReducer
    extends Reducer<Text,IntWritable,Text,IntWritable> {
             private IntWritable result = new IntWritable();
             public void reduce(Text key, Iterable<IntWritable> values, Context  context)
                           throws IOException, InterruptedException {
                    int sum = 0;                                   //定义累加器,初始值为0
                    for (IntWritable val : values) {
                           sum += val.get();                       //将相同键的所有值进行累加
                    }
                    result.set(sum);
                    context.write(key, result);
             }
       }
       
       //Driver模块,主要是配置参数
       public static void main(String[] args) throws Exception {
           Configuration conf = new Configuration();
           
           Job job = Job.getInstance(conf, "DailyAccessCount");
           job.setJarByClass(DailyAccessCount.class);
           job.setMapperClass(MyMapper.class);
           job.setReducerClass(MyReducer.class);
           job.setMapOutputKeyClass(Text.class);
           job.setMapOutputValueClass(IntWritable.class);
           job.setOutputKeyClass(Text.class);
           job.setOutputValueClass(IntWritable.class);
           for (int i = 0; i < args.length - 1; ++i) {
             FileInputFormat.addInputPath(job, new Path(args[i]));
           }
           FileOutputFormat.setOutputPath(job,
             new Path(args[args.length - 1]));
           System.exit(job.waitForCompletion(true) ? 0 : 1);
         }    
}

    3.3 任务实现

        将文件编译生成JAR包文件,提交Hadoop集群执行

    在运行过程中报错,原因是我在外面的JDK用的是1.9的,等级过高了(Linux系统的JDK是1.8的),所以要重新配置JDK。

    记住,在用Windows环境下的JDK要和Hadoop集群环境下的JDK环境相同。

    历史各个版本的JDK下载地址: 

                      https://www.oracle.com/technetwork/java/javase/downloads/java-archive-javase8-2177648.html

    经过配置,终于可以运行啦,哈哈哈 o(* ̄︶ ̄*)o

hadoop jar NewDaily.jar test.NewDaily /user/dftest/user_login.txt /user/dftest/AccessCount

    结果如下:

        再来查看输出结果:

        打开文件可以看到:

        第一列是已经按照自然日期排好顺序,第二列是对应日期的总访问次数,任务基本完成。

4.编程实现按访问次数排序

    前一部分完成了日期统计任务,本部分要对AccessCount中的数据按照访问次数进行排序,将排序后的结果存放在相同目录下的TimesSort中。

    4.1 分析思路与处理逻辑

        MapReduce只会对键值进行排序,所以我们在Mapper模块中对于输入的键值对,把Key与Value位置互换,在Mapper输出后,键值对经过shuffle的处理,已经变成了按照访问次数排序的数据顺序啦,输出格式为<访问次数,日期>。Reducer的处理和Mapper恰好相反,将键和值的位置互换,输出格式变为<日期,访问次数>。

    4.2 编写核心模块代码

package test;
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.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
public class AccessTimesSort {
       // Mapper模块
       public static class MyMapper
    extends Mapper<Object, Text, IntWritable,Text>{
             public void map(Object key, Text value, Context context) //map函数的编写要根据读取的文件内容和业务逻辑来写
                           throws IOException, InterruptedException {
                    String line = value.toString();
                    String array[] = line.split("\t");//指定,为分隔符,组成数组
                    int keyOutput = Integer.parseInt(array[1]);//提取数组中的访问次数作为Key
                    String valueOutput = array[0]; //将日期作为value
                    context.write(new IntWritable(keyOutput), new  Text(valueOutput));
             }
       }
       
       // Reducer模块
       public static class MyReducer
    extends Reducer<IntWritable,Text,Text,IntWritable> {//注意与上面输出对应
             public void reduce(IntWritable key, Iterable<Text> values, Context  context)  
                           throws IOException, InterruptedException {
                    for (Text val : values) {
                           context.write(val, key);                //进行键值位置互换
                    }
             }
       }
       
       //Driver模块,主要是配置参数
       public static void main(String[] args) throws Exception {
           Configuration conf = new Configuration();
           
           Job job = Job.getInstance(conf, "AccessTimesSort");
           job.setJarByClass(AccessTimesSort.class);
           job.setMapperClass(MyMapper.class);
           job.setReducerClass(MyReducer.class);
           job.setMapOutputKeyClass(IntWritable.class);
           job.setMapOutputValueClass(Text.class);
           job.setOutputKeyClass(Text.class);
           job.setOutputValueClass(IntWritable.class);
           for (int i = 0; i < args.length - 1; ++i) {
             FileInputFormat.addInputPath(job, new Path(args[i]));
           }
           FileOutputFormat.setOutputPath(job,
             new Path(args[args.length - 1]));
           System.exit(job.waitForCompletion(true) ? 0 : 1);
         }    
}

    4.3 任务实现

        (1)编译生成jar包

        (2)将jar包上传到集群

        (3)执行jar包内的AccessTimesSort类

hadoop jar NewDaily.jar test.AccessTimesSort /user/dftest/AccessCount /user/dftest/TimesSort

        (4)查看执行结果(由此可以看到结果为升序排列)

        此任务顺利完成 哈哈。

5.小结

    本章介绍了MapReduce编程的基础知识,通过对Hadoop官方的示例代码的分析及解读,深入了解了MapReduce的执行过程。MapReduce把复杂的、运行在Hadoop集群上的并行计算过程集成到了两个模块——Mapper和Reducer上。开发人员只需要把业务处理逻辑通过其中的map函数和reduce函数来实现,就可以达到分布式并行编程的目的。

    MapReduce执行过程主要包括以下几个部分:读取分布式文件系统的数据,进行数据分片,执行map任务以输出中间结果,shuffle阶段把中间结果进行汇合、排序,再传到Reduce任务,在Reduce阶段对数据进行处理,输出最终结果到分布式文件系统内。

6.实训

    实训目的是,掌握MapReduce编程的基本方法,通过MapReduce编程来实现一些常用的数据处理方法,包括求最大值、去重等。

    实训1.获取成绩表的最高分记录

        (1)需求说明:对于样例文件subject_score,即成绩表A。文件中的每一行数据包含两个字段:科目和分数。要求获得成绩列表中每个科目成绩最高的记录,并将结果输出到最高成绩表B。

        表A的部分内容:

 

语文

96

数学

102

英语

130

物理

19

化学

44

生物

44

语文

109

数学

118

英语

141

        要输出的表B结构:

 

化学

99

数学

149

物理

99

生物

99

英语

144

语文

114

        (2)实现思路与步骤:

            ①在Mapper中,map函数读取成绩表A中的数据,直接将读取的数据以空格分隔,组成键值对<科目,成绩>,即设置输出键值对类型为<Text,IntWritable>。

            ②在Reducer中,由于map函数输出键值对类型是<Text,IntWritable>,所以在Reducer中接收的键值对类型就是<Text,Iterable<IntWritable>>。针对相同的键遍历它的值,找到最高值,最后输出的键值对为<科目,最高成绩>。

        (3)实现及输出结果:

            ①代码实现:

 

package test;


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.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;


import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;


public class ScoreSorting {
    // Mapper模块
        public static class MyMapper
        extends Mapper<LongWritable, Text, Text ,IntWritable>{
            Text course=new Text();
            IntWritable score=new IntWritable();
            public void map(LongWritable key, Text value,
                    Mapper<LongWritable, Text, Text ,IntWritable>.Context context) //map函数的编写要根据读取的文件内容和业务逻辑来写
                    throws IOException, InterruptedException {
                String line = value.toString();
                String array[] = line.trim().split(" ");//trim函数去掉两边多余的空格,指定空格为分隔符,组成数组
                course.set(array[0]);//第一列是科目
                score.set(Integer.parseInt(array[1]));//第二列是分数
                context.write(course, score);
            }
        }
        
        // Reducer模块
        public static class MyReducer
        extends Reducer<Text,IntWritable,Text,IntWritable> {//注意与上面输出对应
            private IntWritable result = new IntWritable();
            public void reduce(Text key, Iterable<IntWritable> values,
                    Reducer<Text,IntWritable,Text,IntWritable>.Context context)  
                    throws IOException, InterruptedException {
                int maxscore=0;                        //初始化最大值
                for (IntWritable score:values) {
                    if(maxscore < score.get()) {
                        maxscore=score.get();        //相同键内找最大值
                    }
                }
                result.set(maxscore);
                context.write(key, result);
                
            }
        }
        
        //Driver模块,主要是配置参数
        public static void main(String[] args) throws Exception {  //对有几个参数要有很强的敏感性,如果多可以用前面的遍历方式,如果少就可以直接指定。
            if(args.length!=2) {
                System.err.println("ScoreSorting <input> <output>");
                System.exit(-1);
            }
            Configuration conf = new Configuration();  
            Job job = Job.getInstance(conf, "ScoreSorting");
            job.setJarByClass(ScoreSorting.class);
            job.setMapperClass(MyMapper.class);
            job.setReducerClass(MyReducer.class);
            job.setMapOutputKeyClass(Text.class);
            job.setMapOutputValueClass(IntWritable.class);
            job.setOutputKeyClass(Text.class);
            job.setOutputValueClass(IntWritable.class);
            job.setNumReduceTasks(1);
            FileInputFormat.addInputPath(job, new Path(args[0]));
            FileOutputFormat.setOutputPath(job,new Path(args[1]));
            System.exit(job.waitForCompletion(true) ? 0 : 1);
          }    
}

            上传数据文件并执行程序:

hdfs dfs -put /testhadoop/subject_score.txt /user/dftest
hadoop jar NewDaily3.jar test.ScoreSorting /user/dftest/subject_score.txt /user/dftest/SortScore8     //经过8次才调好的。

经过不断地调试,但是总会出现输入类型不匹配的问题,最终,找到在map函数重写的时候,因为值类型错了,应该是Text类型,写成了IntWritable类型,但是报错总是报是因为Text 和 LongWritable问题,所以有点迷。

最后问题解决:

    实训2.对两个文件中的数据进行合并和去重

        (1)需求说明:

            有两个样例文件:XX与YY。要求合并两个文件中的数据,并对合并后的数据进行去重,将结果输出到文件ZZ。

        (2)实现思路与步骤:

            ①利用MapReduce中Reducer类会合并相同键值对的特性,对目标数据进行去重。

            ②在HDFS创建目录XXYY,将样例文件XX与YY上传到此目录。MapReduce程序读取此目录下的文件。

            ③在Mapper类中,map函数读取两个文件数据,直接将读取的数据作为键,将值设置为1,最后输出格式为<Text,IntWritable>。

            ④在Reducer中,键保持不变,将对应的值取为空,输出类型为<Text,NullWritable>。

        (3)实现及输出结果:

            略

7.小练习

    在MapReduce程序中,Reducer类中包括的函数有:B

    A.   startup、reduce、end        B.    setup、reduce、cleanup    

    C.    start、run、reduce、end    D.   startup、run、end     

 

下一章将对MapReduce编程进行更深一步的剖析 ^_^ 。

mapreduce实现访问日期统计访问次数
jws123123123的博客
10-10 2143
话不多说下面先附上开始的pom.xml文件: org.apache.hadoop hadoop-client 2.7.4 <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core --> <dependency> <groupId>...
初步学习MapReduce编程——编写程序实现对输入文件的排序
ZHOU的博客
06-22 4857
现在有多个输入文件,每个文件的每行内容均为一个整数。要求读取所有文件的整数,进行升序排序后,输出到一个新的文件,输出的数据格式为每行两个整数,第一个数字为第二个整数的排序位次,第二个整数为原待排列的整数。 运行Java代码直接得出结果 package Mersort; import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import
MapReduce的统计和排序功能
weixin_45683301的博客
07-18 1002
实验材料及说明 现有某电商网站用户对商品的收藏数据,记录了用户收藏的商品id以及收藏日期,文件名为buyer_favorite。buyer_favorite包含:买家id,商品id,收藏日期这三个字段,数据以“\t”分割,样本数据及格式如下: 买家ID 商品ID 收藏日期 10181 1000481 2010-04-04 16:54:31 20001 1001597 2010-04-07 15:07:52 20001 1001560 2010-04-07 15:08:27 2
MapReduce入门编程
最新发布
C_helped的博客
05-11 715
MapReduce入门编程、环境配置、官方WordCount源码、集群
MapReduce基础编程之按日期统计及按日期排序
邵奈一的博客
05-17 1853
大家好,我是邵奈一,一个不务正业的程序猿、正儿八经的斜杠青年。 1、世人称我为:被代码耽误的诗人、没天赋的书法家、五音不全的歌手、专业跑龙套演员、不合格的运动员… 2、这几年,我整理了很多IT技术相关的教程给大家,爱生活、爱分享。 3、如果您觉得文章有用,请收藏,转发,评论,并关注我,谢谢! 博客导航跳转(请收藏):邵奈一的技术博客导航 | 公众号 | 微信 | CSDN | 掘金 | 51CTO | 简书 | 微博 | 教程目录0x00 教程内容0x01 项目准备1. 新建Maven项目2. 需求.
hadoopmapreduce完成对用户访问网站日期统计
海鸥传奇的专栏
06-16 2365
1.数据文件 user_webAccess.txt 格式如下: jim,2019-09-12 tom,2019-03-03 ross,2019-05-06 pis,2019-12-08 oax,2019-11-05 jim,2019-09-13 tom,2019-03-04 ross,2019-05-07 pis,2019-12-09 oax,2019-11-06 jima,2019-09...
大数据实验5实验报告:MapReduce 初级编程实践
06-20
MapReduce 初级编程实践 姓名: 实验环境:  操作系统:Linux(建议Ubuntu16.04);  Hadoop版本:3.2.2; 实验内容与完成情况: (一)编程实现文件合并和去操作 对于两个输入文件,即文件 A 和文件 B,请...
Hadoop大数据开发基础.rar
10-14
文档为PPT,与百度文库里的Hadoop大数据开发基础为一套,里面内容相对比较基础~可做基础学习资料PPT。 【实例截图】 【核心代码】 Hadoop大数据开发基础-PPT课件 └── 37066-Hadoop大数据开发基础-PPT课件 ├── ...
大数据实验-MapReduce编程实践
04-03
1、在本地创建多个文本文件并上传到Hadoop: (1)创建本地存放文件文件夹: (2)使用vim命令向文件里添加内容: (3)在Hadoop里创建存放文件的目录: (4)将本地的3个文件上传到Hadoop上: 2、编写java代码来...
Hadoop大数据开发基础_教案.rar
07-04
Hadoop大数据开发基础_教案.rar
Hadoop大数据开发基础-PPT课件
04-05
Hadoop大数据开发基础-PPT课件
大数据学习(八):mapreduce编程案例-计算访问次数最多的5个网站
01-20
数据 2017/07/28 qq.com/a 2017/07/28 qq.com/bx 2017/07/28 qq.com/by 2017/07/28 qq.com/by3 2017/07/28 qq.com/news 2017/07/28 sina.com/news/socail 2017/07/28 163.com/ac 2017/07/28 sina.com/news/socail 2017/07/28 163.com/sport 2017/07/28 163.com/ac 2017/07/28 sina.com/play 2017/07/28 163.com/sport 2017/07
Hadoop按日期统计访问次数及测试数据
04-10
Hadoop按日期统计访问次数代码实现,以及包含测试用的数据
学习笔记Hadoop(十)—— MapReduce开发入门(2)—— MapReduce API介绍、MapReduce实例
别呀的博客
10-03 695
MapReduce API介绍 一般MapReduce都是由Mapper, Reducer 及main 函数组成。 Mapper程序一般完成键值对映射操作; Reducer 程序一般完成键值对聚合操作; Main函数则负责组装Mapper,Reducer及必要的配置; 高阶编程还涉及到设置输入输出文件格式、设置Combiner、Partitioner优化程序等; 4.1、MapReduce程序模块 : Main 函数 4.2、MapReduce程序模块: Mapper org.apache.ha
jar包形式运行MapReducer代码
Master chy
01-01 1004
在我们平时运行MapRuducer代码,往往更倾向于直接在eclipse直接运行,而在很多业务生产过程,需要我们以jar包的形式在集群运行。所以,今天笔者就讲解一下如何打jar包来运行程序。 以一个小的案例来进行说明。 MapReducer实现WordCount 其的代码笔者就不赘述了,在后面的学习博客,笔者会详细讲代码分享出来,这里只是讲解如何打jar包: 1.选择对应的代码包 2...
调用MapReduce文件各个单词出现次数进行统计
weixin_48073650的博客
12-17 1704
调用MapReduce文件各个单词出现次数进行统计 实验配置:系统:Ubuntu Kylin | 环境:Hadoop | 软件:Eclipse 要求 1.将待分析的文件(不少于10000英文单词)上传到HDFS 2.调用MapReduce文件各个单词出现的次数进行统计 3.将统计结果下载本地。 操作步骤:调用MapReduce执行WordCount对单词进行计数** 一: • 1. 在Eclipse创建项目 • 2. 为项目添加需要用到的JAR包 • 3. 编写Java应用程序 • 4. 编译
MapReduce编程练习
qq_60317308的博客
11-12 2074
目录 编程实现按日期统计访问次数 2.编程实现按访问次数排序 获取成绩表最高分 编译jar'包方法 编程实现按日期统计访问次数 (1) 定义输入/输出格式 社交网站用户的访问日期在格式上属于文本格式,访问次数为整型数值格式。其组成的键值对为<访问日期,访问次数>,因此Mapper的输出与Reducer的输出都选用Text类与IntWritable类。 (2)Mapper 类的逻辑实现 ...
运行第一个MapReduce程序
天天向上
06-12 5772
本文的环境基于CDH5的搭建https://blog.csdn.net/songzehao/article/details/91044032 大数据环境CDH5已搭建成功,自带example也已跑通,总不能老跑人家的mapreduce程序吧,所以是时候跑跑自己写的mr了。 怎么写程序先不管,我们先本着拿来主义,或者好听一点说师夷长技以制夷,第一步只是为了成功走完部署运行jar包的流程,至于...
MapReduce编程小案例.3rd—对网站访问总次数全排序
RobertDowneyLm的博客
05-14 1929
MapReduce编程小案例.3rd—对网站访问总次数全排序利用MapReduce处理一个小案例,如下是一批网站的访问次数信息:2018/05/11 qq.com/a 2018/05/11 qq.com/bx 2018/05/11 qq.com/by 2018/05/11 qq.com/by3 2018/05/11 qq.com/news 2018/05/11 sina.com/news/soca...
大数据开发工程师系列:hadoop spark
07-23
### 回答1: 大数据开发工程师系列是指专门从事大数据开发的一类职业。Hadoop和Spark是大数据领域最受欢迎的两个开源框架。 Hadoop是一个分布式计算框架,用于处理大规模数据集的分布式存储和计算。Hadoop的核心是Hadoop分布式文件系统(HDFS)和MapReduce计算模型。HDFS将数据分布存储在集群的多个节点上,MapReduce可以并行处理这些分布式数据Hadoop具有高可靠性、高扩展性和高容错性的特点,并且还提供了许多其他工具和库,如Hive、Pig和HBase等。 Spark是一个快速、通用的大数据处理引擎,可以在多种数据源上进行高效的分布式计算。相比于HadoopMapReduce,Spark具有更快的数据处理速度和更强的扩展性。Spark提供了一个称为弹性分布式数据集(RDD)的抽象,可以在内存高效地处理大规模数据集。此外,Spark还提供了许多高级组件和库,如Spark SQL、Spark Streaming和MLlib等,用于处理结构化数据、流式数据和机器学习。 作为大数据开发工程师,掌握Hadoop和Spark是非常要的。使用Hadoop可以处理海量数据,并且具有高可靠性和容错性。而Spark则能够快速高效地处理大规模数据,并提供了更多的数据处理和分析功能。 大数据开发工程师需要熟悉Hadoop和Spark的使用和调优技巧,以及相关的编程语言和工具,如Java、Scala和Python。他们需要了解数据处理的算法和模型,并能够设计和实现高效的分布式计算方案。此外,大数据开发工程师还需要具备良好的沟通能力和团队合作能力,能够与数据科学家和业务团队紧密合作,共同解决实际问题。 总之,大数据开发工程师系列是一个专门从事大数据开发的职业群体。而Hadoop和Spark则是这个职业群体要的两个工具,他们分别用于大规模数据处理和分布式计算。掌握Hadoop和Spark的使用和优化技巧,是成为一名优秀的大数据开发工程师的关键能力。 ### 回答2: 大数据开发工程师系列主要涉及到两个要的技术:Hadoop和Spark。 Hadoop是一个开源的分布式计算框架,主要用于存储和处理大规模数据集。它通过将数据分散存储在集群的多个节点上,并在节点之间进行数据通信和计算,实现了数据的并行处理和高可靠性。Hadoop的核心工具是HDFS(Hadoop分布式文件系统)和MapReduce(一种用于分布式计算的编程模型)。HDFS用于将数据分布式存储在集群,而MapReduce则是用于分布式计算的框架,通过将计算任务分解成多个小任务并在各个节点上并行执行,大大提高了数据处理的效率和性能。 Spark是当前最受欢迎的大数据计算框架之一,也是一个开源项目。与Hadoop相比,Spark具有更快的数据处理速度和更强大的功能。Spark提供了一个可扩展的分布式数据处理框架,支持数据处理、机器学习、图计算等多种大数据应用场景。与传统的基于磁盘的计算框架相比,Spark利用内存计算的优势,可以快速地对大规模数据进行处理和分析。此外,Spark还提供了丰富的API和开发工具,使开发人员可以更轻松地构建和调试大数据应用程序。 作为大数据开发工程师,掌握Hadoop和Spark是必不可少的。熟悉Hadoop的使用和原理,能够有效地存储和处理大规模数据集。而对于Spark的掌握,则可以提高数据处理的速度和效率,使得大数据分析和挖掘更加容易实现。因此,大数据开发工程师需要具备对Hadoop和Spark的深入理解和熟练应用,同时还需要具备数据分析、算法和编程等多方面的技能,以应对复杂的大数据挑战。 ### 回答3: 大数据开发工程师是一个专注于处理大数据的职位,主要负责使用各种工具和技术来处理和分析大规模的数据集。 Hadoop和Spark是目前在大数据处理领域非常流行的两个开源工具。Hadoop是一个分布式系统基础架构,可以在集群存储和处理大规模数据。它的核心是Hadoop分布式文件系统(HDFS)和MapReduce计算模型。HDFS将数据分散存储在集群的不同节点上,而MapReduce模型则提供了一种并行处理数据的方式。大数据开发工程师需要熟悉Hadoop的架构和命令行工具,能够编写MapReduce程序来处理数据。 Spark是一个快速和通用的大数据处理引擎,可以在大规模集群上执行数据处理任务。它拥有比Hadoop更高的性能和更丰富的功能。Spark提供了强大的机器学习、图计算和流处理等功能。大数据开发工程师需要熟悉Spark的API和编程模型,能够使用Spark的各种组建和工具进行数据处理和分析。 作为大数据开发工程师,掌握Hadoop和Spark是非常要的。使用Hadoop和Spark可以有效地处理大规模数据,提取有价值的信息。大数据开发工程师通过编写和优化MapReduce程序来实现数据处理的需求,同时也能利用Spark提供的机器学习和流处理等功能来进行更复杂的数据分析。通过合理地使用Hadoop和Spark,大数据开发工程师可以减少数据处理的时间和成本,提高数据处理的效率和准确性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • Spark学习之路——9.Spark ML 7429
  • Hadoop大数据开发基础系列:五、MapReduce进阶编程 5666
  • Hadoop大数据开发基础系列:四、MapReduce初级编程 5100
  • 利用js和audio标签读取音频文件并计算音频时长 3799
  • Hadoop大数据开发基础系列:三、Hadoop基础操作 3636

分类专栏

  • 计算机学科专业基础(408)
  • 数据结构笔记 3篇
  • 数据结构大纲要求代码示例 12篇
  • 机器学习
  • 吴恩达机器学习课程 5篇
  • 读书笔记
  • 大数据
  • Hadoop环境配置 6篇
  • Hadoop基础 13篇
  • Scala 10篇
  • Spark 9篇
  • R语言 6篇
  • R语言数据挖掘 10篇
  • AI大模型
  • 大模型学习
  • 大模型杂谈
  • 编程语言
  • Vue基础 6篇
  • JavaScript 7篇
  • C++ 3篇
  • JAVA 3篇
  • Python 3篇
  • Linux操作系统 2篇
  • 刷题记录本 34篇
  • 程序人生 1篇
  • Git 1篇

最新评论

  • ArrayList<Integer>()转为int[]的几种方式

    ak2111: 使用Stream API时,它会更高效地处理大数组,并且代码更加简洁易读。在大规模数据操作中推荐使用此方法。

  • ArrayList<Integer>()转为int[]的几种方式

    码农小鑫qwq: 博主的文章细节很到位,兼顾实用性和可操作性,感谢博主的分享,文章思路清晰,干货满满,很有学习价值!

  • 五、特征缩放和多项式回归

    ak2111: 通过理论和实验的学习帮助我们用科学的方式为梯度下降选择一个好的学习率,了解不同的学习率选择对模型训练带来的效果,在直觉上也有助于我们更好的理解如何选择一个好的学习率。

  • 深度搜索(递归实现)-计算岛屿最大面积

    ak2111: 逻辑严谨,观点清晰,引人入胜,是深思熟虑后的结果。结构合理,信息分层明确,让人不由得沉浸其中,受益匪浅。

  • 排序-快排算法对数组进行排序

    2401_85111871: 优质好文,博主的文章细节很到位,兼顾实用性和可操作性,期待博主持续带来更多好文【我也写了一些相关领域的文章,希望能够得到博主的指导,共同进步!】

大家在看

  • Properties与xml知识点总结 348
  • C语言求十个数的最大值
  • 【名词解释】Unity中的Scrollbar组件及其使用示例 716
  • 【实用技巧】Unity中的Scrollbar组件的实用技巧 252
  • Vue3主题色变更原理版 63

最新文章

  • ArrayList<Integer>()转为int[]的几种方式
  • 深度搜索(递归实现)-计算岛屿最大面积
  • 五、特征缩放和多项式回归
2024
06月 28篇
05月 20篇
2023年10篇
2022年15篇
2021年2篇
2020年10篇
2019年48篇

目录

目录

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳SEO优化公司伊犁关键词按天计费哪家好铁岭英文网站建设贺州百度网站优化排名公司南京建设网站推荐芜湖网络推广价格仙桃推广网站哪家好永州网页设计多少钱达州seo排名报价安康网站优化按天收费报价长治网站搭建多少钱龙岗seo报价马鞍山至尊标王公司黔南关键词按天收费岳阳网站优化按天扣费推荐鹤岗网站优化按天扣费推荐巴中百度网站优化排名推荐惠州seo优化哪家好东营网站关键词优化哪家好廊坊seo哪家好绥化百姓网标王推广公司荷坳关键词排名包年推广西安百度竞价开封建设网站民治百度seo推荐日照外贸网站制作上饶SEO按天扣费价格海北网站优化价格长治网站优化按天扣费邯郸网站搜索优化兰州网站优化公司歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化