HA高可用配置-Json-遠程調試-聚類距離

join:
    Map端join    //大表+小表,只須要map
    Reduce端join    //大表+大表,須要Map和Reduce
            //設計組合key和flag
            //分組對比器


Json:
    fastJson技術
    JSON.parseObject(str)    //將string轉成jsonObject
    jo.get(key)        //獲得json串指定的key所對應的value,String形式
    jo.getJsonArray        //獲得json串指定的key所對應的value,數組形式


    
在MR1代和MR2代資源調度區別:
    1、一代中節點名稱稱爲jobTracker(主節點)和taskTracker
       二代中節點名稱稱爲ResourceManager(主節點)和NodeManager

    2、jobTracker充當全部資源分配和調度,和節點分配
       ResourceManager只負責分配資源,而後在從節點啓動MRAppMaster進程,由AppMaster負責全部做業的執行和監控


如何進行遠程調試:
    緣由:在本地客戶端沒法直接向集羣提交MR做業

    遠程調試:
        1、服務端:Linux(監聽)
            java -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=192.168.23.101:8888 -cp myhadoop-1.0-SNAPSHOT.jar Helloworld
        2、客戶端:IDEA(鏈接)
            在類名下,Edit Configuration ==> + Remote, 修改Port和host,而後能夠進行debug

    
遠程調試hadoop程序:
    修改${HADOOP_HOME}\etc\hadoop\hadoop-env.sh文件
    添加以下行:
        export HADOOP_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=192.168.23.101:8888"

    從ResourceMgrDelegate提交到YarnClientImpl

    Rpc和Ipc的調用:
        RPC:遠程過程調用,在hadoop的RPC中使用的是串行化技術
        IPC:進程間通訊,也是使用串行化技術

HA:高可用:
    使用兩個namenode,避免出現問題

    1、高可用的問題:
        兩個namenode同時運行,會發生腦裂
        一個節點處於active狀態
        另外一個節點處於standby狀態    //待命狀態

    2、數據同步問題:
        JournalNode:在兩個namenode之間負責數據的同步,通常配置在datanode上

高可用配置:
=====================================
    hdfs-site.xml
    --------------------------------------------------------
<!-- 名字空間的邏輯名稱 -->
<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>s101:8020</value>
</property>
<property>
  <name>dfs.namenode.rpc-address.mycluster.nn2</name>
  <value>s105:8020</value>
</property>

<!-- 配置namenode的HTTP端口 -->
<property>
  <name>dfs.namenode.http-address.mycluster.nn1</name>
  <value>s101:50070</value>
</property>
<property>
  <name>dfs.namenode.http-address.mycluster.nn2</name>
  <value>s105:50070</value>
</property>

<!-- 配置journalnode地址,配置在datanode地址-->
<property>
  <name>dfs.namenode.shared.edits.dir</name>
  <value>qjournal://s102:8485;s103:8485;s104:8485/mycluster</value>
</property>

<!-- 配置容災代理,默認便可 -->
<property>
  <name>dfs.client.failover.proxy.provider.mycluster</name>
  <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>

<!-- 配置防禦手段,使用shell(/bin/true) -->
<property>
    <name>dfs.ha.fencing.methods</name>
    <value>shell(/bin/true)</value>
</property>

    core-site.xml
    ---------------------------------------
    <!-- 使用邏輯名稱來肯定文件系統 -->
<property>
  <name>fs.defaultFS</name>
  <value>hdfs://mycluster</value>
</property>
<!-- journalnode工做目錄地址 -->
<property>
  <name>dfs.journalnode.edits.dir</name>
  <value>/home/centos/hadoop/full/journal</value>
</property>

    1、配置完成以後分發文件:

    2、配置s105的ssh免密登錄:直接拷貝s101上的私鑰也能夠
        ssh-copy-id centos@s101
        ssh-copy-id centos@s102
        ssh-copy-id centos@s103
        ssh-copy-id centos@s104
        ssh-copy-id centos@s105

    3、將namenode中的工做目錄所有分發到s105
        rsync -lr ~/hadoop centos@s105:~

    4、啓動journalnode:s101
        hadoop-daemons.sh start journalnode

    五、hdfs namenode -initializeSharedEdits

    六、啓動進程:start-dfs.sh

    7、將namenode變爲active狀態
        hdfs haadmin -transitionToActive nn1

        
聚類:
    將看似無關的集合,變成一個個有相關性的簇

    舉例:將星星的集合當作星團的過程叫做聚類

    聚類算法多用於推薦或將數據分組

聚類的作法:k-means聚類
    計算數據間的距離:歐式距離

    1、讀取中心點
    2、將中心點和map中的全部行進行比較,並計算出距離
       輸出組(簇)號和組(簇)數據
     
    3、在reduce端對數據進行從新聚合並更新中心點

    4、每次迭代MR,直到中心數據再也不變化,判斷MR做業什麼時候到達末尾
        


距離:
    一、歐式距離    //歐幾里得距離a(1,0)  b(1,2)   √(x1-x2)^2 + (y1-y2)^2    √
    二、曼哈頓距離    //|x1-x2| + |y1-y2|
    三、切比雪夫距離    //min{(x1-x2),(y1-y2)}    應用在機率場景

    當物理維度超過三維,歐式距離就失去了意義,只能做爲距離的一個衡量標準
相關文章
相關標籤/搜索