赞
踩
负责响应客户端的请求,负责管理整个文件系统的元数据HDFS 的读、写操作都必须向 NameNode 申请,元数据非常关键负责维持文件副本的数据
是为了帮助 NameNode 合并编辑日志,减少 NameNode 启动时间。另外NamNode 的元数据丢失可以通过 SecondNameNode 恢复。
负责存放被切割后的文件块,文件在 DataNode 中存储单位是块 (Block)如果集群是完全分布式的,那么一个文件的每一块都必须有多个副本,存放在不同的DataNode 上DataNode 通过心跳信息定期向 NameNode 汇报自身保存的文件块信息。
完全分布式模式和伪分布式模式下 HDFS 集群包括两种类型的节点,即 NameNode 和DataNode ,其中 DataNode 有多个,并且相互之间会做数据的冗余和备份,所以某个 DataNode宕机不会对整个集群的使用造成影响。而 NameNode 在集群中是单一节点,一旦 NameNode 出现问题,比如宕机,将使得整个集群不可访问,这样就会导致整个 HDFS 集群不能做到高可用
为了解决高可用的问题,在 Hadoop2.0 版本上引入了高可用架构的搭建。高可用架构集群相对比较复杂,除 NameNode 和 DataNode 外,还有 ZooKeeper 集群、 Quorum Journal Manager 和 DFSZKFailover Controller。
- NameNode配置两个,节点在node00和node01上配置
- ZKFC监控NameNode,一个NameNode对应一个ZKFC,配置在相同机器上
- 共享存储三台机器都要配置
- ZK和DN仍然配置在三台机器上
停掉Hadoop集群,在node01上执行stop-dfs命令把hadoop集群停止
- stop-yarn.sh
- stop-dfs.sh
cd /opt/apache-zookeeper-3.6.2-bin/bin/
./zkServer.sh stop
- cd/opt/software/hadoop/hdfs/
- mkdir journalnode
- cd journalnode/
- mkdir data
- cd /opt/software/hadoop/hdfs/name/
- rm -rf *
- 注意:rm -rf 在工作的时候别用别用别用
yum install psmisc
psmisc是一个Linux系统工具包,包含了一些管理进程的命令,比如killall、fuser和pstree等。
其中,killall命令可以通过进程名杀死所有同名进程;fuser命令可以查找使用指定文件的进程;pstree命令可以以树状图的形式展示进程之间的关系。
除此之外,psmisc还提供了其他一些有用的命令,比如killall5、fusermount和peekfd等,可以帮助用户更方便地管理和调试进程。
3.2 整体配置工作
3.3 core-site.xml
- <!-- 默认的文件系统HDFS,NameNode主机通讯地址,配置集群标识定义在hdfs-site.xml里面 -->
- <property>
- <name>fs.defaultFS</name>
- <value>hdfs://mycluster</value>
- </property>
- <!-- hadoop临时文件存放路径 -->
- <property>
- <name>hadoop.tmp.dir</name>
- <value>/usr/local/hadoop/hadoop-2.9.2/tmp</value>
- </property>
- <!-- 网页方式进入管理页面,页面显示此用户相关数据 -->
- <property>
- <name>hadoop.http.staticuser.user</name>
- <value>root</value>
- </property>
- <!-- 高可用集群指定的zk服务器信息 -->
- <property>
- <name>ha.zookeeper.quorum</name>
- <value>node00:2181,node01:2181,node02:2181</value>
- </property>
- <!-- 高可用架构下集群使用NameNode,配置集群标识, mycluster -->
- <property>
- <name>dfs.nameservices</name>
- <value>mycluster</value>
- </property>
- <!-- NameNode节点标识 -->
- <property>
- <name>dfs.ha.namenodes.mycluster</name>
- <value>nn1,nn2</value>
- </property>
- <!-- NameNode1的rpc通讯端口号 -->
- <property>
- <name>dfs.namenode.rpc-address.mycluster.nn1</name>
- <value>node00:8020</value>
- </property>
- <!-- NameNode2的rpc通讯端口号 -->
- <property>
- <name>dfs.namenode.rpc-address.mycluster.nn2</name>
- <value>node01:8020</value>
- </property>
- <!-- NameNode1的http通讯端口号 -->
- <property>
- <name>dfs.namenode.http-address.mycluster.nn1</name>
- <value>node00:50070</value>
- </property>
- <!-- NameNode2的http通讯端口号 -->
- <property>
- <name>dfs.namenode.http-address.mycluster.nn2</name>
- <value>node01:50070</value>
- </property>
- <!-- 配置共享存储 JN -->
- <property>
- <name>dfs.namenode.shared.edits.dir</name>
- <value>qjournal://node00:8485;node01:8485;node02:8485/mycluster</value>
- </property>
- <!-- 配置失败转移执行类 -->
- <property>
- <name>dfs.client.failover.proxy.provider.mycluster</name>
- <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
- </value>
- </property>
- <!-- 当进行切换时,通过何种机制杀死原先 active 的 namenode -->
- <property>
- <name>dfs.ha.fencing.methods</name>
- <value>sshfence</value>
- </property>
- <!-- SSH 私钥,上面杀掉原先进程使用sshfence方式需使用私钥 -->
- <property>
- <name>dfs.ha.fencing.ssh.private-key-files</name>
- <value>/root/.ssh/id_rsa</value>
- </property>
- <!-- JN 存放元数据的目录 -->
- <property>
- <name>dfs.journalnode.edits.dir</name>
- <value>/opt/software/hadoop/hdfs/journalnode/data</value>
- </property>
- <!-- 当NameNode宕机,切换方式设置为自动 -->
- <property>
- <name>dfs.ha.automatic-failover.enabled</name>
- <value>true</value>
- </property>
如果上面的步骤你只是在一台虚拟机上配置,可以看下面的第四章同步到node01,node02
- 在node01和node02上分别执行删除hadoop目录操作
- cd /opt/software/
- rm -rf hadoop
scp -r hadoop node01:$PWD
scp -r hadoop node02:$PWD
zKserver.sh start
hadoop-daemon.sh start journalnode
hdfs namenode -format
cd /opt/software/hadoop/hdfs/name/scp -r current/ root@node02: $PWD
hdfs zkfc -formatZK
start-dfs.sh
node00 和 node01 上进程都是 5 个。没有 SNN ,多了 JournalNode 、DFSZKFailoverController 、 QuorumPeerMain 。node02 上比原来多了 JournalNode 、 QuorumPeerMain
6.2 管理台查看
打开 Web 管理页面,可查看两个 NameNode 节点和 3 个 datanode 节点的状态,看看它们是否可以正常工作。其中有一个节点是 active 状态,一个节点是 standby 状态。
jps #查看namenode进程的pid,假设为xxxx
kill -9 xxxx #杀掉namenode进程
http://node00:50070/ 地址已经不能访问此时 http://node02:50070/ 上 namenode 由原本的 standby 状态变为 active 状态
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。