你好,游客 登录
背景:
阅读新闻

大数据技术学习笔记之Hadoop框架基础5-Hadoop高级特性HA及二次排序思想

[日期:2018-03-28] 来源:  作者: [字体: ]
一、回顾
   -》shuffle流程
       -》input:读取mapreduce输入的
           默认:key是行的偏移量,value是行的内容
       -》map:负责将数据任务切分,过滤,筛选,转换等一系列的数据任务
       ·   一个块=一个分片=一个map task
       -》shuffle:分区、排序、分组
           -》map端的shuffle
               -》进入环形缓冲区,默认是100M
                   -》分区:给每一条keyvalue进行计算
                       按照key的hash取余,分配属于哪个进行处理,打标签
                   -》排序:将每个分区内的数据进行排序
               -》达到80%,开始执行溢写,将数据写入磁盘
                   -》多个小文件生成
                   -》合并:将多个小文件合并成一个大文件
                       -》排序:将相同分区的数据进行排序
               -》map task 通知app  master任务执行结束,app master通知reduce
           -》reduce端的shuffle
               -》reduce task通过http协议去每个map task的磁盘中拉取属于自己分区的数据
               -》合并:将每个属于自己分区的数据进行合并
                   -》排序:将分区内所有的数据进行排序
                   -》分组:将相同key的value合并为一条
       -》reduce:对每条数据调用reduce方法进行处理,将处理后的结果进行合并
       -》output:将reduce处理后的结果进行输出,默认输出到hdfs
   -》分布式集群部署
       -》伪分布式部署
           -》Linux环境
               -》配置网络,ip,dns,gateway
               -》本地域名解析映射
               -》防火墙,selinux
               -》jdk
           -》hadoop环境
               -》下载安装hadoop
               -》修改配置文件
                   -》hadoop-env.sh/mapred-env.sh/yarn-env.sh
                       JAVA_HOME
                   -》core-site.xml/hdfs-site.xml/mapred-site.xml/yarn-site.xml
                       -》dfs.defaultFS/hadoop.tmp.dir
                       -》副本数、权限
                       -》mapreduce运行的框架、历史服务器
                       -》resourcemanager的地址,MapReduce运行方式,日志聚集
                   -》slaves:从节点的地址
               -》格式化:bin/hdfs namenode -format
               -》启动服务
                   ->sbin/hadoop-daemon.sh start namenode
                   ->sbin/hadoop-daemon.sh start datanode
                   ->sbin/yarn-daemon.sh start resourcemanager
                   ->sbin/yarn-daemon.sh start nodemanager
                   ->sbin/mr-history-job start historyserver
                   
       -》分布式
           -》Linux
               -》伪分布式配置
               -》SSH免密钥登录
                   ssh-keygen -t rsa
                   ssh-copy-id hostname
               -》Ntp时间同步
           -》hadoop配置
               -》下载安装
               -》修改配置
                   -》slaves
               -》分发到所有机器
               -》格式化
               -》启动
               
-》如何实现集群化的管理脚本
   -》在脚本中实现如下功能
       -》读slaves文件,拿到所有从节点的地址
       -》ssh 登录到每一个从节点上
           -》执行关闭命令
           ssh hostname2 -c '$HADOOP_HOME/sbin/hadoop-daemon.sh stop datanode'   
   
   
   
