Hadoop基础——MapReduce

news2024/9/23 23:29:53

1. Hadoop序列化和反序列化及自定义bean对象实现序列化?

1) 序列化和反序列化的含义

序列化是将内存中的对象转换为字节序列,以便持久化和网络传输。
反序列化就是将字节序列或者是持久化数据转换成内存中的对象。
Java的序列化是一个重量级序列化框架(Serializable),一个对象被序列化后,会附带很多额外的信息,不便于在网络中高效传输,所以hadoop开发了一套序列化机制(Writable)
2)自定义bean对象序列化传输步骤及注意事项
必须实现Writable接口
反序列化时, 需要反射调用空参构造函数,所以必须有空参构造
重写序列化方法
重写反序列化方法
注意反序列化的顺序和序列化的顺序完全一致
如果需要将自定义的bean放在key中传输,则还需要实现comparable接口,因为mapreduce框中的shuffle过程一定会对key进行排序.

2. MapReduce的工作流程

在这里插入图片描述
MapReduce可以划分为四个阶段,分别为: Split, Map, Shuffle, Reduce。

  • Split阶段: 主要负责“分”, 这个阶段MR会自动将一个大文件切分成多个block,这个split只是逻辑概念,并不是物理上的切片,仅包含每个block的起始位置,长度,所在位置等描述信息。每个block交由一个map task处理。
  • Map阶段:映射阶段,处理经过split切分的数据片段,一个split对应一个map task,。每个计算节点将输入数据块作为输入,通过应用用户自定义的映射函数将其转换为一系列Key-Value。映射函数根据具体的应用逻辑来定义,可以执行过滤, 转换,提取等操作。
  • Shuffle and Sort阶段:(合并与排序)(洗牌)
    在映射阶段结束后,所有计算节点产生的Key-Value将被收集和排序。合并与排序阶段的目标是根据键值对进行排序,将相同键的值合并在一起。
  • Reduce阶段:
    归约阶段,计算节点将经过排序和合并的键值对进行处理。每个计算节点会根据用户定义的规约函数对具有相同键的值进行合并和计算。归约函数可以执行各种聚合操作,例如求和,计数, 平均值等。最终,计算节点会产生一组最终的输出键值对。

3. MR中的shuffle阶段的工作流程以及优化方式。

在这里插入图片描述

  • 工作流程
  1. 分区(partition) :分区的目的是将具有相同键的键值对路由到同一个reducer,以便在reduce阶段进行处理。以便都是按照哈希算法分区。
  2. 排序(sort)
    在每个分区内部,键值对会根据key进行排序。目的是将具有相同key的值聚在一起,以便在归约阶段进行合并操作。
  3. 合并(split)
    在排序完成后,各分区的排序结果会被合并,生成全局有序的键值对序列。
  • 优化方式
  1. 压缩,在shuffle阶段通过压缩中间数据可以不减少网络传输的数据量,减少网路带宽的使用。
  2. 增加combiner, 合并器可以在映射阶段输出键值对时执行一些局部的规约操作,减少数据传输量和磁盘IO。

4. MapReduce工作原理(Map Task 和Reduce Task 的工作机制)

MapTask:
在这里插入图片描述

  • read: 从输入Inputsplit中解析出key/value
  • map: 将解析出的key/value交给用户编写map()函数,并产生一系列的新key/value。
  • collect: 调用Partitioner, 将生成的key/value分区。
  • spill:溢写,当缓冲区占用达到阈值(80%)后,MR会将数据写到本地磁盘上,生成一个临时文件。注意: 将数据写入本地磁盘前,先要对数据进行一次本地排序,并在必要时对数据进行合并,压缩等操作。
  • combine:当数据处理完成后,MapTask对所有临时文件进行一次合并,以确保最终只会生成一个数据文件。
    ReduceTask
    在这里插入图片描述
  • copy: reduce Task从个map task上远程拷贝一片数据,如果该片数据大小超过一定阈值,写到磁盘上,否则写入内存。
  • merge: 在远程copy数据的同时,reducetask启动两个后台线程对内存和磁盘上的文件进行合并,以防止内存使用过多或磁盘上文件过多。
  • sort: 目的是将key相同的数据聚在一起,由于各个map task已经实现对自己处理结果进行了局部排序,因此,reducetask 只需对所有数据进行一次归并排序。
  • reduce: reduce()函数将计算结果写到hdfs上

5. MapReduce有几种排序方式及排序发生的阶段

分类

  1. 部分排序
    MapReduce根据输入记录的键对数据集排序,保证输出的每个文件内部排序。
  2. 全排序
    首先创建一系列排好序的文件,其次,串联这些文件,最后,生成一个全局排序的文件。
  3. 辅助排序(GroupingComparator分组)
    对键进行排序和分组以实现对值的排序。
  4. 二次排序
    在自定义排序过程中,如果compareTo中的判断条件为两个即为二次排序。
    阶段
  5. 一个是在map 侧,发生在spill后partition前。
  6. 一个是在reduce 侧,发生在copy后 reduce前。

