学习日志—hdfs配置及原理+yarn的配置

筛选算法:

关注度权重公式:

W = TF * Log(N/DF)

TF:当前关键字在该条记录中出现的总次数;

N:总的记录数;

DF:当前关键字在所有记录中出现的条数;

HDFS的  namenode HA和namenode Federation

(1)解决单点故障:

    使用HDFS HA :通过主备namenode解决;如果主发生故障,则切换到备上。

(2)解决内存受限:

    使用HDFS Federation,水平扩展,支持多个namenode,相互独立。共享所有datanode。

    下面详细说明:

    namenode HA:namenode对元数据的修改都会经过journalnode,在QJM的集群上备份一个,因此QJM上元数据和namenode上元数据是一样的(namenode的元数据就是QJM上的元数据镜像),在namenode挂掉后,standby的namenode会找QJM集群上的元数据,继续工作。如果使用namenode Federation,则每个namenode的共享数据都会在journalnode的集群上。相当于每个namenode上都存了一个对journalnode集群的镜像,namenode的读写,都是在jn集群上修改和寻找的。

学习日志---hdfs配置及原理+yarn的配置

    客户端一开始请求hdfs时,先访问zookeeper,去检查哪些namenode挂掉了,哪些活着,去决定访问哪个namenode。任何一个namenode都会对应一个FailoverController,也就是ZKFC竞争锁。在一个namenode挂掉后,有竞争锁来选择用哪一个namenode,这里使用的是投票机制,因此zookeeper要使用奇数的。

    namenode Federation:是在一个集群中有若干个独立的namenode,相当于多个独立的集群,但是共用datanode。客户端访问这些namenode时,要选择使用哪个namenode才可以访问和使用。

    在Federation上加HA,是对每一个namenode都加HA,互相独立。

学习日志---hdfs配置及原理+yarn的配置

YARN:

    YARN是资源管理系统,管理HDFS的数据,知晓数据的所有情况;计算框架向yarn去申请资源去计算,可以做到资源不浪费,可以并发的运行计算框架;兼容其他第三方的并行计算框架;

    在资源管理方面:

    ResourceManager:负责整个集群的资源管理和调度

    ApplicationMaster:负责应用程序相关的事务,比如任务调度、任务监控和容错等。其在每个节点上工作时有nodeManager,这里面就有ApplicationMaster。

学习日志---hdfs配置及原理+yarn的配置

nodeManager最好是在datanode的机器上,因为方便计算;

以namenode HA的方式来配置启动hadoop集群

配置hdfs-site.xml及其说明:

这里都是对hdfs的配置进行操作,如哪些node上有哪些特定的操作。

<configuration>

    
    <property>
        <name>dfs.name.dir</name>
        <value>/root/data/namenode</value>
    </property>

    <property>
        <name>dfs.data.dir</name>
        <value>/root/data/datanode</value>
    </property>

    <property>
        <name>dfs.tmp.dir</name>
        <value>/root/data/tmp</value>
    </property>

    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>

    //nameservices是该集群的名字,是唯一的标示,供zookeeper去识别,mycluster就是名字,可以改为其他的
    <property>
        <name>dfs.nameservices</name>
        <value>mycluster</value>
    </property>

    //指明在该集群下,有几个namenode及其名字,这里有集群的名字,和上面的对应
    <property>
        <name>dfs.ha.namenodes.mycluster</name>
        <value>nn1,nn2</value>
    </property>

    //每个namenode的rpc协议的地址,为了传递数据用的,客户端上传下载用这个
    <property>
       <name>dfs.namenode.rpc-address.mycluster.nn1</name>
       <value>hadoop11:4001</value>
    </property>
    <property>
       <name>dfs.namenode.rpc-address.mycluster.nn2</name>
       <value>hadoop22:4001</value>
    </property>

    <property>
       <name>dfs.namenode.servicerpc-address.mycluster.nn1</name>
       <value>hadoop11:4011</value>
    </property>
    <property>
       <name>dfs.namenode.servicerpc-address.mycluster.nn2</name>
       <value>hadoop22:4011</value>
    </property>

    //http协议的端口,是为了通过网络,如浏览器,去查看hdfs的
    <property>
          <name>dfs.namenode.http-address.mycluster.nn1</name>
          <value>hadoop11:50070</value>
    </property>
    <property>
          <name>dfs.namenode.http-address.mycluster.nn2</name>
          <value>hadoop22:50070</value> 
    </property>

    //这里是配置journalnode的主机,配置为奇数个,集群中在哪些机器上有journalnode。
    //namenode进行读写时,请求的是这个地址,journalnode实时的记录了文件的情况,外界访问namenode,namenode一方面自己响应请求,一方面找journalnode进行读写,做好备份。
    <property>
            <name>dfs.namenode.shared.edits.dir</name>
            <value>qjournal://hadoop11:8485;hadoop22:8485;hadoop33:8485/mycluster</value>
    </property>

    //journalNode在机器上的文件位置,工作目录
    <property>
        <name>dfs.journalnode.edits.dir</name>
        <value>/root/data/journaldata/</value>
    </property>

    //外界连接激活的namenode调用的类
    //供外界去找到active的namenode
   <property>
     <name>dfs.client.failover.proxy.provider.mycluster</name>
     <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
   </property>

   //自动切换namenode
   <property>
      <name>dfs.ha.automatic-failover.enabled</name>
      <value>true</value>
   </property>

   //用于一台机子登陆另一台机器使用的密匙的位置
    <property>
      <name>dfs.ha.fencing.methods</name>
      <value>sshfence</value>
    </property>
    
    //私钥文件所在的位置
    <property>
      <name>dfs.ha.fencing.ssh.private-key-files</name>
      <value>/root/.ssh/id_dsa</value>
    </property>

