Hadoop完全分布式中的概念
在Hadoop完全分布式的安装配置中,可以配置多个NameNode(最多两个),形成互为热备的状态,解决NameNode单节点故障的问题。
两个NameNode之间通过JN集群来共享元数据。基本的原理和Zookeeper类似,处于Active状态的NameNode,通过将元数据的更新发送给大部分的JN机器,保证只要JN集群大部分的机器存活,处于StandBy状态的NameNode可以同步到这些元数据。
两个NameNode通过Zookeeper实现选举,这个选举的过程是由FailOverController来具体执行的。
NameNode(Active):真正在工作状态的NameNode,保持着元数据,并将元数据的更新信息写入JN
NameNode(Standby):处在备用装填的NameNode,从JN中获取信息,同步元数据。
DataNode:保存数据的节点
JN集群:用来同步元数据的集群,为了防止单节点故障,做成了集群。
Zookeeper:负责集群协调,包括NameNode的选举
FailOverController:联系NameNode和Zookeeper的进程
Hadoop完全分布式集群规划
- Hadoop集群模式的安装配置原则
- 两个NameNode一般单独安装
- FailOverController的进程必须和NameNode装在一起
- ResourceManager一般单独安装或和NameNode安装到一起
- DataNode单独安装
- NodeManager一般和DataNode装在一起
- JN要么单独安装,要么和DataNode装在一起
- Zookeeper通常是一个单独的集群,如果没有条件也可以配置在hadoop集群中
- 五台机器的情况下
- hadoop01
- NameNode
- FailOverController
- ResourceManager
- Zookeeper
- hadoop02
- NameNode
- FailOverController
- Zookeeper
- hadoop03
- DataNode
- NodeManager
- JN
- Zookeeper
- hadoop04
- DataNode
- NodeManager
- JN
- Zookeeper
- hadoop05
- DataNode
- NodeManager
- JN
- Zookeeper
- hadoop01
- 三台机器的情况
- hadoop01
- NameNode
- FailOverController
- ResourceManager
- DataNode
- NodeManager
- JN
- Zookeeper
- hadoop02
- NameNode
- FailOverController
- DataNode
- NodeManager
- JN
- Zookeeper
- hadoop03
- DataNode
- NodeManager
- JN
- Zookeeper
- hadoop01
Hadoop完全分布式安装配置 - HDFS完全分布式
- 准备工作
- 配置Host文件
- 关闭防火墙
- 配置ssh免密登录
- 安装JDK
- 安装Zookeeper
- Hadoop安装
- 解压Hadoop
- 配置hadoop-env.sh
- JAVA_HOME=jdk绝对路径
- 配置core-site
<configuration> <!-- 指定hdfs的nameservice为ns --> <property> <name>fs.defaultFS</name> <value>hdfs://ns</value> </property> <!--指定hadoop数据临时存放目录--> <property> <!--在hadoop安装目录下 创建一个tmp目录--> <name>hadoop.tmp.dir</name> <value>/home/software/hadoop-2.7.1/tmp</value> </property> <property> <name>io.file.buffer.size</name> <value>4096</value> </property> <!--指定zookeeper地址--> <property> <name>ha.zookeeper.quorum</name> <value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value> </property> </configuration>
- 配置hdfs-site.xml
<configuration> <!--指定hdfs的nameservice为ns,需要和core-site.xml中的保持一致 --> <property> <name>dfs.nameservices</name> <value>ns</value> </property> <!-- ns下面有两个NameNode,分别是nn1,nn2 --> <property> <name>dfs.ha.namenodes.ns</name> <value>nn1,nn2</value> </property> <!-- nn1的RPC通信地址 --> <property> <name>dfs.namenode.rpc-address.ns.nn1</name> <value>hadoop01:9000</value> </property> <!-- nn1的http通信地址 --> <property> <name>dfs.namenode.http-address.ns.nn1</name> <value>hadoop01:50070</value> </property> <!-- nn2的RPC通信地址 --> <property> <name>dfs.namenode.rpc-address.ns.nn2</name> <value>hadoop02:9000</value> </property> <!-- nn2的http通信地址 --> <property> <name>dfs.namenode.http-address.ns.nn2</name> <value>hadoop02:50070</value> </property> <!-- 指定NameNode的元数据在JournalNode上的存放位置 --> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://hadoop01:8485;hadoop02:8485;hadoop03:8485/ns</value> </property> <!-- 指定JournalNode在本地磁盘存放数据的位置 --> <property> <name>dfs.journalnode.edits.dir</name> <value>/home/software/hadoop-2.7.1/tmp/journal</value> </property> <!-- 开启NameNode故障时自动切换 --> <property> <name>dfs.ha.automatic-failover.enabled</name> <value>true</value> </property> <!-- 配置失败自动切换实现方式 --> <property> <name>dfs.client.failover.proxy.provider.ns</name> <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> </property> <!-- 配置隔离机制 --> <property> <name>dfs.ha.fencing.methods</name> <value>sshfence</value> </property> <!-- 使用隔离机制时需要ssh免登陆 --> <property> <name>dfs.ha.fencing.ssh.private-key-files</name> <value>/root/.ssh/id_rsa</value> </property> <property> <!--NameNode数据存放位置--> <name>dfs.namenode.name.dir</name> <value>file:///home/software/hadoop-2.7.1/tmp/hdfs/name</value> </property> <property> <!--DataNode数据存放位置--> <name>dfs.datanode.data.dir</name> <value>file:///home/software/hadoop-2.7.1/tmp/hdfs/data</value> </property> <!--HDFS副本数量--> <property> <name>dfs.replication</name> <value>2</value> </property> </configuration>
-
配置mapred-site.xml
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
- 配置yarn-site.xml
<configuration> <!-- 指定nodemanager启动时加载server的方式为shuffle server --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!-- 指定resourcemanager地址 --> <property> <name>yarn.resourcemanager.hostname</name> <value>hadoop01</value> </property> </configuration>
-
配置slaves
hadoop01 hadoop02 hadoop03
- 复制hadoop到集群的其他机器
-
配置环境变量
-
vim /etc/profile 修改HADOOP_HOME
-
- 启动完全分布式hadoop
- 启动zookeeper
-
在所有zk节点运行 zkServer.sh start
-
- 启动jn集群
-
在Active NameNode节点运行 hadoop-daemons.sh start journalnode
-
- 格式化zk中hadoop相关znode信息(第一次启动时)
-
在Active NameNode节点运行 hdfs zkfc -formatZK
-
- 格式化NameNode(第一次启动时)
-
在Active NameNode节点运行 hdfs namenode -format
-
- 启动NameNode
-
在Activ NameNode节点运行
hadoop-daemon.sh start namenode
-
在standby NameNode节点运行
hdfs namenode -bootStrapStandby(第一次启动时)
hadoop-daemon.sh start namenode
-
- 启动DataNode
-
在ActiveNameNode节点上运行
hadoop-daemons.sh start datanode
-
- 启动zkfc
-
在每个NameNode节点上运行
hadoop-daemon.sh start zkfc
-
- 启动yarn(目前为非ha模式)
-
在ResourceManager节点启动yarn
start-yarn.sh
-
- 启动zookeeper
Hadoop完全分布式安装配置 -YARN完全分布式
- 修改yanr-site.xml
<configuration> <!-- 配置可以在 nodemanager 上运行 mapreduce 程序 --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!-- 激活 resourcemanager 高可用 --> <property> <name>yarn.resourcemanager.ha.enabled</name> <value>true</value> </property> <!-- 指定 resourcemanager 的集群 id --> <property> <name>yarn.resourcemanager.cluster-id</name> <value>RM_CLUSTER</value> </property> <!-- 定义 RM 的节点--> <property> <name>yarn.resourcemanager.ha.rm-ids</name> <value>rm1,rm2</value> </property> <!-- 指定 RM1 的地址 --> <property> <name>yarn.resourcemanager.hostname.rm1</name> <value>hadoop01</value> </property> <!-- 指定 RM2 的地址 --> <property> <name>yarn.resourcemanager.hostname.rm2</name> <value>hadoop02</value> </property> <!-- 激活 resourcemanager 自动恢复 --> <property> <name>yarn.resourcemanager.recovery.enabled</name> <value>true</value> </property> <!-- 配置 resourcemanager 状态信息存储方式,有MemStore和ZKStore--> <property> <name>yarn.resourcemanager.store.class</name> <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value> </property> <!-- 配置为 zookeeper 存储时,指定 zookeeper 集群的地址 --> <property> <name>yarn.resourcemanager.zk-address</name> <value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value> </property> </configuration>
- 启动yarn ha模式
-
在Active ResourceManager上启动
start-yarn.sh
在BackUp ResourceManager上启动
yarn-daemon.sh start resourcemanager
-
- 通过浏览器查看
-
hadoop01:8088
hadoop02:8088
-