Hadoop入门

 

 

Hadoop主要解决问题

大量的存  HDFS

大量的算  MapReduce

 

优势:

高可靠性

高扩展性

高效性  MapReduce 使得并行执行运算

高容错性 自动失败的任务重新分配

 

 

Hadoop1.x Hadoop2.x区别

 

 

 

实现计算与调度解耦  Yarn不但可以调度MapReduce 还可以调度其他资源

 

 

 

HDFS架构

NameNode(nn)  存储文件的元数据(文件名,文件目录结构,文件属性)

DataNode(dn)  存储数据本身

Secondary NameNode(2nn) nn的好助手/替身

 

 

 

Yarn架构 调度CPU和内存资源分配

 

 

 

ResourceManager(RM)(主管,负责从客户端接项目 然后安排人员 监控人员)

1处理客户端请求

2监控NodeManager

3启动并监控ApplicationMaster

4资源的分配和调度

 

NodeManager(NM)(项目组的程序员 负责具体干活的人)

1管理单个节点的资源

2执行ResourceManager的命令

3执行ApplicationMaster的命令

 

ApplicationMaster(跟进具体项目的临时负责人,项目结束打包离职)

1负责数据切分

2负责为应用程序申请资源

3任务的监控和容错

 

Container容器(物资)

是资源的抽象 封装了多维度资源(内存,cpu,磁盘,网络等) NodeManager使用

 

 

MapReduce架构

MapReduce将计算分为两阶段 Map Reduce

 

 

大数据生态体系

 

 

 

 

大数据分析过程

 

 

最终用户画像 产品聚类

Zookeeper在整个过程中充当润滑剂

 

 

 

集群搭建:正常六台机器

NN一台   DN+NM共三台  2NN一台  RM一台

HDFS Hadoop Distributed File System

适合一次写入 多次读出 且不支持文件修改

优点:

高容错性:多副本机制

适合处理大量数据

可构建在廉价机器上

 

缺点:
不适合低延迟数据访问

不适合存储大量小文件:因为NameNode空间是有限的。小文件寻址时间远超过读写时间

不支持并发写入,文件随便修改

 

HDFS架构

NameNode

 

DataNode

 

Client

将文件切分成一个个的block然后上传

 

Secondary NameNode

辅助分担NameNode

 

HDFS文件分块Block: 默认128M

寻址时间/读取时间 规范 1/100

设置的文件块太小-导致寻址时间过长

设置文件快太大-文件处理会很慢

 

 

HDFS上传过程

 

 

 

(1) 建立一个客户端Client,输入流读取本地文件,输出流上传文件

(2) NameNode发送申请上传,经过审核(上传路径是否正确,是否有权限)得到响应是否可上传

(3) 将本地文件逻辑切分,128M分一块

(4) 请求上传第一个Block块,返回n个节点数的DataNodeList(nDataNode副本数量),选出离客户端最近的DataNode作第一个,该DataNode再选出其他的DataNode

(5) 按顺序发送DataNode请求建立通道,请求建立通道,请求建立通道

(6) 按顺序返回应答成功,应答成功,应答成功

(7) 按顺序传输packet,传输packet,传输packet

(8) 传完第一个块 再重新找DataNode重复(5)-(7)步骤

(9) NameNode更新元数据

 

传输packet过程中不是完全串行的,客户端发给DN1DN1还没落入磁盘就继续发送packetDN2,然后继续发给DN3. DN3开始逐个返回成功,最后返给客户端成功

 

如果中途请求建立通道或相应应答失败了,则文件传输失败

如果第一个DataNode的传输packet失败了,那么文件传输失败。

如果后边DataNode的传输packet失败了,前边的DataNode会再找新DataNode补齐

 

HDFS下载过程

 

 

 

也是一个块一个块的读

当一个DataNode能满足提供一个块 其他DataNode副本就不会再给了

 

 

NameNode

元数据内存持久化  

Fsimage 类似于RedisRDB 记录了某一刻内存的 负责将磁盘恢复到内存    

edits.log 类似于RedisAOF 记录的每一步的操作 负责NameNode内存持久化到磁盘

NameNode服务器启动 先加载Fsimage 再加载edit.loB

存入新数据 存入edits.log 再由2NN合并入Fsimage

2NN作为秘书 把edits.log整合到Fsimage

询问NameNode 是否需要CheckPoint,

触发条件:

(1) 定时时间到

(2) Edits的数据满了

 

整合步骤:

(1) NN同意整合CheckPoint,然后将editsFsimage发给2NN

(2) 2NN根据edits保存的指令,整理出新的Fsimage发回NN

(3) NN创建新的edits存指令,旧的edits不会删,旧的Fsimage会删

 

 

DataNode存储

存储块的数据  存储块的元数据(数据长度,校验和,时间戳)

 

(1) DN启动后向NameNode注册

(2) 注册成功后,以后每周期(一小时)上报所有块信息

(3) 3秒一次心跳,心跳返回结果带有NameNode返给DataNodeNN超过十分钟没有接到心跳则认为DN挂了。

 

DataNode扩展集群

退役旧DataNode节点

添加白名单  用来保证集群安全性  白名单外一律不允许连接NameNode

黑名单退役  用来退役  放入黑名单安乐死 还有心跳但是没他事了

 

 

 

 

 

 

MapReduce 分布式运算程序的框架

优点:简单

简单,易编程

良好扩展性,加机器扩展运算能力

高容错性,一个机器挂了 放别的机器算,只要不是所有机器全挂了就不会失败

海量数据离线处理

缺点:
不擅长实时计算

不擅长流式计算  MapReduce输入的数据是静态的 文件块  不支持动态流式计算

不擅长有向图计算 后一个输入是前一个输出的有向图计算,由于MapReduce的计算结果都要落入磁盘,导致有向图计算会产生大量IO效率特别低

 

 

Map阶段

将数据映射为想要的KEY-V形式  <word,1>

 

Reduce阶段

再将数据进行合并处理  <word,n>

 

MrAppMaster

MapTask

ReduceTask

 

 

 

 

 

 

代码三部分:

WcMapper

WcReducer

WcDriver

 

 未完待更新 !

 

 

 

 

 

Hadoop常用命令:

 

全开启

start-all.sh等价于start-dfs.sh + start-yarn.sh

 

hadoop fs -ls /        hadoop下查看所有目录

hadoop fs -mkdir /aaa   hadoop下创建目录

 

 

查看指定目录内容

hdfs dfs –ls [文件目录]

 

打开某个已存在文件

hdfs dfs -cat [path]

 

本地文件存入hadoop

hdfs dfs -put [hadoop目录] [本地地址]

 

hadoop文件down到本地已有目录

hadoop dfs -get [hadoop目录] [本地目录]

 

删除hadoop上指定文件

hdfs dfs -rm [文件地址]

 

hadoop上创建新目录

hdfs dfs -mkdir [目录名]

 

posted @ 2020-07-23 15:53  六小扛把子  阅读(185)  评论(0编辑  收藏  举报