配置core-site.xml

    //这个是hdfs的统一入口,mycluster是我们自己配置的该集群的统一服务标识
    //外界访问的是这个集群
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://mycluster</value>
    </property>

    //由zookeeper去管理hdfs,这里是ZooKeeper集群的地址和端口。注意,数量一定是奇数,且不少于三个节点
    <property>
        <name>ha.zookeeper.quorum</name>
        <value>hadoop11:2181,hadoop22:2181,hadoop33:2181</value>
    </property>

如果一个不是HA的namenode变为HA的,则在要改的namenode的主机上执行hdfs -initializeSharedEdits,这可以使该namenode上的元数据改为journalnode上的元数据。

root用户下的.bashrc文件是环境变量的配置文件,只供root用户使用

zookeeper的配置:

一个是先配置dir路径,以存放文件,避免关闭后zookeeper信息丢失

server.1=hadoop11:2888:3888
server.2=hadoop22:2888:3888
server.3=hadoop33:2888:3888

server.1是指zookeeper在集群中的编号

在zookeeper的配置文件中还有一个这个dataDir=/root/data/zookeeper,里面有个myid文件

[root@hadoop11 data]# cd zookeeper/
[root@hadoop11 zookeeper]# ls
myid  version-2

这个myid文件指明了当前的zookeeper在集群中的编号是几。

配置过程简述:

学习日志---hdfs配置及原理+yarn的配置

现在每台机器上启动zookeeper,zk。。。启动。不要动

而后,hdfs-daemon.sh journalnode,启动journalnode,在其中一个机器上启动namenode,使用hdfs namenode -format,得到namenode的源文件,可以启动这个节点的namenode,再在另一个namenode上使用hdfs namenode -bootstrapStandby,作为备用的节点,两个namenode的元文件一样。

  • If you are setting up a fresh HDFS cluster, you should first run the format command (hdfs namenode -format) on one of NameNodes.

  • If you have already formatted the NameNode, or are converting a
    non-HA-enabled cluster to be HA-enabled, you should now copy over the
    contents of your NameNode metadata directories to the other, unformatted
    NameNode by running the command “hdfs namenode -bootstrapStandby” on the unformatted NameNode. Running this command will also ensure that the JournalNodes (as configured by dfs.namenode.shared.edits.dir) contain sufficient edits transactions to be able to start both NameNodes.

  • If you are converting a non-HA NameNode to be HA, you should run the command “hdfs -initializeSharedEdits“, which will initialize the JournalNodes with the edits data from the local NameNode edits directories.

每个namenode上都有一个zkfc,是失败机制,与zookeeper交互的。

在某一个namenode上要执行下列指令,使得zkfc与zookeeper相关联

使得zkfc可以正常启动

Initializing HA state in ZooKeeper

After the configuration keys have been added, the next step is to
initialize required state in ZooKeeper. You can do so by running the
following command from one of the NameNode hosts.

$ hdfs zkfc -formatZK

This will create a znode in ZooKeeper inside of which the automatic failover system stores its data.

hdfs的一些特点:

sbin目录下的hadoop-deamon.sh 【节点】可以用于开启该机器上的某一个节点

                   可以用kill -9 哪个进程  去杀掉某一个进程的node

                   start-dfs.sh启动集群的hdfs

把hadoop的bin和sbin配置在环境变量后,可以使用hdfs实现很多操作,如下:

