版权声明: https://blog.csdn.net/weixin_37254888/article/details/79704221
一、回顾
-》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
-》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