1.批处理框架:Mapreduce 批处理历史数据
2.流处理框架:storm 一直处理源源不断的数据
3.混合处理框架:spark
1.HDFS分布式文件系统
2.yarn调度与管理
3.mapreduce数据并行处理
1.hive数据仓库基础架构
2.hbase分布式数据库
3.ambari监控与管理
4.spark快速计算
5.zookeeper协调服务
等等
定义:hadoop分布式文件系统
特点:高容错,廉价机,高吞吐,大文件,分块存
关键词
1.block:128m/块
2.集群架构:
Namenode:接受请求,纂写目录,管理文件》块》Datanode的关系
Datanode:分块存储,多副本
1.请求上船
2.Namenode检查路径
3.返回可以上船
4.上传一个block,指明副本数量
5.查询Datanode信息
6.返回写入Dn地址和策略
7.请求Dn传数据和副本数量
8.Dn之间建立副本通道
9.通道建立应答
10.Dn回应客户准备就绪
11.传输block
12.副本生成
13.通知Nn接受到了新数据,建立影射
14.返回客户成功
1.请求读取
2.Nn获取文件块信息
3.信息传回客户端
4.分别请求Dn
5.分别从Dn读取
1.Map 拆分任务 分配给Dn执行
2.Reduce 汇总Dn数据输出结果
1.ResourceManager 资源管理 yarn主节点 执行在Nn或单独机器
2.Nodeanager 节点管理 yarn从节点 执行在Dn中
过程
1.客户端发起MapReduce程序
2.主节点应用管理(ApplicationManager)选择一台从节点,开启一个容器(Container)作为应用管理主机(ApplicationMaster)
3.应用管理主机计算MR程序所需从节点资源,返回主节点应用管理,传给资源调度(ResourceSchedule)
4.资源调度各个从节点分配容器,进行Map任务
5.Reduce任务从应用管理主机获取Map任务结果
6.Reduce任务汇总结果回传应用管理主机
7.应用管理主机汇报结果给客户
1.下载Jdk并安装
略
2.下载Hadoop 300MB+ 解压之
资源:https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common
3.修改环境变量
# cd /software
# wget http://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-2.8.5/hadoop-2.8.5.tar.gz
# tar xf hadoop-2.8.5.tar.gz -C /usr/local
# mv /usr/local/hadoop-2.8.5 /usr/local/hadoop
# vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.8.0_191
export HADOOP_HOME=/usr/local/hadoop
export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
# source /etc/profile
测试之
# hadoop
Usage: hadoop [--config confdir] [COMMAND | CLASSNAME]
......
理论:Hadoop核心模块一共三部分。
1.hdfs文件系统,由NameNode+DataNode构成,NameNode是其中核心,它需要作高可用
2.yarn调度系统,由ResourceManager+NodeManager构成,ResourceManager是核心,它需要作高可用
3.mapreduce计算系统,它在节点中进行,本身就是高可用
4.NodeManager和DataNode逻辑上应该是在成对出现在一台机其中,它们本身就是高可用。
5.NameNode和ResourceManager高可用由Zookeeper来实现
6.Zookeeper是分布式的程序协调工具,简单来说,将它安装成集群,集群中推举出一个leader,其他人负责投票。再在需要作高可用的机器上安转ZKFC,监控NameNode和ResourceManager是否正常,是否需要发起投票。
则我们的实验环境如下
机器:角色
HD1:NameNode1
HD2:NameNode2
HD3:ResourceManager1
HD4:ResourceManager2
HD5:DataNode+NodeManager
HD6:DataNode+NodeManager2
注:NameNode与ResourceManager是调度,控制,管理,接受访问的设备,本身他们不进行计算。所有它俩的数量自定义的情况下,也建议不要数量过多,DataNode是计算和分片存储的节点,越多越好,本文以两台为例。
再注:Zookeeper集群与hadoop无关 ,它安装在上述6台机器中都行,但是数量最好保证是单数。
1.openjdk,安装略
2.zookeeper :镜像指路 https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/
3.hadoop:镜像指路https://archive.apache.org/dist/hadoop/common/
先仅操作一台机器,进行所有机器都要进行的操作,待会再克隆,或者自行重复操作。
所有节点关闭防火墙及Selinux
所有节点时间同步
# vim /etc/hosts
192.168.122.11 hd1
192.168.122.12 hd2
192.168.122.13 hd3
192.168.122.14 hd4
192.168.122.15 hd5
192.168.122.16 hd6
等会各机器IP自行修改。
软件部分
# cd /software
# wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz
# wget https://archive.apache.org/dist/hadoop/common/hadoop-2.8.5/hadoop-2.8.5.tar.gz
jdk文章以jdk-8u192-linux-x64.tar.gz为例
# cd /software
# tar xvf jdk-8u192-linux-x64.tar.gz
# mkdir /usr/local/java
# mv /software/jdk1.8.0_192 /usr/local/java/
安装zookeeper
# tar xf zookeeper-3.4.14.tar.gz -C /usr/local
# mv /usr/local/zookeeper-3.4.14 /usr/local/zookeeper
# cp /usr/local/zookeeper/conf/zoo_sample.cfg /usr/local/zookeeper/conf/zoo.cfg
# mkdir /opt/data
# vim /usr/local/zookeeper/conf/zoo.cfg
修改
dataDir=/opt/data
添加
server.1=hd1:2888:3888
server.2=hd2:2888:3888
server.3=hd3:2888:3888
server.4=hd4:2888:3888
server.5=hd5:2888:3888
server.6=hd6:2888:3888
咱们就每一台机器都投票,也可以仅仅在某几台上面安装。
安装hadoop
# tar xf /software/hadoop-2.8.5.tar.gz -C /usr/local/;
# mv /usr/local/hadoop-2.8.5 /usr/local/hadoop;
修改环境变量
# vim /etc/profile.d/hadoop.sh
export JAVA_HOME=/usr/local/java/jdk1.8.0_192
export ZOOKEEPER_HOME=/usr/local/zookeeper
export HADOOP_HOME=/usr/local/hadoop
export PATH=$JAVA_HOME/bin:$ZOOKEEPER_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
# source /etc/profile
修改hadoop配置文件
修改hadoop,mapreduce,yarn的java路径
# vim /usr/local/hadoop/etc/hadoop/hadoop-env.sh
export JAVA_HOME=你的Java安装路径
或
export JAVA_HOME=${JAVA_HOME}
# vim /usr/local/hadoop/etc/hadoop/mapred-env.sh
export JAVA_HOME=${JAVA_HOME}
# vim /usr/local/hadoop/etc/hadoop/yarn-env.sh
export JAVA_HOME=${JAVA_HOME}
以下在与 中间加上配置
# vim /usr/local/hadoop/etc/hadoop/core-site.xml
fs.defaultFS
hdfs://ns1
hadoop.tmp.dir
/opt/data/tmp
ha.zookeeper.quorum
hd1:2181,hd2:2181,hd3:2181,hd4:2181,hd5:2181,hd6:2181
# vim /usr/local/hadoop/etc/hadoop/hdfs-site.xml
dfs.nameservices
ns1
dfs.ha.namenodes.ns1
nn1,nn2
dfs.namenode.rpc-address.ns1.nn1
hd1:9000
dfs.namenode.http-address.ns1.nn1
hd1:50070
dfs.namenode.rpc-address.ns1.nn2
hd2:9000
dfs.namenode.http-address.ns1.nn2
hd2:50070
dfs.namenode.shared.edits.dir
qjournal://hd5:8485;hd6:8485/ns1
dfs.journalnode.edits.dir
/opt/data/journal
dfs.ha.automatic-failover.enabled
true
dfs.client.failover.proxy.provider.ns1
org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
dfs.ha.fencing.methods
sshfence
dfs.ha.fencing.ssh.private-key-files
/root/.ssh/id_rsa
# cp /usr/local/hadoop/etc/hadoop/mapred-site.xml.template /usr/local/hadoop/etc/hadoop/mapred-site.xml
# vim /usr/local/hadoop/etc/hadoop/mapred-site.xml
mapreduce.framework.name
yarn
# vim /usr/local/hadoop/etc/hadoop/yarn-site.xml
yarn.resourcemanager.ha.enabled
true
yarn.resourcemanager.cluster-id
yarncluster
yarn.resourcemanager.ha.rm-ids
rm1,rm2
yarn.resourcemanager.hostname.rm1
hd3
yarn.resourcemanager.hostname.rm2
hd4
yarn.resourcemanager.webapp.address.rm1
hd3:8088
yarn.resourcemanager.webapp.address.rm2
hd4:8088
yarn.resourcemanager.zk-address
hd1:2181,hd2:2181,hd3:2181,hd4:2181,hd5:2181,hd6:2181
yarn.nodemanager.aux-services
mapreduce_shuffle
# vim /usr/local/hadoop/etc/hadoop/slaves
去掉原来的localhost,写上datanode的主机名
hd5
hd6
现在克隆(过程略),然后进行分别操作。
每台克隆机修改IP并重启网络,过程略
现在进行所有机器的两两免密
# ssh-keygen
# cd /root/.ssh
# cp id_rsa.pub authorized_keys
# for i in {1..6};do scp -r /root/.ssh hd$i:/root;done
# for i in {1..6};do scp -r /root/.ssh hd$i:/root/;done
设置zookeeper的ID
[root@hd1 ~]# echo 1 > /opt/data/myid
[root@hd2 ~]# echo 2 > /opt/data/myid
[root@hd3 ~]# echo 3 > /opt/data/myid
[root@hd4 ~]# echo 4 > /opt/data/myid
[root@hd5 ~]# echo 5 > /opt/data/myid
[root@hd6 ~]# echo 6 > /opt/data/myid
1.所有安装zookeeper的机器开启zookeeper
# zkServer.sh start
# zkServer.sh status
# zkServer.sh stop
2.hd1上启动
# hadoop-daemons.sh start journalnode
# hdfs namenode -format
# hdfs zkfc -formatZK
# start-dfs.sh
3.hd3,hd4都启动
# start-yarn.sh
# jps
hd1
2249 NameNode
2537 DFSZKFailoverController
1834 QuorumPeerMain
2602 Jps
hd2
1779 Jps
1705 DFSZKFailoverController
1503 QuorumPeerMain
hd3
1508 QuorumPeerMain
1926 Jps
1663 ResourceManager
hd4
1504 QuorumPeerMain
1752 Jps
1657 ResourceManager
hd5
1745 DataNode
1540 QuorumPeerMain
1673 JournalNode
2009 Jps
1869 NodeManager
hd6
1682 JournalNode
1507 QuorumPeerMain
2019 Jps
1878 NodeManager
1754 DataNode
QuorumPeerMain是投票
JournalNode是同步日志
ResourceManager,NodeManager是yarn进程
NameNode是hdfs主节点
DFSZKFailoverController是zkfs监视
该有的都有视为成功。
高可用测试:略