一、Hadoop HA
   -》hdfs HA
   -》yarn HA
   
   -》HA:high avilability高可用
       -》NameNode:active
       -》NameNode:standby  
       -》当active状态的NameNode出现故障、standby状态的NameNode会转换为active
       -》为了避免NameNode故障,导致整个hdfs集群不可用
   -》如何去实现HA
       -》安装两个NameNode,怎么去启动?
       -》谁作为active?谁作为standby?
       -》对外开放的端口是一致的,用户如何区分谁是active?
       -》如何active故障了,standby如何同步active的元数据?
       -》active故障了,standby如何知道自己需要转换为active?
   -》zookeeper可以解决以上问题
       -》zookeeper分布式协调工具
           -》zookeeper的集群需要是奇数2N+1节点
           -》主从架构
               主:leader
               从:follower
           -》如果leader发生故障zookeeper内部会自动从所有follower中选举leader
       -》分布式文件系统:存储索引等关键信息,树形结构
       -》所有的节点都是公平节点
       -》功能:
           -》存储索引信息
           -》分布式协调锁服务
   -》zookeeper的安装部署:2N+1,企业中=5台
       -》伪分布式:
           -》下载安装
           -》修改配置文件
           -》启动server
       -》完全分布式
           -》下载安装
               tar -zxvf zookeeper-3.4.6.tar.gz -C /opt/modules/
           -》修改配置文件
               mv  zoo_simple.cfg zoo.cfg
               dataDir=/opt/modules/zookeeper-3.4.6/datas
           -》添加集群主机
               server.1=bigdata-training01.hpsk.com:2888:3888
               server.2=bigdata-training02.hpsk.com:2888:3888
               server.3=bigdata-training03.hpsk.com:2888:3888
           -》为每个节点分配id
               vim  datas/myid
           -》分发
           -》修改id
           -》启动server
               /opt/modules/zookeeper-3.4.6/bin/zkServer.sh start
           -》客户端
               /opt/modules/zookeeper-3.4.6/bin/zkCli.sh
   -》HDFS:HA
       -》NameNode:
           active:当前负责管理整个集群的NameNode
           standby:候补的NameNode
       -》DataNode:整个集群用于存储数据
           -》所有datanode会向所有的NameNode进行注册
       -》zk集群:负责协调NameNode
       -》zkfc:zookeeper failover controller
           -》z ookeeper与NameNode之间的中间人
           -》负责将自己监控的NameNode的信息发送给zookeeper
           -》将zookeeper发送过来的命令传递给NameNode
       -》journal node:日志节点,负责存储管理所有的操作信息(元数据)
           元数据(内存):
               本地:fsimage
                   edits+fsimage=fsimage
                   
   -》配置部署HA
       -》hdfs-site
               <!--HA中HDFS集群对外统一提供的入口名称-->
               <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>bigdata-training01.hpsk.com:8020</value>
               </property>
               <property>
                <name>dfs.namenode.rpc-address.mycluster.nn2</name>
                <value>bigdata-training02.hpsk.com:8020</value>
               </property>
               <!--配置每个NameNode对应的web访问地址-->
               <property>
                <name>dfs.namenode.http-address.mycluster.nn1</name>
                <value>bigdata-training01.hpsk.com:50070</value>
               </property>
               <property>
                <name>dfs.namenode.http-address.mycluster.nn2</name>
                <value>bigdata-training02.hpsk.com:50070</value>
               </property>
               <!--配置共享元数据日志文件的存储机器地址-->
               <property>
                <name>dfs.namenode.shared.edits.dir</name>
                <value>qjournal://bigdata-training01.hpsk.com:8485;bigdata-training02.hpsk.com:8485;bigdata-training03.hpsk.com:8485/mycluster</value>
               </property>
               <!--配置共享元数据日志文件的实际存储地址-->
               <property>
                <name>dfs.journalnode.edits.dir</name>
                <value>/opt/modules/hadoop-2.7.3/journal-node</value>
               </property>
               <!--配置状态切换时所调用的类-->
               <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.fencing.methods</name>
                <value>sshfence</value>
               </property>
               <property>
                <name>dfs.ha.fencing.ssh.private-key-files</name>
                <value>/home/hpsk/.ssh/id_rsa</value>
               </property>
       -》core-site
               <property>
                   <name>fs.defaultFS</name>
                   <value>hdfs://mycluster</value>
               </property>
       -》分发配置文件
       -》配置手动切换步骤
           -》启动所有的journalnode
               sbin/hadoop-daemon.sh start journalnode
           -》进行格式化:nodel
               bin/hdfs namenode -format
           -》启动node1的NameNode
               sbin/hadoop-daemon.sh start namenode
           -》在node2中同步node1的元数据
               sbin/hdfs namenode -bootstrapStandby
           -》启动node2的NameNode
               bin/hadoop-daemon.sh start namenode
           -》指定node1为active
               bin/hdfs haadmin -transitionToActive nn1
           -》手动kill node1的NameNode,手动切换到node2
               bin/hdfs haadmin -transitionToActive --forceactive  nn2
       -》配置自动切换
           -》在手动切换的基础上:
               hdfs-site:
                   <!--配置自动故障转移-->
                    <property>
                      <name>dfs.ha.automatic-failover.enabled</name>
                      <value>true</value>
                    </property>
               core-site
                   <!--配置zookeeper的地址-->
                    <property>
                      <name>ha.zookeeper.quorum</name>
                      <value>bigdata-training01.hpsk.com:2181,bigdata-training02.hpsk.com:2181,bigdata-training03.hpsk.com:2181</value>
                    </property>
               -》启动:
                   -》分发配置文件
                   -》先启动zookeeper
                   -》格式化zk
                       bin/hdfs zkfc -formatZK
                   -》启动每个进程
                       -》启动所有journalnode
                       -》启动所有NameNode
                       -》启动所有的DataNode
                       -》启动所有的zkfc
                           sbin/hadoop-daemon.sh start zkfc
                       
   -》hadoop2.x与1.x(1.x和0.x)的区别
       -》2.x中包括了yarn资源管理和任务调度模块,分解了原先MapReduce的任务
       -》2.x拥有高可用架构,避免了单点问题
       -》2.x 拥有Federation 联盟机制
           -》用于多个NameNode的应用
           -》允许有多个active的NameNode
   -》hadoop3.x与2.x的区别
       -》大部分端口进行了修改
       -》jdk版本要求最低1.8
       
       
三、二次排序
   -》需求:
       输入:                       输出:
           a   5                   a   1
           c   6                   a   5
           a   1                   b   1
           b   1                   c   3
           c   3                   c   5
           
   -》MapReduce实现
       -》input:
           <0,a   1>
           
       -》map
           key:a
           value:1
       -》shuffle
       -》reduce
           输入:
               a,{5,1}
               b,{1}
               c,{6,3}
           reduce :
               
           输出:
           key:字母
           value:数字
       —》output
       
   -》对于大数据处理上面方法不可行
       -》二次排序实现
           -》input
               
           -》map:自定义数据类型:String int
               原先:a,5
               二排:
                   a#5,5
                   c#6,6
                   a#1,1
                   b#1,1
                   c#3,3
           -》shuffle
               -》默认按照key进行分区,分组,排序
                   {a#1-a#5,{1,5}}
               -》分区:按照key的第一个值进行分区
               -》分组:按照key的第一个值进行分组
           -》reduce
               直接输出
           -》output
           
       -》先编写自定义数据类型
           String key1
           int key2




收藏 推荐 打印 | 录入:Cstor | 阅读:
相关新闻      
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数
点评:
       
评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款