hadoop之MapReduce学习

为什么需要MapReduce

进行分析数据,计算方便和复用性强;而且是文件级别的

进程包括三个

mrappmaster:负责整个程序管理

maptask:负责map阶段的整个过程

reducemask:负责reduce阶段的整个过程

为什么需要把jar包上传到集群上?

因为不止一个节点需要用到jar包,放到本地不能够被使用,因此放到集群上, namenode会告诉需要的节点,jar包所在位置

 hadoop解决问题?

主要解决,海量数据的存储和海量数据的分析计算问题。

Hadoop三大发行版本?

三大发行版本: Apache、Cloudera、Hortonworks

Apache版本最原始(最基础)的版本,对于入门学习最好。
Cloudera在大型互联网企业中用的较多。主要为CDH
Hortonworks文档较好。

Hadoop的优势

1、高可靠2、高扩展性3、高效性4、高容错性

Hadoop组成

1)Hadoop HDFS:一个高可靠、高吞吐量的分布式文件系统。
2)Hadoop MapReduce:一个分布式的离线并行计算框架。
3)Hadoop YARN:作业调度与集群资源管理的框架。
4)Hadoop Common:支持其他模块的工具模块。

yarn架构

1)ResourceManager(rm)、2)NodeManager(nm)、3)ApplicationMaster、4)Container:

MapReduce将计算过程分为两个阶段:Map和Reduce
1)Map阶段并行处理输入数据
2)Reduce阶段对Map结果进行汇总

Hadoop运行模式

1)官方网址
(1)官方网站:
http://hadoop.apache.org/
(2)各个版本归档库地址
https://archive.apache.org/dist/hadoop/common/hadoop-2.7.2/
(3)hadoop2.7.2版本详情介绍
http://hadoop.apache.org/docs/r2.7.2/
2)Hadoop运行模式
(1)本地模式(默认模式):
不需要启用单独进程,直接可以运行,测试和开发时使用。
(2)伪分布式模式:
等同于完全分布式,只有一个节点。
(3)完全分布式模式:
多个节点一起运行。

hdfs产生背景

不方便管理和维护,迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统。HDFS只是分布式文件管理系统中的一种

HDFS优缺点

1.3.1优点
1) 高容错性
(1)数据自动保存多个副本。它通过增加副本的形式,提高容错性。
(2)某一个副本丢失以后,它可以自动恢复。
2) 适合大数据处理
(1)数据规模:能够处理数据规模达到GB、TB、甚至PB级别的数据。
(2)文件规模:能够处理百万规模以上的文件数量,数量相当之大。
3) 流式数据访问
(1)一次写入,多次读取,不能修改,只能追加。
(2)它能保证数据的一致性。
4) 可构建在廉价机器上,通过多副本机制,提高可靠性。

1.3.2缺点
1) 不适合低延时数据访问,比如毫秒级的存储数据,是做不到的。
2) 无法高效的对大量小文件进行存储
(1)存储大量小文件的话,它会占用NameNode大量的内存来存储文件、目录和块信息。这样是不可取的,因为NameNode的内存总是有限的。
(2)小文件存储的寻址时间会超过读取时间,它违反了HDFS的设计目标。
3) 并发写入、文件随机修改
(1)一个文件只能有一个写,不允许多个线程同时写。
(2)仅支持数据append(追加),不支持文件的随机修改。

hdfs组成

1)HDFS集群包括,NameNode和DataNode以及Secondary Namenode。
2)NameNode负责管理整个文件系统的元数据,以及每一个路径(文件)所对应的数据块信息。
3)DataNode 负责管理用户的文件数据块,每一个数据块都可以在多个datanode上存储多个副本。
4)Secondary NameNode用来监控HDFS状态的辅助后台程序,每隔一段时间获取HDFS元数据的快照。

1.为什么要配置NameNode的多目录?

NameNode的本地目录可以配置成多个,且每个目录存放内容相同,增加了可靠性

DataNode多目录的配置作用?

为什么要MapReduce?

答:单机无法胜任海量数据,集群又增加复杂度和开发难度,引入mapreduce框架后,开发人员可以将绝大部分工作集中在业务逻辑的开发上,而将分布式计算中的复杂性交由框架来处理

MapReduce核心思想

map阶段和reduce阶段(图)

MapReduce进程
一个完整的mapreduce程序在分布式运行时有三类实例进程:
1)MrAppMaster:负责整个程序的过程调度及状态协调
2)MapTask:负责map阶段的整个数据处理流程
3)ReduceTask:负责reduce阶段的整个数据处理流程

MapReduce编程规范(八股文)
用户编写的程序分成三个部分:Mapper,Reducer,Driver(提交运行mr程序的客户端)
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阶段
整个程序需要一个Drvier来进行提交,提交的是一个描述了各种必要信息的job对象

Writable序列化作用

序列化就是把内存中的对象,转换成字节序列(或其他数据传输协议)以便于存储(持久化)和网络传输。

自定义bean对象实现序列化接口

(1)必须实现Writable接口
(2)反序列化时,需要反射调用空参构造函数,所以必须有空参构造
(3)重写序列化方法
(4)重写反序列化方法
(5)注意反序列化的顺序和序列化的顺序完全一致
(6)要想把结果显示在文件中,需要重写toString(),且用” ”分开,方便后续用
(7)如果需要将自定义的bean放在key中传输,则还需要实现comparable接口,因为mapreduce框中的shuffle过程一定会对key进行排序

MapReduce的编程规范(八股文)

map阶段

reduce阶段

driver阶段

MapReduce数据压缩

牺牲时间换空间

block是hdfs上物理上存储的数据,切片是对数据逻辑上的划分(即不是真的把文件分成几份)

关于大量小文件,因为每个文件不到切片大小(默认为块大小128M)的都会分一个maptask,因此处理效率极其低下,因此采用数据清洗,把数据合并

原文地址:https://www.cnblogs.com/pursue339/p/10456836.html