Hadoop_Day04
什么是zookeeper
ZooKeeper是一个开源的分布式协调服务,用于管理和维护分布式系统中的配置信息、命名服务、状态同步等,提供可靠性和高性能的基础设施支持
Paxos算法
分布式系统中的节点通信存在两种模型:共享内存(Shared memory)和消息传递(Messages passing)。基于消息传递通信模型的分布式系统,不可避免的会发⽣以下错误:进程可能会慢、 被杀死或者重启,消息可能会延迟、丢失、重复,在基础Paxos场景中,先不考虑可能出现消息篡 改即拜占庭错误的情况。Paxos算法解决的问题是在⼀个可能发⽣上述异常的分布式系统中如何就 某个值达成⼀致,保证不论发⽣以上任何异常,都不会破坏决议的⼀致性。
zookeeper的一些常用命令
- 创建节点: create path data [acl]:创建一个新的ZooKeeper节点。
- 获取节点数据: get path [watch]:获取指定节点的数据,并选择是否设置监听。
- 列出子节点: ls path [watch]:列出指定节点的子节点。
- 设置节点数据: set path data [version]:设置指定节点的数据。
- 删除节点: delete path [version]:删除指定节点及其所有子节点。
delete
命令只能删除指定节点,而无法删除其子节点;rmr
命令则可以递归地删除指定节点及其所有子节点。
Hadoop高可用搭建
ZK NN DN RM NM JN ZKFC
master 1 1 1 1 1
node1 1 1 1 1 1 1 1
node2 1 1 1 1
1、防火墙
service firewalld stop
2、时间同步
yum install ntp
ntpdate -u s2c.time.edu.cn
或者
date -s 20180503
3、免密钥 (远程执行命令)
在两个主节点生成密钥文件
ssh-keygen -t rsa
ssh-copy-id ip
master-->master,node1,node2
node1-->master,node1,node2
4、修改hadoop配置文件
core-site.xml
hdfs-site.xml
停止HDFS集群:stop-dfs.sh
同步到其它节点
cd /usr/local/soft/hadoop-2.7.6/etc/hadoop
scp ./* node1:`pwd`
scp ./* node2:`pwd`
5、删除hadoop数据存储目录下的文件 每个节点都需要删除
rm -rf /usr/local/soft/hadoop-2.7.6/tmp
然后在hadoop-env.sh中最下面添加(只用在master中)
export HDFS_JOURNALNODE_USER=root
export HDFS_ZKFC_USER=root
6、启动zookeeper 三台都需要启动
zkServer.sh start
zkServer.sh status
7、启动JN 存储hdfs元数据
三台JN上执行 启动命令:
/usr/local/soft/hadoop-2.7.6/sbin/hadoop-daemon.sh start journalnode
8、格式化 在一台NN上执行,这里选择master
hdfs namenode -format
启动当前的NN
hadoop-daemon.sh start namenode
9、执行同步 没有格式化的NN上执行 在另外一个namenode上面执行 这里选择node1
/usr/local/soft/hadoop-2.7.6/bin/hdfs namenode -bootstrapStandby
10、格式化ZK 在master上面执行
!!一定要先 把zk集群正常 启动起来
/usr/local/soft/hadoop-2.7.6/bin/hdfs zkfc -formatZK
11、启动hdfs集群,在master上执行
start-dfs.sh
MapReduce流程
- map阶段:在进⾏map计算之前,mapreduce会根据输⼊⽂件计算输⼊分⽚(input split),每 个输⼊分⽚(input split)针对⼀个map任务,默认⼀个block对应⼀个切⽚。⼀个切⽚对应⼀个 MapTask, 切⽚完成后开始执⾏⾃定义map代码逻辑
- shuffle阶段: Mapper任务结束后产⽣的输出,这些输出先存放在缓存中,每个map有⼀个环形内存缓 冲区,⽤于存储任务的输出。默认⼤⼩100MB(io.sort.mb属性),⼀旦达到阀值0.8(io.sort.spil l.percent),⼀个后台线程就把内容写到(spill)Linux本地磁盘中的指定⽬录(mapred.local.dir)下 的新建的⼀个溢出写⽂件。 写磁盘前,要进⾏partition、sort和combine等操作。通过分区,将不同类型的数据分开处理,之 后对不同分区的数据进⾏排序,如果有Combiner,还要对排序后的数据进⾏combine。等最后记 录写完,将全部溢出⽂件合并为⼀个分区且排序的⽂件。
- Reduce阶段:当MapTask执⾏完成之后开始执⾏ReduceTask 执⾏ReduceTask之前会先从Map端拉取 从map端复制来的数据⾸先写到reduce端的缓存中,同样缓存占⽤到达⼀定阈值后会将数据 写到磁盘中,同样会进⾏partition、combine、排序等过程。如果形成了多个磁盘⽂件还会 进⾏合并,最后⼀次合并的结果作为reduce的输⼊⽽不是写⼊到磁盘中。 最后将合并后的结果作为输⼊传⼊Reduce任务中。 最后就是Reduce过程了,在这个过程中产⽣了最终的输出结果,并将其写到HDFS上。