• 集群管理 secondaryNameNode和NameNode(转)


    为了达到以下负责均衡,需要调整以下

    改变负载

    三台机器,改变负载

    host2(NameNode、DataNode、TaskTracker)

    host6(SecondaryNameNode、DataNode、TaskTracker)

    host8(JobTracker 、DataNode、TaskTracker)

    指定SecondaryNameNode为host6:

    vi conf/masters指定host6

    scp conf/masters host6:/home/hadoop/hadoop-1.1.2/conf/masters

    scp conf/masters host8:/home/hadoop/hadoop-1.1.2/conf/masters

    vi conf/hdfs-site.xml
    <property>
    <name>dfs.http.address</name>
    <value>host2:50070</value>
    </property>

    <property>

    <name>dfs.secondary.http.address</name>

    <value>host6:50090</value>

    </property>


    scp conf/hdfs-site.xml host6:/home/hadoop/hadoop-1.1.2/conf/hdfs-site.xml

    scp conf/hdfs-site.xml host8:/home/hadoop/hadoop-1.1.2/conf/hdfs-site.xml

    指定JobTracker为host8:
    vi conf/mapred-site.xml
    <property>

    <name>mapred.job.tracker</name>

    <value>host8:9001</value>

    </property>
    scp conf/mapred-site.xml host6:/home/hadoop/hadoop-1.1.2/conf/mapred-site.xml

    scp conf/mapred-site.xml host8:/home/hadoop/hadoop-1.1.2/conf/mapred-site.xml

    vi conf/core-site.xml
    <property>

    <name>fs.checkpoint.dir</name>

    <value>/home/hadoop/dfs/filesystem/namesecondary</value>

    </property>

    scp conf/core-site.xml host6:/home/hadoop/hadoop-1.1.2/conf/core-site.xml

    scp conf/core-site.xml host8:/home/hadoop/hadoop-1.1.2/conf/core-site.xml

    配置host8:

    host8上的脚本start-mapred.sh会启动host2和host6上面的TaskTracker,所以需要对host8执行:

    ssh-keygen -t rsa(密码为空,路径默认)

    ssh-copy-id -i .ssh/id_rsa.pub hadoop@host2

    ssh-copy-id -i .ssh/id_rsa.pub hadoop@host6

    ssh-copy-id -i .ssh/id_rsa.pub hadoop@host8

    可以在host8上面通过ssh无密码登陆host2和host6

    ssh host2

    ssh host6

    ssh host8

    在/home/hadoop/.bashrc 中追加:

    export PATH=/home/hadoop/hadoop-1.1.2/bin:$PATH

    host2: 执行start-dfs.sh

    host8: 执行start-mapred.sh


    2、SecondaryNameNode

    ssh host6

    停止secondarynamenode

    hadoop-1.1.2/bin/hadoop-daemon.sh stop secondarynamenode

    强制合并fsimage和eidts

    hadoop-1.1.2/bin/hadoop secondarynamenode -checkpoint force

    启动secondarynamenode

    hadoop-1.1.2/bin/hadoop-daemon.sh start secondarynamenode

    3、 启用回收站
    [hadoop@host2 ~]$ vi hadoop-1.1.2/conf/core-site.xml
    <property>

    <name>fs.trash.interval</name>

    <value>10080</value>

    </property>

    至于为什么要将SNN进程运行在一台非NameNode的 机器上,这主要出于两点考虑:

    1. 可扩展性: 创建一个新的HDFS的snapshot需要将namenode中load到内存的metadata信息全部拷贝一遍,这样的操作需要的内存就需要 和namenode占用的内存一样,由于分配给namenode进程的内存其实是对HDFS文件系统的限制,如果分布式文件系统非常的大,那么 namenode那台机器的内存就可能会被namenode进程全部占据。
    2. 容错性: 当snn创建一个checkpoint的时候,它会将checkpoint拷贝成metadata的几个拷贝。将这个操作运行到另外一台机器,还可以提供分布式文件系统的容错性。

    配置将SecondaryNameNode运行在另外一台机器上

    HDFS的一次运行实例是通过在namenode机器上的$HADOOP_HOME/bin/start-dfs.sh( 或者start-all.sh ) 脚本来启动的。这个脚本会在运行该脚本的机器上启动 namenode进程,而slaves机器上都会启动DataNode进程,slave机器的列表保存在 conf/slaves文件中,一行一台机器。并且会在另外一台机器上启动一个snn进程,这台机器由 conf/masters文件指定。所以,这里需要严格注意,conf/masters 文件中指定的机器,并不是说jobtracker或者namenode进程要 运行在这台机器上,因为这些进程是运行在 launch bin/start-dfs.sh或者 bin/start-mapred.sh(start-all.sh)的机器上的。所以,masters这个文件名是非常的令人混淆的,应该叫做 secondaries会比较合适。然后,通过以下步骤:

    1. 将所有想要运行secondarynamenode进程的机器写到masters文件中,一行一台。
    2. 修改在masters文件中配置了的机器上的conf/hadoop-site.xml文件,加上如下选项:
    1. <property>
    2. <name>dfs.http.address</name>
    3. <value>namenode.hadoop-host.com:50070</value>
    4. </property>

    core-site.xml:这里有2个参数可配置,但一般来说我们不做修改。fs.checkpoint.period表示多长时间记录一次hdfs的镜像。默认是1小时。fs.checkpoint.size表示一次记录多大的size,默认64M。

    1. <property>
    2. <name>fs.checkpoint.period</name>
    3. <value>3600</value>
    4. <description>The number of seconds between two periodic checkpoints.
    5. </description>
    6. </property>
    7. <property>
    8. <name>fs.checkpoint.size</name>
    9. <value>67108864</value>
    10. <description>The size of the current edit log (in bytes) that triggers
    11. a periodic checkpoint even if the fs.checkpoint.period hasn't expired.
    12. </description>
    13. </property>
    14. <property>
    15. <name>fs.checkpoint.dir</value>
    16. <value>yourdir</value>
    17. </property>

    3、配置检查。配置完成之后,我们需要检查一下是否成功。我们可以通过查看运行secondarynamenode的机器上文件目录来确定是否成功 配置。首先输入jps查看是否存在secondarynamenode进程。如果存在,在查看对应的目录下是否有备份记录。如下图:

    该目录一般存在于hadoop.tmp.dir/dfs/namesecondary/下面。

    四、恢复

    1、配置完成了,如何恢复。首先我们kill掉namenode进程,然后将hadoop.tmp.dir目录下的数据删除掉。制造master挂掉情况。

    2、在配置参数dfs.name.dir指定的位置建立一个空文件夹; 把检查点目录的位置赋值给配置参数fs.checkpoint.dir;

     将namesecondary中的文件复制到fs.checkpoint.dir;

    ./hadoop namenode -importCheckpoint;

    启动NameNode,并加上-importCheckpoint。(这句话抄袭的是hadoop-0.20.2/hadoop-0.20.2/docs/cn/hdfs_user_guide.html#Secondary+NameNode,看看文档,有说明)

    3、启动namenode的时候采用hadoop namenode –importCheckpoint

    五、总结

    1、secondarynamenode可以配置多个,master文件里面多写几个就可以。

    2、千万记得如果要恢复数据是需要手动拷贝到namenode机器上的。不是自动的(参看上面写的恢复操作)。

    3、镜像备份的周期时间是可以修改的,如果不想一个小时备份一次,可以改的时间短点。core-site.xml中的fs.checkpoint.period值

  • 相关阅读:
    JAVA导出EXCEL表格
    解决springboot配置@ControllerAdvice不能捕获 NoHandlerFoundException问题
    Mysql 查看定时器 打开定时器 设置定时器时间
    IDEA @Autowired 出现红色下划线 报红
    IntelliJ IDEA报warn class is never used
    UML类图符号 各种关系说明以及举例
    提升单元测试体验的利器--Mockito使用总结
    maven2中snapshot快照库和release发布库的应用
    Maven最佳实践-distributionManagement
    访问GitLab的PostgreSQL数据库
  • 原文地址:https://www.cnblogs.com/nucdy/p/5667802.html
Copyright © 2020-2023  润新知