Hadoop之旅(5)— MapReduce Java API案例实战

大数据开发八股文总结——Hadoop 大数据开发学习总结——Hadoop 阅读详情

1、MapReduce 案例

        本文实现 MapReduce 用 Java API 实现统计单词案例、代码优化及其 MapReduce 编程格式;这也是面试经典笔试代码题。代码就是  “ MapReduce 八股文 ”,我们只需修改部分代码。

Hadoop之旅(4)— MapReduce 与 YARN 原理讲解  、 Hadoop之旅(1)—单机与伪集群安装、简单经典案例

准备好环境:idea、创建项目、添加依赖;


A:依赖

 <!-- Hadoop Client 依赖-->
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-client</artifactId>
            <version>${hadoop.version}</version>
        </dependency>


B:启动 MapReduce



2、代码实现 WordCountMapReduce.class


2.1、map 阶段 — 代码有一定的格式、只需修改部分代码

 /**
     * step 1: Map Class
     * <p>
     * map 输入 ——> map 输出
     * public class Mapper<KEYIN, VALUEIN, KEYOUT, VALUEOUT>
     */
    public static class WordCountMapper extends
            Mapper<LongWritable, Text, Text, IntWritable> {


        private Text mapOutputKey = new Text();
        private final static IntWritable mapOuputValue = new  IntWritable(1);

        /**
         * Called once for each key/value pair in the input split. Most applications
         * should override this, but the default is the identity function.
         *
         * @param key
         * @param value
         * @param context
         */
        @Override
        public void map(LongWritable key, Text value, Context context)
                throws IOException, InterruptedException {
            //super.map(key, value, context);
            // 获取值
            String lineValue = value.toString();

            // split 占内存 ——> 分割字符串
            // String[] strs = lineValue.split(" ");
            StringTokenizer stringTokenizer = new StringTokenizer(lineValue);

            // iterator
            while(stringTokenizer.hasMoreTokens()){
                // get word value
                String wordValue = stringTokenizer.nextToken();
                // set value
                mapOutputKey.set(wordValue);;
                // output  ——> 上下文操作
                context.write(mapOutputKey, mapOuputValue);
            }
        }
    }


2.2、Reduce 阶段

/**
     * step 2: Reduce Class
     * reduce 输入 ——> reduce 输出
     * public class Reducer<KEYIN,VALUEIN,KEYOUT,VALUEOUT>
     */
    public static class WordCountReducer extends
            Reducer<Text, IntWritable, Text, IntWritable> {

        private IntWritable outputValue = new  IntWritable();

        /**
         * This method is called once for each key. Most applications will define
         * their reduce class by overriding this method. The default implementation
         * is an identity function.
         *
         * @param key
         * @param values
         * @param context
         */
        @Override
        public void reduce(Text key, Iterable<IntWritable> values, Context context)
                throws IOException, InterruptedException {
            //super.reduce(key, values, context);

            // sum tmp
            int sum= 0 ;
            // iterator
            for(IntWritable value: values){
                // total
                sum += value.get();
            }
            // set value
            outputValue.set(sum);

            // output
            context.write(key, outputValue);
        }
    }


2.3、封装map和reduce

 // step 3: Driver ,component job
    // 封装map和reduce
    public int run(String[] args) throws Exception {
        // 1: get confifuration   ——> extends Configured ——> new Configuration();
        Configuration configuration = getConf();

        // 2: create Job
        Job job = Job.getInstance(configuration, this.getClass().getSimpleName());

        // run jar
        job.setJarByClass(this.getClass());
        
        // 3: set job
        // input  -> map  -> reduce -> output
        // 3.1: input ——> 参数(数据源)
        Path ipath = new Path(args[0]);
        FileInputFormat.addInputPath(job,ipath);

        // 3.2: map
        job.setMapperClass(WordCountMapper.class);
        // 设置输出类型
        job.setMapOutputKeyClass(Text.class);
        job.setMapOutputValueClass(IntWritable.class);

        // 3.3: reduce
        job.setReducerClass(WordCountReducer.class);
        // 设置输出类型
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(IntWritable.class);

        // 3.4: output ——> 参数(输出源)
        Path outPath = new Path(args[1]);
        FileOutputFormat.setOutputPath(job, outPath);

        // 4: submit job ——> job 提交
        boolean isSuccess = job.waitForCompletion(true);
        return isSuccess ? 0 :1;
    }


2.4、运行

// step 4: run program
    public static void main(String[] args) throws Exception {
        // 1: get confifuration
        Configuration configuration = new Configuration();

        //int status = new WordCountMapReduce().run(args);

        // ——> extends Configured ——> implements Tool
        int status = ToolRunner.run(configuration,//
                new WordCountMapReduce(),//
                args);

        System.exit(status);

    }

