溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

學習日志---hdfs配置及原理+yarn的配置

發布時間:2020-03-31 18:02:42 來源:網絡 閱讀:2243 作者:wukong0716 欄目:大數據

篩選算法:

關注度權重公式:

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??蛻舳嗽L問這些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即可。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女