Hadoop HA

来源:互联网 发布:c语言用什么软件编写好 编辑:程序博客网 时间:2024/05/22 13:42

namenode

SPOF : single point of failure.可靠性问题。

secondary nn

fail over,容灾。

去OIE

oracleibmemc         //

HA

high availability.,高可用性。2NN持续提供服务的能力。   99.999%

NFS

network filesystem .

QJM

Quorum Journal Manager .背景:运行2个名称节点,分别是active(活跃)/standby(待命),快速容灾。

HA架构

两个节点,任意时刻,只有一个处理active状态。所有的client操纵都和active nn交互,standby节点维护足够多的active的状态以备快速容灾。为了standby节点和active节点保持同步,两者都能访问共享存储目录。active节点做的修改会立即保存到共享存储目录log中,standby一直观察共享存储目录更新自己的空间。容灾时,standby节点切换到active态之前,从共享存储目录读取所有的edit。确保状态和之前是一致的。datanode需要配置两个nn,同时向两者报告信息(块位置信息和心跳信息)。为防止脑裂(两个nn都是active态),需要为共享存储配置一个保护方法。容灾时,如果无法验证之前的active nn是否放弃了active状态,保护过程切断对共享存储的访问,防止对namespace的修改,允许新节点进行安全容灾。

硬件资源

1.两个NN    两个节点的主机配置相同。2.共享存储    两个NN之间需要有共享目录,都可进行读写操作。3.JournalNode machines     运行JournalNodes节点的主机,该进程是轻量级。收集hadoop其他进程信息,比如RM、NN或jobtracker。    注意至少配置3个该节点主机。容灾策略是允许(n - 1 / 2).在ha模式下,standby节点执行namespace的检查点操作。没必要运行2nn。

deploy

[配置概览]需要使用nameservice指定配置逻辑名,该名称下添加具体的namenode的信息。[准备]s104生成公私秘钥,追加公钥到所有主机的认证库中。[配置细节]1.hdfs-site.xml
<property>            <name>dfs.nameservices</name>            <value>mycluster</value>        </property>        <property>            <name>dfs.ha.namenodes.mycluster</name>            <value>nn1,nn2</value>        </property>        <property>            <name>dfs.namenode.rpc-address.mycluster.nn1</name>            <value>s100:8020</value>        </property>        <property>            <name>dfs.namenode.rpc-address.mycluster.nn2</name>            <value>s104:8020</value>        </property>        <property>            <name>dfs.namenode.http-address.mycluster.nn1</name>            <value>s100:50070</value>        </property>        <property>            <name>dfs.namenode.http-address.mycluster.nn2</name>            <value>s104:50070</value>        </property>        <property>            <name>dfs.namenode.shared.edits.dir</name>            <value>qjournal://s101:8485;s102:8485;s103:8485/mycluster</value>        </property>        <property>            <name>dfs.client.failover.proxy.provider.mycluster</name>            <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>        </property>        <property>            <name>dfs.ha.fencing.methods</name>            <value>                sshfence                shell(/bin/true)            </value>        </property>        <property>            <name>dfs.ha.fencing.ssh.private-key-files</name>            <value>/home/centos/.ssh/id_rsa</value>        </property>        <property>            <name>dfs.journalnode.edits.dir</name>            <value>/home/centos/hadoop/full/dfs/journal</value>        </property>
    [core-site.xml]        <property>            <name>fs.defaultFS</name>            <value>hdfs://mycluster</value>        </property>

[部署细节]
1.在JN节点启动JN进程。
s101 ~ s103
$>hadoop-daemon.sh start journalnode

2.两个NN上进行disk元数据的同步    2.1)如果全新搭建hdfs集群,需要在其中的一个nn上执行format命令    2.2)如果是从非HA转换成HA模式,需要将原NN的元数据复制到新NN的本地目录。        [s100]        $>scp -r ~/hadoop/full centos@s104:/homec/centos/hadoop/        在104主机上执行以下命令,该命令确保JN节点有足够多的edits文件。        hdfs namenode -bootstrapStandby        s104,转换非HA到ha,执行初始化edit命令。        hdfs namenode -initializeSharedEdits    2.3)启动两个nn        启动104    2.4)查看webui,状态。

管理命令

$>hadoop archive -archiveName my.har -p /user/centos /user/out
使用har:///方式查看归档文件内容
hdfs dfs -ls har:///user/out/my.har
hdfs dfs -cat har:///user/out/my.har/hello.txt

处理大量小文件

1.使用CombineInputFormat2.使用hadoop的归档    2.1)需要启用YARN        start-yarn.sh    2.2)运行归档命令        hadoop archive -archiveName my.har -p /user/centos/data /user/centos    2.3)查看归档文件        //查看列表        hdfs dfs -ls har:///user/out/my.har        //查看指定文件        hdfs dfs -cat har:///user/out/my.har/1.txt3.使用sequenceFile    将大量小文件写入到sequencefile中,可切割。MR

如果JN出现缝隙之后

1.停止集群2.删除JN节点的本地数据    [s100]    $>xcall.sh "rm -rf /home/centos/hadoop/full/dfs/journal"3.启动JN进程    s101 ~ s103    $>hadoop-daemon.sh start journalnode4.初始化日志,在nn中的一个节点上执行即可。本质上是拷贝过程。    $>hdfs namenode -initializeSharedEdits5.分别启动进程
        [namenode s100]        $>hadoop-daemon.sh start namenode        [namenode s104]        $>hadoop-daemon.sh start namenode        [datanode]        $>hadoop-daemons.sh start datanode

HA管理命令

        //切换状态        hdfs haadmin -transitionToActive nn1        hdfs haadmin -transitionToStandby nn1        //容灾演练        hdfs haadmin -failover --forceactive nn1 nn2        //脑裂        hdfs haadmin -transitionToActive nn1        //查看nn状态        hdfs haadmin -getServiceState nn1
原创粉丝点击