这里需要注意的是、用到ToolRunner类,所以我们的 WordCountMapReduce 类要写成这样:

public class WordCountMapReduce extends Configured implements Tool{


2.5、程序打包



2.6、运行 jar 

数据源:/chenzhengyou/mapreduce/wordcount/input/idea.input

输出源:/chenzhengyou/mapreduce/wordcount/output/test01


运行MapReduce:[root@czy-1 hadoop-2.5.0]# 

bin/hadoop jar  /usr/local/chenzhengyou/hadoop/standalone/hadoop-2.5.0/jars/hadoop-mapreduce.jar /chenzhengyou/mapreduce/wordcount/input/idea.input /chenzhengyou/mapreduce/wordcount/output/test01



查看结果:bin/hdfs dfs -text /chenzhengyou/mapreduce/wordcount/output/test01/par*





数据开发八股文整理- Hadoop 一旦Name Node断电,系统会合并Fsimage文件和Edits文件,合成新的元数据,其中Secondary Name Node专门用于合并两个文件,接替Name Node的工作。它是一个分布式运算框架,其中Map函数用于数据预处理,输入和输出都是键值对形式,处理好的数据会送入Reduce阶段,对每一组简直进行处理,形成最后的输出。5通过随机前缀重新设计键值,针对聚合类的数据倾斜,可以在map阶段添加随机后缀,是的分区的时候能够分到不同节点,然后再重新进行一次全局聚合。 阅读详情

相关推荐

深入解析 Hadoop 核心技术:构建大数据处理基石

分布式文件系统,负责存储大规模数据,将数据分割成块并分布存储在多个节点上,具有高容错性和高可靠性。MapReduce:分布式计算模型,用于大规模数据集的并行处理。它将计算任务分解为 Map 阶段和 Reduce 阶段,通过在集群节点上并行执行来提高计算效率。:资源管理框架,负责集群资源的分配和管理,包括 CPU、内存等资源,使得不同的应用程序能够共享集群资源并高效运行。

2301_82175597的博客 1373

Hadoop 最全八股文总结

序列化是将对象转换为字节流的过程,以便进行存储或网络传输;反序列化则是将字节流还原为对象。

YTHX516的博客 1036

Java 与大数据:Hadoop 和 Spark 的完美集成

嗨嗨嗨,各位小伙伴!今天咱们就来聊一聊如何使用 Java 在 Hadoop 和 Spark 之间架起一座桥梁。我们将从头开始,一步步带你进入这个神奇的世界!Hadoop 是一个用于处理大数据的开源框架。它有两个主要组成部分:HDFS(Hadoop Distributed File System)和 MapReduce。HDFS 用来存储海量数据,而 MapReduce 则是用来处理这些数据的编程模型。Apache Spark 是一个通用的计算引擎,旨在简化大数据的处理。

java专栏 1934

Hadoop八股

1、分布式与集群的共同点与区别? 共同的:分布式和集群都是多台机器 区别:分布式每个服务器上的系统都是不一样的,但是集群是一致的(百度主页) 2、负载均衡是什么? 1把负载(工作任务)进行平衡、分摊到多个操作单元上进行运行 2解决单个无法处理所有任务,多个一起处理的问题 3、故障转移是什么? 单点故障是一个服务器出问题 1活动服务或应用意外终止,快速启用冗余或备用的服务器、系统、硬件或者网络接替他们工作 2又称为容错系统,指的是可以容忍错误的发生 3核心是设置备份,出现故障主备切换 4前提是数据状态保持一致

weixin_45638560的博客 1077

Hadoop学习之MapReduce(一)

在学习过了HDFS架构和Hadoop的配置管理后,现在学习MapReduce应用程序的编写和管理。首先简单介绍一下MapReduce框架。 MapReduce是一个易于编写程序的软件框架,这些应用程序以可靠的、容错的模式并行的运行在很大规模的商用硬件集群上(数以千计的节点),处理超大数量的数据(超过TB的数据集)。一个MapReduce作业通常将输入数据集分割为独立的数据块,这些数据块被map任

skyWalker_ONLY 3914

【5大核心!】Hadoop与Java大数据开发实战——从“数据菜鸟”到“分布式大神”的终极秘籍!

🔥关注墨瑾轩,带你探索编程的奥秘!🚀🔥超萌技术攻略,轻松晋级编程高手🚀🔥技术宝库已备好,就等你来挖掘🚀🔥订阅墨瑾轩,智趣学习不孤单🚀🔥即刻启航,编程之旅更有趣🚀你的数据还在用Excel“手动搬运”?或者想让Java程序像“分布式超人”一样处理海量数据?今天,我们将用5个“核心技巧”,手把手教你用Java调用Hadoop开发大数据应用!无论你是“Hadoop萌新”还是“Java老司机”,这篇文章都将为你揭秘分布式计算的“黑科技”玩法!

java专栏 526

Hadoop实战-初级部分 之 Hadoop MapReduce JAVA API

私塾在线《深入浅出学   Hadoop-   初级   部分》    ——   系列精品教程 视频课程地址》》》  http://sishuok.com/product/481 整体课程概览 第一部分:开始云计算之旅 第二部分:初识Hadoop 第三部分:Hadoop 环境安装部署 第四部分:Hadoop Shell 基本操作介绍 第五部分:Hadoop  分布式文件

hdsfnbdgs的专栏 445

五分钟学大数据-Spark 面试八股文1

1. Spark 的运行流程 2. Spark 有哪些组件 4. RDD 中 reduceBykey 与 groupByKey 哪个性能好,为什么 5. 介绍一

大数据之旅——hadoop篇之MapReduce(2)

hadoop之MapReduce

qq_49948651的博客 1518

【HSCNN解析】HSCNN:从欠采样光谱图重建高光谱图的CNN网络

本文介绍HSCNN,是一个将欠采样光谱图重建为高光谱图的纯CNN网络,2017年提出。

上个大学哪有不疯的?硬撑罢了! 1625

易灵思FPGA-软件Efinity和Modelsim联仿设置

文章目录前言一、modelsim破解过程二、使用步骤1.引入库2.读入数据总结欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智

qq_35221855的博客 5368

Hadoop MapReduce JAVA API

第一部分:开始云计算之旅 第二部分:初识Hadoop 第三部分:Hadoop 环境安装部署 第四部分:Hadoop Shell 基本操作介绍 第五部分:Hadoop  分布式文件系统1 第五部分:Hadoop  分布式文件系统2 第五部分:Hadoop  分布式文件系统3 第六部分:MapReduce  开发1 第六部分:MapReduce  开发2 第七...

jenmhdn 243

Calibre LVS错误排查实战:从Innovus到GDS的完整调试流程(附常见错误解析)

本文详细介绍了数字IC后端设计中,从Innovus工具输出数据到Calibre LVS物理验证的完整调试流程。文章系统性地讲解了LVS错误排查的方法论,包括报告解读、图形化定位以及针对器件不匹配、电源网络错误、短路开路等常见问题的深度解析与解决方案,旨在帮助工程师高效完成版图与原理图的一致性检查。

weixin_29218963的博客 778

MapReduce编程实践:从理论到实战的Hadoop实验指南

MapReduce作为分布式计算的核心编程模型,其原理在于将大规模数据处理任务分解为Map(映射)和Reduce(归约)两个阶段,通过Shuffle过程实现数据重分布。这种分而治之的思想为海量数据并行处理提供了基础框架,其技术价值在于能够将复杂的计算任务透明地分布到成百上千台普通服务器上执行,极大地提升了数据处理的吞吐量和可扩展性。在工程实践中,MapReduce被广泛应用于日志分析、数据清洗、搜索引擎索引构建等离线批处理场景。本文聚焦于Hadoop MapReduce的初级编程实践,通过环境搭建、核心组件

weixin_30493401的博客 434

霍尔编码器 vs 磁编码器:如何为你的电机控制项目选择最佳传感器(附实战对比)

本文深入对比了霍尔编码器和磁编码器在电机控制项目中的应用,从技术原理、性能参数、成本效益到实际场景选择提供了全面分析。通过实验室测试和项目案例,帮助工程师根据精度、环境抗性和预算选择最佳传感器方案,特别适合机器人、伺服驱动等领域的开发者参考。

weixin_28312391的博客 356

003:大疆智图新手入门:从下载安装到首次建模实战

本文为大疆智图新手提供从下载安装到首次三维建模的完整实战指南。详细介绍了软件安装的硬件要求、试用许可申请流程,并指导用户如何准备航拍数据或使用开源样例进行首次建模。通过分步操作演示与核心参数设置讲解,帮助初学者快速掌握使用大疆智图进行实景三维重建的核心流程与常见问题解决方案。

t8u9v0的博客 704

推荐项目:Pydoop - Python版的Hadoop MapReduce和HDFS API

推荐项目:Pydoop - Python版的Hadoop MapReduce和HDFS API 项目地址:https://gitcode.com/gh_mirrors/py/pydoop 1、项目介绍 Pydoop是一个强大的开源工具,它为Apache Hadoop提供了一个全面的Python接口。这个项目由CRS4维护,自2009年以来,一直致力于简化Hadoop生态系统与Python之间的交互...

gitblog_00038的博客 563

2021年J题:基于STM32F103的周期信号波形识别与参数测量系统设计(立创EDA+SZPT_ZXL)

本文详细复盘了2021年全国大学生电子设计竞赛J题获奖项目,手把手教你如何基于STM32F103微控制器设计并实现周期信号波形识别与参数测量系统。文章深入剖析了硬件电路设计(包括程控放大、工作点抬升与滞回比较器)与核心软件算法(如动态采样、FFT频谱分析与波形识别逻辑),并分享了DMA传输、FFT库使用等实战要点与避坑指南,为嵌入式信号处理与电赛备赛提供了宝贵经验。

weixin_32673065的博客 230

hadoop-mapreduce

基于Kafka+ElasticSearch+MongoDB+Redis+XXL-Job日志分析系统(学习)配置即权限:从传统开源 RBAC 框架到 SPARK 的六层数据护盾,告别改权限就要改代码的魔咒。c++&MFC 用boost.asio库写的串口功能,包含发送、异步接收、打开、重连、关闭功能。Windows下NVM保姆级指南:安装、切换版本、指定路径+淘宝镜像配置,一次搞定!第2集:技术选型的智慧:Flask vs FastAPI,GLM-4 vs GPT。

slngX_kcczs的博客 273

DCMTK编译

dcmtk-3.6.4 使用Unicode?dcmtk的编译选项里没有关于Unicode的选项,OFString的接口里明确使用了OFString(char*)作为构造函数参数,所以,我们可以假设不能够自己擅自在CMakeList.txt里增加一行 add_definitions(-DUNICODE -D_UNICODE) 来强制使用Unicode编码。 亲测:加了之后编译不过 void...

C++ 爱好者 make_it_simple888 1735

《YOLO26/YOLO11/YOLOv8改进与系统实战》,改进与系统实战专栏目录和介绍

YOLOv8 是目前比较火和比较成熟的深度学习框架,是2023年1月发布的,由 Ultralytics 团队开发。Ultralytics自YOLOv5 开始一直积极维护和更新 YOLO 框架,因此 YOLOv8 也享有持续的维护与升级支持。因此我写下《手把手教你YOLOv8实战》专栏,专门为那些对计算机视觉、深度学习、以及目标检测技术感兴趣的读者设计。通过本专栏,你将深入理解 YOLOv8 的核心原理与实际应用,从0 开始学习并掌握如何使用 YOLOv8 完成各类目标检测任务,帮助你快速上手并掌握 YOLO

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 1万+

Hadoop+Spark 之旅—脚踏实地、仰望星空(教程目录)

Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。Hadoop实现了一个分布式文件系统

用心做每件事 2080

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

hadoop-mapreduce编程模型

基于Kafka+ElasticSearch+MongoDB+Redis+XXL-Job日志分析系统(学习)配置即权限:从传统开源 RBAC 框架到 SPARK 的六层数据护盾,告别改权限就要改代码的魔咒。c++&MFC 用boost.asio库写的串口功能,包含发送、异步接收、打开、重连、关闭功能。Windows下NVM保姆级指南:安装、切换版本、指定路径+淘宝镜像配置,一次搞定!第2集:技术选型的智慧:Flask vs FastAPI,GLM-4 vs GPT。

slngX_kcczs的博客 419

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

一课一得 | Hadoop核心技术学习之旅:从零入门到实战分析

本课程系统学习了Hadoop核心技术,从Hadoop概述、完全分布式环境部署,到HDFS、MapReduce、Hive等核心组件的深入实践,并通过“电影网站用户影评分析”项目完成综合应用,掌握了大数据的处理流程与分析方法。

XiaoZhi_C的博客 761

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

从零到Hadoop:我的大数据思维进化之旅

摘要:本文记录了大数据专业学生在《Hadoop核心技术》课程中的学习历程。通过12周的实践,学生从零基础到掌握HDFS集群部署、JavaAPI操作、MapReduce开发和Hive数仓分析等核心技能。重点分享了解决SSH权限、HDFS配置、MapReduce类型匹配等典型问题的经验,并总结了分布式思维的建立和问题解决能力的提升。课程不仅让学生掌握了Hadoop技术栈,更为后续学习Spark、Flink等大数据技术奠定了基础。

lms11511的博客 296
上一篇: Hadoop之旅(4)— MapReduce 与 YARN 原理讲解
下一篇: Hadoop之旅(7)— HDFS HA Zookeeper自动故障转移
AndyChen9988
博客等级 码龄11年 276粉丝 89原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值