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}etchadoophadoop-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

    5、hdfs namenode -initializeSharedEdits

    6、启动进程:start-dfs.sh

    7、将namenode变为active状态
        hdfs haadmin -transitionToActive nn1

        
聚类:
    将看似无关的集合,变成一个个有相关性的簇

    举例:将星星的集合看成星团的过程叫作聚类

    聚类算法多用于推荐或将数据分组

聚类的做法:k-means聚类
    计算数据间的距离:欧式距离

    1、读取中心点
    2、将中心点和map中的所有行进行比较,并计算出距离
       输出组(簇)号和组(簇)数据
     
    3、在reduce端对数据进行重新聚合并更新中心点

    4、每次迭代MR,直到中心数据不再变化,判断MR作业何时到达末尾
        


距离:
    1、欧式距离    //欧几里得距离a(1,0)  b(1,2)   √(x1-x2)^2 + (y1-y2)^2    √
    2、曼哈顿距离    //|x1-x2| + |y1-y2|
    3、切比雪夫距离    //min{(x1-x2),(y1-y2)}    应用在概率场景

    当物理维度超过三维,欧式距离就失去了意义,只能作为距离的一个衡量标准
原文地址:https://www.cnblogs.com/zyde/p/8945319.html