6. MR中的combiner的作用是什么?

  1. combiner的作用是对每一个maptask的输出进行局部汇总,以减小网络传输量
  2. combiner的输出kv要与reducer的输入kv类型对应。
  3. combiner和reducer的区别在于运行的位置:
    • combiner是在每个map task的节点运行
    • reducer是接收全局所有mapper的输出结果。

7. 如果没有定义partitioner,数据在被送达reducer前是如何被分区的

如果没有自定义的partitioning, 则默认的partition算法,根据每一条数据的key 的hashcode值模运算reducer的数量,得到分区号。(哈希取余)

8. MR不适合计算提速的场景

  1. 小文件
  2. 事务处理
  3. 只有一台机器

9. Hadoop的缓存机制(DistributedCache)

分布式缓存一个最重要的应用场景:map side join操作,一个表很大,另一个表很小。通过广播处理,每个计算节点上存一份小表,然后进行map端的连接操作。
广播处理运用到了分布式缓存的技术。分布式缓存机制会将需要的缓存的文件分发到各个执行任务的子节点的机器中,这样各个节点就可以自动读取本地文件系统上的数据进行处理。

10. 如何使用MR实现两个表的join?

  1. reduce side join : 在map 阶段, map函数同时读取两个文件file1 和 file2,为了区分两种来源的k/v数据对,对每条数据打一个标签(tag)。例:tag = 0 表示来自文件file 1, tag = 0表示来自文件file2.
  2. map side join: map side join针对以下场景进行的优化:两个待连接表中, 有一个表非常大,而另一个表非常小,以至于小表可以直接存入内存,并且将小表复制多份,让每个map task内存中存一份, 然后扫描大表:对于大表中的每一条记录 k/v,在内存中查找是否有相同的key的记录,如果有,则连接后输出即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/710700.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《TCP IP网络编程》第一章

2023.6.28 正式开始学习网络编程。 每一章每一节的笔记都会记录在博客中以便复习。 第1章 1.1理解网络编程和套接字 网络编程又叫套接字编程。所谓网络编程,就是编写程序使两台连网的计算机相互交换数据。 为什么叫套接字编程? 我们平常将插头插入插座上…

基于传统检测算法hog+svm实现目标检测

直接上效果图: 代码仓库和视频演示b站视频004期: 到此一游7758258的个人空间-到此一游7758258个人主页-哔哩哔哩视频 代码展示: 数据集在data文件夹下 需要检测的目标对象数据集放在positive文件夹下 不需要的检测对象放在negative文件夹下…

如何提高个人领导力?

当今竞争激烈的商业环境中,领导力变得越来越重要。领导力不仅是一项人类的艺术和科学,还由对人和组织的理解、管理和激励能力组成。因此,不断提高自身的领导力水平是每个领导者必须面对的挑战。而对于想要提高自身领导力的读者来说&#xff0…

复习之linux中的远程登陆服务

一、实验环境配置 本次实验需要两台新的虚拟机,因此我们reset虚拟机aa 和 bb 修改虚拟机的主机名配置基础ip网络删除/root/.ssh/目录------恢复原始状态 1. 重置虚拟机aa,bb # westos-vmctl reset aa 2. 修改虚拟机的主机名 # hostnamectl set-hostname b…

结构体指针

结构体数组 #include<stdio.h> struct student {char name[20];int age;int scores[3];char addr[50]; }; int main() {struct student stu{"林冲",30,100,100,100,"汴京"};struct student* p;p&stu;//printf("%s\n",(*p).name);//pr…

Table表格(antd-design组件库)简单使用

1.Table表格 展示行列数据。 2.何时使用 当有大量结构化的数据需要展现时&#xff1b; 当需要对数据进行排序、搜索、分页、自定义操作等复杂行为时。 组件代码来自&#xff1a; 表格 Table - Ant Design 3.本地验证前的准备 参考文章【react项目antd组件-demo:hello-world rea…

网络环境TFTPNFS搭建

文章目录 1. TFTP服务搭建2. NFS 环境搭建 1. TFTP服务搭建 1、Ubuntu上搭建TFTP服务器&#xff0c;需要安装tftp-hpa和tftpd-hpa&#xff0c;命令如下&#xff1a; sudo apt-get install tftp-hpa tftpd-hpa sudo apt-get install xinetd2、TFTP也需要一个文件夹来存放文件…

VMware安装Centos7.6教程(保姆级教程)

