Hadoop基础概念

一、基本概念与模型

1、大数据

结构化数据:有严格定义

半结构化数据:html、json、xml等,有结构但没有约束的文档

非结构化数据:没有元数据,比如说日志类文档

搜索引擎:ELK,搜索组件、索引组件组成,用来搜索数据,保存在分布式存储中

爬虫程序:搜索的是半结构化和非结构化数据

需要+高效存储能力、高效的分析处理平台

 

2、Hadoop

Hadoop是用Java语言开发的,是对谷歌公司这3篇论文开发出来的山寨版

2003年:The Google File System -->HDFS

2004年:MapReduce:Simplified Data Processing On Large Cluster -->MapReduce

2006年:BigTable:A Distributed Storage System for Structure Data -->Hbase

HDFS+MapReduce=Hadoop

HDFS:Hadoop的分布式文件系统,有中心节点式存储数据

MapReduce:面向大数据并行处理的计算模型、框架和平台

HBase:Hadoop的database数据库

官方网址:hadoop.apache.org

 

二、HDFS

1、HDFS问题

存在名称节点:NN:NameNode和第二名称节点SNN:Secondary NameNode

       NN数据存储在内存中,由于数据在内存中变化十分快,硬盘存储跟不上内存的变化速度,所以通过类似于数据库事务日志的机制,向硬盘存储映像文件,在此过程中 ,追加日志不断被清空不断被写入,所以当NN服务器挂了,至少不会丢失太多文件,但是由于文件元数据在宕机后可能有不统一的情况造成文件校验,数据量过大会花费大量时间。

       SNN为辅助名称节点,NN的追加日志放到了共享存储上,使SNN能访问,当NN宕机后,SNN会可以根据追加日志及时启动,至少优化了只有一个NN时候的文件校验时间。

在Hadoop2或者HBase2版本之后,可以将数据共享存放到zookeeper,几个节点通过zookeeper同时获取到视图,很好的解决了刚才的问题,也能够进行高可用设置了。

2、HDFS数据节点工作原理:

存在数据节点:DN:DataNode

       当有数据存储时,HDFS文件系统除了存储DN,会再寻找两个数据节点进行存储作为副本,数据节点之间以链式相连,即有第一份才有第二份,有第二份才有第三份,每次存储结束后节点会向前数据点报告,向元数据块或者服务器报告自己的状态和数据块列表。当某一点数据丢失,此时链式数据会重新启动,补足丢失的数据块。

 

三、MapReduce

1、JobTracker:作业追踪器

每一个负责运行作业的节点,在MapReduce里叫任务追踪器,TaskTracker

2、每一个节点都要运行两类进程:

DataNode:负责存储或者删除数据等数据管理操作

TaskTracker:负责完成队列处理,属于Hadoop集群

3、程序特点

传统程序方案:程序在哪,数据就加载在哪

Hadoop方案:数据在哪,程序就在哪里跑

4、Hadoop分布式运行处理框架

任务提交可能会同时由N个人提交N个作业,每个人的作业不一定运行在所有节点上,有可能是在一部分节点上,甚至可能是一个节点上,为了能够限制一个节点上不要接入过多的任务,所以我们通过task slot,任务槽,来确定一个节点最多只能运行多少份任务

5、函数式编程:MapReduce参考了这种运行机制

Lisp,ML函数式编程语言:高阶函数

map,fold

map:把一个任务映射为多个任务,把一个函数当作为一个参数,并将其应用于列表中的

所有元素,会生成一个结果列表,即可映射为多个函数。

map(f())

fold:不断地把得到的结果折叠到函数上,接收两个参数:函数,初始值。

fold(g(),init):首先结合init初始值,通过函数g()得到g(init)的结果,然后将得到的结果g(init)在第二轮将作为初始值,通过函数g()得到g(g(init))的结果,以此类推最后会得到一个最终结果。

6、MapReduce过程

<1>mapper:每一个mapper就是每一个实例,每一个mapper处理完会生成一个列表,相当于map函数的过程,mapper接收数据如果是键值数据则直接使用,如果不是键值数据会先转换为键值数据

<2>reducer:当所有mapper运行完以后才会进行reducer,相当于fold函数的过程,reducer可能不止一个,reducer只处理键值型数据,接收到的数据做折叠

<3>reducer在折叠后的数据依旧是键值型数据,折叠过程叫做shuttle and sort,此过程十分重要

 

便于理解:同济一本书每个单词出现的次数:

mapper:每100页一个单位,比如说5 mappers,用于拆分成为单词,比如说this 1,is 1,this 1,how 1,单词逐个拆分,mapper处理后的为k-v型数据

reducer:reducer只处理键值型数据,将拆分出来的单词传递进reducer中进行统计处理与排序,将键相同的数据发往同一个reducer中,最后的结果this 500,is 200等等,结果依旧为kv型数据

shuffle and sort:接收mapper后,reducer将单词出现的次数进行键值数据统计计算的过程叫做shuffle and sort

 

7、Hadoop数据图

Hadoop只提供了数据存储平台,任何作业、任何数据程序处理必须由Hadoop开发人员写MapReduce程序调用才可供使用,mapper的具体任务是什么,reducer用什么,都取决于开发人员的定义是什么。

(1)partitioner:分区器,具备决定将mapper键值通过shuffle and sort过程发送给哪个reducer的功能

image.png

(2)combiner:如果mapper产生的键值数据中的键相同,那么将合并键,否则不合并,分散发送,同样由hadoop开发人员开发。其输入键和输出键必须保证一致。

image.png

(3)多个reduce时:

image.png

sort:每一个map在本地排序叫做sort

(4)单个reduce时:

image.png

(5)shuffle and sort阶段:

image.png

(6)作业提交请求过程:

image.png

(7)JobTracker内部结构

image.png

作用:作业调度、管理监控等等,所以运行时JobTracker会非常繁忙,它由此也成为了性能瓶颈,不过在MRv2版本后,作业调度、管理和监控功能被切割

(8)版本更迭

MRv1(Hadoop2) --> MRv2(Hadoop2)

MRv1:集群资源管理器、数据处理程序

MRv2:

YARN:集群资源管理器

MRv2:数据处理程序

Tez:执行引擎

MR:批处理作业

RT Stream Graph:实时流式图处理,图状算法数据结构

image.png

(9)第二代hadoop资源任务运行流程

image.png

mapreduce把 资源管理和任务运行二者隔离开了,程序运行由自己的Application Master负责,而资源分配由Resource Manager进行。所以当一个客户端提交一个任务时,Resource Manager会询问每一个Node Manager有没有空闲的容器来运行程序。如果有,它去找有的这个节点,来启动这个主控进程Application Master。然后App Mstr向Resource Manager申请资源任务,Resource Manager分配好资源任务后会告诉App Mstr,之后App Mstr可以使用contrainer来运行作业了。

每一个container在运行过程中都会将反馈自己的作业任务给App Mstr,当container中有任务结束了,App Mstr也会报告给Resource Manager,Resource Manager会将资源收回来

RM:Resource Manager

NM:Node Manager

AM:Application Manager


猜你喜欢

转载自blog.51cto.com/13873498/2407779
0条评论
添加一条新回复