以下步骤,除非特别说明,否则在四台机器上都要单独执行一次。
1、架构角色分配
Linux001: DataNode、NodeManager、
Linux002: DataNode、NodeManager、JournalNode、QuorumPeermain
Linux003: NameNode(备)、ResourceManager(备)、ZKFC、JournalNode、QuorumPeermain
Linux004: NameNode(主)、ResourceManager(主)、ZKFC、JournalNode、QuorumPeermain
2、与Hadoop全分布搭建相同的步骤
参考:Hadoop全分布搭建
这儿的第2步即本人的上一篇博客的第2步到第5步,不用看,直接复制黏贴即可。
3、Linux004安装zookeeper(仅Linux004)
1、上传zookeeper-3.4.6.tar.gz到/opt/source目录下
2、解压:
tar -zxvf zookeeper-3.4.6.tar.gz -C ../apps/
注意:
有时候解压后的文件属主和属组会发生变化,如果发生变化请注意修改为你想要的属主和属组
3、vi + /etc/profile
export ZOOKEEPER_HOME=/opt/apps/zookeeper-3.4.6
export PATH=$PATH:$ZOOKEEPER_HOME/bin
source /etc/profile
4、cp /opt/apps/zookeeper-3.4.6/conf/zoo_sample.cfg /opt/apps/zookeeper-3.4.6/conf/zoo.cfg
vi +12 /opt/apps/zookeeper-3.4.6/conf/zoo.cfg
dataDir=/opt/apps/zookeeper-3.4.6/data
行末添加:
server.1=Linux004:2888:3888
server.2=Linux003:2888:3888
server.3=Linux002:2888:3888
注意:
dataDir属性在第12行
server.1/server.2/server.3要与后续的myid文件中内容相对应
2888通信端口、3888选举端口
5、 mkdir /opt/apps/zookeeper-3.4.6/data && cd /opt/apps/zookeeper-3.4.6/data
vi /opt/apps/zookeeper-3.4.6/data/myid
1
#注意:
不同节点的zk该数字不一样,该数字与zoo.cfg中的sever.x中的x相对应
data目录为zookeeper数据存储目录。默认为/tmp目录
6、拷贝zookeeper安装文件到其他zookeeper节点
scp -r /opt/apps/zookeeper-3.4.6 Linux002:/opt/apps
scp -r /opt/apps/zookeeper-3.4.6 Linux003:/opt/apps
4、其他zk节点ZK配置(Linux002和Linux003)
1、vi + /etc/profile
export ZOOKEEPER_HOME=/opt/apps/zookeeper-3.4.6
export PATH=$PATH:$ZOOKEEPER_HOME/bin
source /etc/profile
2、vi /opt/apps/zookeeper-3.4.6/data/myid
2
#Linux003修改为2,Linux002修改为3,不可颠倒,因为和zoo.cfg中的配置是相对应的
5、启动zk完成zk搭建及zk命令补充
启动:
./zkServer.sh start
#启动时所有zk节点都要执行该命令,启动完成,则zk集群搭建完毕
#每台zk节点执行jps可以看到zk的进程QuorumPeerMain
补充:
停止zk:
./zkServer.sh stop #停止zk,每台都执行
查看状态:
./zkServer.sh status #zk有一个leader,多个follower
进入zk客户端:
./zkCli.sh
查看命令帮助:
help
查看文件夹:
ls path
删除文件[夹]:
rmr
查看文件内容:
get 文件名
退出客户端:
ctrl+c
6、安装hadoop(仅Linux004)
1、上传hadoop-2.6.5.tar.gz安装包到Linux004机子的/opt/source目录下
2、解压:
tar -zxvf hadoop-2.6.5.tar.gz ../apps/
#注意:
凡是解压操作一定要注意观察,解压后的文件的属主和属组是否发生变化。发生变化后一定改过来。
3、配置环境变量
vi + /etc/profile
export HADOOP_PREFIX=/opt/apps/hadoop-2.6.5
export PATH=$PATH:$HADOOP_PREFIX/bin
4、创建临时数据保存目录
mkdir /opt/apps/hadoop-2.6.5/tmp
#个人测试环境建议给777权限客避免一些问题
5、创建DataNode、NameNode数据保存目录
mkdir -p /opt/apps/hadoop-2.6.5/data/dfs
7、配置hadoop-env.sh(仅Linux004)
vi +25 /opt/apps/hadoop-2.6.5/etc/hadoop/hadoop-env.sh
export JAVA_HOME=/usr/java/jdk1.7.0_80
8、配置core-site.xml(仅Linux004)
vi /opt/apps/hadoop-2.6.5/etc/hadoop/core-site.xml
<!--Yarn 需要使用 fs.defaultFS 指定NameNode URI -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value>
</property>
<!--hadoop数据存放目录-->
<property>
<name>hadoop.tmp.dir</name>
<value>file:///opt/apps/hadoop-2.6.5/tmp</value>
</property>
<!--zookeeper地址即端口-->
<property>
<name>ha.zookeeper.quorum</name>
<value>Linux004:2181,Linux003:2181,Linux002:2181</value>
</property>
注意:
hadoop.tmp.dir:
指定hadoop临时目录, hadoop.tmp.dir 是hadoop文件系统依赖的基础配置。很多路径都依赖它。
如果hdfs-site.xml中不配 置namenode和datanode的存放位置,默认就放在这>个路径中。
9、配置hdfs-site.xml(仅Linux004)
vi /opt/apps/hadoop-2.6.5/etc/hadoop/hdfs-site.xml
<!--NameNode数据存放目录-->
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///opt/apps/hadoop-2.6.5/data/dfs/name</value>
</property>
<!--edits log 文件存放目录-->
<property>
<name>dfs.namenode.edits.dir</name>
<value>${dfs.namenode.name.dir}</value>
</property>
<!--DataNode数据存放目录-->
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///opt/apps/hadoop-2.6.5/data/dfs/data</value>
</property>
<!--文件副本数-->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!--以下为集群配置-->
<!--指定hdfs的nameservice为mycluster,需要和core-site.xml中的保持一致 -->
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
<!--设置NameNode的别名 此版本最大只支持两个NameNode -->
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2</value>
</property>
<!--nn1和nn2对应的机器和端口-->
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>Linux004:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>Linux003:8020</value>
</property>
<!--nn1和nn2的网页通信地址 -->
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>Linux004:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>Linux003:50070</value>
</property>
<!--保证数据恢复 Namenode editlog同步 -->
<property>
<name>dfs.journalnode.http-address</name>
<value>0.0.0.0:8480</value>
</property>
<property>
<name>dfs.journalnode.rpc-address</name>
<value>0.0.0.0:8485</value>
</property>
<!--设置JournalNode服务器地址,QuorumJournalManager 用于存储editlog -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://Linux004:8485;Linux003:8485;Linux002:8485/mycluster</value>
</property>
<!--JournalNode存放数据地址 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/opt/apps/hadoop-2.6.5/data/dfs/jn</value>
</property>
<!--是否自动进行NameNode的失败迁移-->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!-- 配置失败自动切换实现方式 -->
<property>
<name>dfs.client.failover.proxy.provider.mycluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!--Failover后防止停掉的Namenode启动,造成两个服务 -->
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<!--私钥文件-->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_dsa</value>
</property>
<!--多少milliseconds 认为fencing失败 -->
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
<!--动态许可datanode连接namenode列表 -->
<property>
<name>dfs.hosts</name>
<value>/opt/apps/hadoop-2.6.5/etc/hadoop/slaves</value>
</property>
#NameNode/Edits Log/DataNode数据存放目录可以不配置,不配置会自动配置在core-site.xml中
hadoop.tmp.dir属性对应的目录中
10、配置maped-site.xml(仅Linux004)
1、cp /opt/apps/hadoop-2.6.5/etc/hadoop/mapred-site.xml.template /opt/apps/hadoop-2.6.5/etc/hadoop/mapred-site.xml
2、vi /opt/apps/hadoop-2.6.5/etc/hadoop/mapred-site.xml
<!--配置mapreduce运行的平台-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!--设置mapreduce的进程所在机器及服务端口-->
<property>
<name>mapreduce.jobhistory.address</name>
<value>Linux004:10020</value>
</property>
<!--设置mapreduce网页地址-->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>Linux004:19888</value>
</property>
11、配置yarn-site.xml(仅Linux004)
vi /opt/apps/hadoop-2.6.5/etc/hadoop/yarn-site.xml
<!--配置MapReduce处理数据的方式-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!--是否启用HA-->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<!--是否进行ResourceManager失败迁移的自动切换-->
<property>
<name>yarn.resourcemanager.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!-- yarn集群名称-->
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>yarn-cluster</value>
</property>
<!--yarn集群的主节点别名-->
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<!--ResourceManager的地址-->
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>Linux004</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>Linux003</value>
</property>
<!--zookeeper的地址-->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>Linux004:2181,Linux003:2181,Linux002:2181</value>
</property>
<!--yarn中记录zookeeper状态的地址-->
<property>
<name>yarn.resourcemanager.zk.state-store.address</name>
<value>Linux004:2181,Linux003:2181,Linux002:2181</value>
</property>
12、配置slaves(仅Linux004)
vi /opt/apps/hadoop-2.6.5/etc/hadoop/slaves
Linux001
Linux002
13、将配置好的hadoop拷贝到其他节点(仅Linux004)
scp -r /opt/apps/hadoop-2.6.5 root@Linux001:/opt/apps/
scp -r /opt/apps/hadoop-2.6.5 root@Linux002:/opt/apps/
scp -r /opt/apps/hadoop-2.6.5 root@Linux003:/opt/apps/
14、加入环境变量(除Linux004外的其他节点)
环境变量:
vi + /etc/profile
export HADOOP_PREFIX=/opt/apps/hadoop-2.6.5
export PATH=$PATH:$HADOOP_PREFIX/bin:$HADOOP_PREFIX/sbin
source /etc/profile
#输入start双击tab键如果出现hadoop的相关脚本,则环境变量配置成功
15、在所有JournalNode节点启动JournalNode(除Linux001外的其他节点)
cd /opt/apps/hadoop-2.6.5/sbin && hadoop-daemon.sh start journalnode
#启动journalnode方便格式化时元数据落在journalnode上
#启动后执行jps命令会多一个JournalNode进程
16、格式化NameNode并同步元数据(仅Linux004)
说明:
选定一台namenode节点,你选Linux003也行,进行格式化。格式化后在该机器上将NameNode元数据文件拷贝到另一台NameNode节点。
1、/opt/apps/hadoop-2.6.5/bin/hdfs namenode -format
2、scp -r /opt/apps/hadoop-2.6.5/data/dfs/name Linux003:/opt/apps/hadoop-2.6.5/data/dfs/
注意:
格式化失败:
先关闭集群,journalnode也关掉。
然后删除本机上/opt/apps/hadoop-2.6.5/data/dfs和/opt/apps/hadoop-2.6.5/tmp两个文件夹
再删除其他节点上的hadoop安装目录。
然后重新重第13步执行起。
17、格式化Zookeeper(仅Linux004)
cd /opt/apps/hadoop-2.6.5/bin/ && hdfs zkfc -formatZK
#仅在集群搭建额时候需要格式化
18、启动hadoop集群
start-all.sh
19、启动备用ResourceManager节点
cd /opt/apps/hadoop-2.6.5/sbin && yarn-daemon.sh start resourcemanager
#备用的namenode不用手动启动,但备用的resourcemanager需要手动启动
##集群的监控和关闭怎么搞呢?
关闭和启动顺序相反即可