目录 一、为安装系统做准备&#xff0c;划分空间 二、开始安装Centos7.6系统 2.1、挂载镜像 2.2、基础配置 2.3、手动分区 2.4、KDUMP配置 2.5、网络配置 2.6、安全配置 2.7、设定root密码与创建账户 2.8、其它 一、为安装系统做准备&#xff0c;划分空间 二、开始安…

Linux学习之SELinux简介

SELinux叫做安全增强的Linux版本。以前控制访问的时候&#xff0c;需要用户的权限和进程的权限进行控制。用户访问文件的时候&#xff0c;有两种访问控制&#xff0c;如下&#xff1a; 强制访问控制&#xff08;英语简写&#xff1a;MAC&#xff09; 自主访问控制&#xff08;英…

【中国互联网信息中心】第51次中国互联网络发展状况统计报告.pdf

【中国互联网信息中心】第51次中国互联网络发展状况统计报告

uniapp将图片转化为base64格式,并用url展示出来

效果图&#xff1a; 编码&#xff1a; <template><view class"container"><button click"chooseImage">选择图片</button><image v-if"base64Image" :src"base64Image"></image></view> &…

决策树 ID3 手工推导

掌握决策树ID3算法的原理&#xff0c;通过增益熵实现手工推导的过程。 参考案例&#xff1a;https://cuijiahua.com/blog/2017/11/ml_2_decision_tree_1.html 机器学习实战教程(二)&#xff1a;决策树基础篇之让我们从相亲说起 决策树 ID3 手工推导 决策树 ID3 简介 ID3作为一种…

【剑指offer专项突破版】二叉树篇——“C“

文章目录 前言一、二叉树剪枝题目分析思路分析代码 二、序列化与反序列化二叉树题目分析思路分析代码 三、从根节点到叶节点的路径数字之和题目分析思路分析代码 四、 向下的路径节点之和题目分析思路分析思路①代码思路②代码 五、节点之和最大的路径题目分析思路分析代码 六、…

Linux--查看Linux的体系结构以及内核版本:uname

语法&#xff1a; uname 选项功能&#xff1a; uname用来获取电脑和操作系统的相关信息。 选项&#xff1a; -a或–all 详细输出所有信息&#xff0c;依次为内核名称&#xff0c;主机名&#xff0c;内核版本号&#xff0c;内核版本&#xff0c;硬件名&#xff0c;处理器类型&a…

【2023比惨大会】测试惨吗?舍我其谁!

2023年&#xff0c;流行“比惨”。 作为一个测试员&#xff0c;惨吗&#xff1f;&#xff01; 看后不要太现实 自学软件测试三个月&#xff0c;然 简历石沉大海 2022年度的绩效&#xff0c;2023年都要过完了 辞职大半年了&#xff0c;至今没找到合适的工作 昨天还在流泪加班&…

《阿里大数据之路》研读笔记(2)

前面的笔记地址&#xff1a; 《阿里大数据之路》研读笔记&#xff08;1&#xff09;_后季暖的博客-CSDN博客 规范化和反规范化总结就是 规范化让总的单一维度变成多个维度 然后每个维度就是一张表这样 适合OLTP 可以参考三范式 这样是为了减少冗余 比如一个商品有多个类目&…

这些接口测试工具你一定要知道

接口测试工具 接口测试工具如图&#xff1a; 1.Fiddler 首先&#xff0c;这是一个HTTP协议调试代理工具&#xff0c;说白了就是一个抓http包的工具。web测试和手机测试都能用到这个工具。既然是http协议&#xff0c;这个工具也能支持接口测试。 2.PostMan Postman一款非常流行…

【已解决】Spring boot项目获取到resource目录下文件完整路径怎么获取 ?

在实际开发过程中&#xff0c;可能有时候&#xff0c;我们将文件放在resource下&#xff0c;在程序中需要获取到文件路径然后操作。比如&#xff0c;将公钥放到resource文件夹下&#xff0c;在程序中需要获取到这个公钥的完整路径。怎么操作&#xff1f; 需要访问的文件位置 获…

数据库课程设计(教室设备故障报修系统)

题目&#xff1a;教室设备故障报修系统 内容与要求&#xff1a; 完成需求分析&#xff0c;写出功能需求和数据需求描述&#xff1b;在需求分析的基础上&#xff0c;完成数据库概念结构设计、逻辑结构设计、物理结构设计和数据库创建&#xff1b;完成视图、存储过程设计&#xf…

使用阿里云实现短信验证码

首先去阿里云中开启短信服务 然后申请自己的签名&#xff0c;发送的短信模板&#xff0c;之后点击右上角的头像&#xff0c;点击AccessKey&#xff0c;选第一个就行&#xff0c;然后保存这两个对应的值。 在等待签名和发送模板通过审核之后就可以配置我们的发送方法&#xff0c…