[root@hadoop11 ~]# hdfs
Usage: hdfs [–config confdir] COMMAND
       where COMMAND is one of:
  dfs                  run a filesystem command on the file systems supported in Hadoop.
  namenode -format     format the DFS filesystem
  secondarynamenode    run the DFS secondary namenode
  namenode             run the DFS namenode
  journalnode          run the DFS journalnode
  zkfc                 run the ZK Failover Controller daemon
  datanode             run a DFS datanode
  dfsadmin             run a DFS admin client
  haadmin              run a DFS HA admin client
  fsck                 run a DFS filesystem checking utility
  balancer             run a cluster balancing utility
  jmxget               get JMX exported values from NameNode or DataNode.
  oiv                  apply the offline fsp_w_picpath viewer to an fsp_w_picpath
  oev                  apply the offline edits viewer to an edits file
  fetchdt              fetch a delegation token from the NameNode
  getconf              get config values from configuration
  groups               get the groups which users belong to
  snapshotDiff         diff two snapshots of a directory or diff the
                       current directory contents with a snapshot
  lsSnapshottableDir   list all snapshottable dirs owned by the current user
                                                Use -help to see options
  portmap              run a portmap service
  nfs3                 run an NFS version 3 gateway
  cacheadmin           configure the HDFS cache

YARN的配置

mapred-site.xml 中

mapred-site.xml 

<configuration>
        //这里是指明mapreduce使用的是哪个框架
        <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
        </property> 
</configuration>

yarn-site.xml中

yarn-site.xml

<configuration>
        //下面几个在每个节点中配置的都一样,因为这里指明集群中使用哪台机器作为resourcemanager
        //这个是yarn资源管理器地址,用于外界连接到资源管理器(这个)
        <property>
                <name>yarn.resourcemanager.address</name>
                <value>hadoop1:9080</value>
        </property>
        
        //应用程序宿主借此与资源管理器通信
        <property>
                <name>yarn.resourcemanager.scheduler.address</name>
                <value>hadoop1:9081</value>
        </property>
        
        //节点管理器借此与资源管理器通信的端口,如在hadoop2中陪这个,2中的nodemanager就可以找到1的resourcemanager
        <property>
                <name>yarn.resourcemanager.resource-tracker.address</name>
                <value>hadoop1:9082</value>
        </property>

        //节点管理器运行的附加服务列表
        <property>
                <name>yarn.nodemanager.aux-services</name>
                <value>mapreduce_shuffle</value>
        </property>
</configuration>

每台机器都可以自己启动nodemanager,使用yarn-darmon.sh start nodemanager,这是启动的nodemanager会根据yarn-site.xml文件中的配置找到其resourcemanager。但是在集群中nodemanager是运行在datanode上,去管理datanode的,因此如果在slaves中指明哪些机器上有datanode,在主机上使用start-yarn.sh时,该主机作为resourcemanager,同时会从slaves中,把该文件中的节点上启动nodemanager。

在每个节点上都有yarn,其会根据自己的yarn的配置去有序的形成一个集群,以resourcemanager为主。

在resourcemanager要求的地址启动yarn,才会启动resourcemanager。

如果要在hadoop上运行mapreduce:

  1. 要把mapreduce程序打包,放在hadoop集群中;

  2. 使用指令:hadoop jar [web.jar程序名] [主函数所在的类名] [输入文件路径] [输出文件路径]

    如:hadoop jar web.jar org.shizhen.wordcount /test /output

  3. 之后就可在output上查看了

hadoop集群中本身的hadoop和yarn就对应了很多指令:

使用这些指令可以操作某个进程某个节点。。。。

[root@hadoop11 ~]# hadoop
Usage: hadoop [–config confdir] COMMAND
       where COMMAND is one of:
  fs                   run a generic filesystem user client
  version              print the version
  jar <jar>            run a jar file
  checknative [-a|-h]  check native hadoop and compression libraries availability
  distcp <srcurl> <desturl> copy file or directories recursively
  archive -archiveName NAME -p <parent path> <src>* <dest> create a hadoop archive
  classpath            prints the class path needed to get the
                       Hadoop jar and the required libraries
  daemonlog            get/set the log level for each daemon
 or
  CLASSNAME            run the class named CLASSNAME

Most commands print help when invoked w/o parameters.

使用这些yarn类的指令,可以操纵mapreduce相关的节点和监控程序的流程,如application。。。

[root@hadoop11 ~]# yarn
Usage: yarn [–config confdir] COMMAND
where COMMAND is one of:
  resourcemanager      run the ResourceManager
  nodemanager          run a nodemanager on each slave
  historyserver        run the application history server
  rmadmin              admin tools
  version              print the version
  jar <jar>            run a jar file
  application          prints application(s) report/kill application
  applicationattempt   prints applicationattempt(s) report
  container            prints container(s) report
  node                 prints node report(s)
  logs                 dump container logs
  classpath            prints the class path needed to get the
                       Hadoop jar and the required libraries
  daemonlog            get/set the log level for each daemon
 or
  CLASSNAME            run the class named CLASSNAME
Most commands print help when invoked w/o parameters.

配置完成后:

启动时先zkServer.sh start 启动zookeeper,然后start-all.sh启动hadoop即可。

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/185327.html

(0)
上一篇 2021年11月4日
下一篇 2021年11月4日

相关推荐

发表回复

登录后才能评论