hadoop

分布式系统基础架构

Posted by 果然 on December 30, 2021

Hadoop充分利用集群的威力进行高速运算和存储。hadoop框架最核心的设计就是: HDFS 和 MapReduce。
hdfs 为海量数据提供了存储;
MapReduce 为海量的数据提供了计算。

hadoop 具有以下几个优点:
高可靠性
高扩展性
高效性
高容错性
低成本

hadoop 的安装有三种运行模式:
单机模式(Local(Standalone)Mode) hadoop的默认模式,0配置。hadoop运行在一个 java 进程中,使用本地文件系统,不使用 HDFS,一般用于开发调试 MapReduce 程序的应用逻辑。
伪分布式模式(Pseudo-Distributed Mode) 需简单配置,相当于只有一个节点的集群,hadoop的所有守护进程运行在同一台机器上。该模式在单机模式之上增加了代码调试功能,允许你检查内存使用情况,HDFS输入输出,以及其他的守护进程交互。
完全分布式模式(Fully-Distributed Mode) 根据需要进行配置,多节点,一般用于生产环境,可认为是由伪分布式模式的一个节点变为多个节点。

namenode的fsimage与editlog详解

namenode 主要维护两个文件,一个是 fsimage,一个是editlog。
fsimage 保存了最新的元数据检查点,包含了整个 HDFS 文件系统的所有目录和文件信息。对于文件来说包含了数据块扫描信息、修改时间、访问时间等;对于目录来说包含修改时间、访问权限控制信息(目录所在用户,所在组)等。

editlog 主要是在NameNode 已经启动情况下对 HDFS 进行的各种更新操作进行记录,HDFS客户端执行所有的写操作都会被记录到 editlog 中。

hdfs

fsimage 就是在某一时刻,整个 hdfs 的快照;然后客户端对hdfs所有的更新操作都会记录在 editlog 中。

为了避免 editlog 不断增大,secondary namenode会周期性合并 fsimage 和 edits 成新的 fsimage,新的操作记录会写入新的 editlog,这个周期可以自己设置(editlog 到达一定大小或者定时)。

hadoop 高可用集群

由于一个 HDFS 集群由一个 NameNode 节点和多个 DataNode 节点组成,一旦 NameNode 节点宕机,那么 HDFS 将不能进行文件的上传与下载。
由于一个 Yarn 集群由一个 ResourceManager 节点和多个 NodeManager 节点组成,一旦 ResourceManager 节点宕机,那么 Yarn集群将不能进行资源的调度。

HDFS 的高可用集群

hdfs ha

依赖 zk 实现 hdfs 的高可用,由状态为 active的nn 节点对外提供服务,而状态为 standby 的nn节点则负责数据的同步。
图中,hadoop 提供 NameService 进程,其是 nn 的代理。

NameService 进行状态转移

Active NameNode和Standby NameNode间通过NFS或JN(JournalNode,QJM方式)来同步数据。
JournalNode 数量为奇数,可以是3,5,7…,2n+1来共享数据。Active NameNode把最近的edits文件写到2n+1个JournalNode上,只要有n+1个写入成功就认为这次写入操作成功了,然后Standby NameNode就可以从JournalNode上读取了。可以看到,QJM方式有容错机制,可以容忍n个JournalNode的失败。

JM

分别提供了FailoverControllerActive 和 FailoverControllerStandby 进程来监控 nn 的声明周期,定期向 zk 发送心跳,若在一定时间内 zk 没有收到 FailoverControllerActive 发送的心跳,则认为此时状态为 Active 的 nn 无法对外提供服务,则将状态为 standby 的 nn 切换为Active 状态。

nn 数据同步

hadoop 提供的 JournalNode 用于存放 nn 中的编辑日志,当 active 的nn节点执行任何名称空间上的修改时,均将修改保存到 JN 集群中,而 standby 的 nn 节点会实时的从 JN集群中进行同步。

YARN 高可用集群

yarn ha

Hadoop依赖Zookeeper实现YARN集群的高可用,首先启动两个ResourceManager,且由状态为Active的ResourceManager节点对外提供服务,而状态为StandBy的ResourceManager节点则负责数据的同步,一旦状态为Active的ResourceManager节点宕机,则状态为StandBy的ResourceManager节点将会切换为Active状态,对外提供服务。

ResourceManager Restart 使用的启动方法(实现类):

#保存在ZK当中
org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore
​
#保存在HDFS中
org.apache.hadoop.yarn.server.resourcemanager.recovery.FileSystemRMStateStore
​
#保存在本地
org.apache.hadoop.yarn.server.resourcemanager.recovery.LeveldbRMStateStore

SecondaryNameNode和HA区别

Secondary NameNode是为了解决 namenode的一些问题,职责是合并namenode 的 edit logs 至 fsimage 文件中。
工作过程:
-1. 首先,定时到 nn 去获取 edit logs,并更新到 fsimage上。
-2. 一旦它有了新的 fsimage文件,将其拷贝回 nn 中。
-3. nn 在下次重启时会使用这个新的 fsimage 文件,从而减少重启的时间。

它的整个目的是在 HDFS 中提供一个检查点,只是 nn 的一个助手节点,帮助 nn 更好的工作,这也是它在社区内被认为是检查节点的原因。不可取代nn也不是nn的备份。

HA 见以上解释。

ssh(远程登录)

ssh 特点: 在传输数据的时候,对文件加密后传输
ssh 作用: 为远程登录会话和其他网络服务提供安全性协议

ssh 是安全的加密协议,用于远程连接服务器。首先,需要确认已经安装了 SSH Client/SSH Server。

rpm -qa| grep ssh
sudo yum install openssh-clients
sudo yum install openssh-server

# 利用 ssh-keygen 生成秘钥  
cd ~/.ssh/
ssh-keygen -t rsa
cat id_rsa.pub >> authorized_keys
chmod 600 ./authorized_keys  # 设置拥有者可读写,其他人不可读写执行

# 参数说明
-t 加密算法类型,这里使用 rsa 算法
-P 指定私钥的密码,不需要可以不指定
-f 指定生成秘钥对保持的位置    

相关小结

-1. SSH远程登录和SSH免密码登录
-2. Linux权限详解
-3. centos 添加用户并赋予管理员权限
-4. 首次安装 hadoop,web端查看 HDFS 打不开,这里,将防火墙关闭解决。

systemctl status firewalld
systemctl stop firewalld

-5. YARN 主要是为集群提供更好的资源管理与任务调度,然而在单机上体现不出价值,反而会使程序跑得稍慢些。因此在单机上是否开启 YARN 就看实际情况了。就 mapred-site.xml 重命名为 mapred-site.xml.template,否则出错(Retrying connect to server: 0.0.0.0/0.0.0.0:8032” 的错误)。
访问 hdfs 的 web 端,端口号:50070

hdfs

当开启 yarn,可在 web 界面查看任务的运行情况,端口号 8088

yarn