hadoop之HDFS及yarn(一)

hdfs

hdfs三台服务器节点配置:

hadoop之HDFS及yarn(一)

各节点说明:

  • namenode :HDFS的守护进程,负责维护整个文件系统,存储着整个文件系统的元数据信息,有image+edit log ,namenode不会持久化存储这些数据,而是在启动时重建这些数据。

  • datanode:是具体文件系统的工作节点,当我们需要某个数据,namenode告诉我们去哪里找,就直接和那个DataNode对应的服务器的后台进程进行通信,由DataNode进行数据的检索,然后进行具体的读/写操作

  • secondarynamenode :一个冗余的守护进程,相当于一个namenode的元数据的备份机制,定期的更新,和namenode进行通信,将namenode上的image和edits进行合并,可以作为namenode的备份使用

如果namenode是高可用,那么就没有secondaryNamenode了,多了journalnode,并且journalnode最好是奇数个
journalNode:同步元数据信息,保证两个namenode里面的元数据是一模一样的,不然就会出现脑裂
zkfc:zkFailoverController 守护进程,与我们的namenode启动在同一台机器,监听namenode的健康状况

  • 元数据信息:描述数据的数据 文件的名称,文件的位置,文件的大小,创建时间,修改时间,权限控制
  • datanode数据存储:出磁盘,用于存储我们的文件数据
  • 一次写入,多次读取:hdfs文件系统,适用于频繁读取的情况,不适用与频繁写入的情况 改变文件,涉及到元数据的改变

hdfs文件的读取过程:

  1. 客户端请求namenode读取数据
  2. namenode校验权限,文件是否存在等等
  3. namenode返回给客户端一个block块的列表
  4. 客户端读取block块
  5. 客户端拼接block块

hadoop之HDFS及yarn(一)

hdfs的文件的写入过程

  1. 客户端请求namenode上传数据
  2. namneode校验有没有权限,数据是否存在
  3. 客户端请求namenode第一个block块的位置
  4. 客户单与对应的datanode进行通信,建立pipeline管道 ,发送数据包 64KB ,反向的datanode需要校验block块是否上传成功

hadoop之HDFS及yarn(一)

snn如何 合并fsimag与edits

  1. 通知namenode切换edits文件
  2. 通过http的方式获取fsimage与edits文件
  3. 将fsimage与edits文件加载到内存当中合并 snn需要大内存
  4. 将最新的fsimage发还给namenode,替换掉旧的fsimage

hadoop之HDFS及yarn(一)

YARN

yarn三台服务器节点配置:

hadoop之HDFS及yarn(一)

各节点说明:

  • resourcemanager:是yarn平台的守护进程,负责所有资源的分配与调度,client的请求由此负责,监控nodemanager
  • nodemanager :是单个节点的资源管理,执行来自resourcemanager的具体任务和命令

hadoop 的六个配置文件的作用

  • core-site.xml:核心配置文件,主要定义了我们的集群是分布式,还是本机运行
  • hdfs-site.xml: 分布式文件系统的核心配置 决定了我们数据存放在哪个路径,数据的副本,数据的block块大小等等
  • hadoop-env.sh 配置我们jdk的home路径
  • mapred-site.xml 定义了我们关于mapreduce运行的一些参数
  • yarn-site.xml 定义我们的yarn集群
  • slaves 定义了我们的从节点是哪些机器 datanode nodemanager运行在哪些机器上
  • hadoop 的格式化:只在集群初次启动的时候执行一次

namenode与resourceManager的高可用

  • hadoop 2.0版本引入namenode高可用机制
  • resourcemanager 2.4.0版本引用高可用机制

hdfs的安全模式:

  • 在我们集群刚刚启动的时候,集群是出于安全模式的,对外不提供任何服务,专门干一件事情,集群的自检
  • 如果集群自检没有什么问题,那么过三十秒钟,自动脱离安全模式,可以对外提供服务

hadoop的基准测试:

  • 集群启动成功之后,第一件事就是做基准测试,说白了就是压测,测试我们的网络带宽,测试我们的文件读取和写入速度等等
  • 真实的服务器性能,写入速度大概在20-30M每秒的样子:

真实服务读取速度测试:50-100M左右的样子
实际线上环境该如何压测: 写入10G 100G文件 500G文件 1T文件