总体步骤
1、分配机器,各安装什么软件
2、每个节点设置时间一致,设置开机自动校验时间。
3、每个节点修改主机名。
4、每个节点配置hosts。
5、每个节点关闭防火墙。
6、上传JDK,配置JDK
7、创建hadoop用户。
8、给hadoop用户配置root组
-------以下hadoop用户的操作---------
9、开启ssh免密登录。
10、上传Zookeeper到HA8,解压
11、环境变量配置zookeeper
12、配置zoo.cfg文件。
13、创建zoo.cfg中配置的文件夹
14、配置myid文件
15、删除zookeeper安装目录下无用的帮助文档。
16、scp zookeeper的安装目录到8,9,10节点。
17、修改其他节点上的 myid文件
18、scp 环境变量到其他节点。
19、source 各个节点的环境变量。
20、启动。
21、查看状态。
22、停止Zookeeper
23、上传hadoop 压缩包,解压
24、配置hadoop 环境变量
25、配置hadoop-HA参数
26、scp环境变量到1~7节点
27、source 环境变量1~7节点
28、scp hadoop.xxx文件夹到1~7节点
29、启动
*将整个过程编程shell或Python命令
1、分配机器
10台centos
机器名 | 安装的软件 | 进程 |
HA1 | JDK,hadoop | namenode,zkfc |
HA2 | JDK,hadoop | namenode,zkfc |
HA3 | JDK,hadoop | resourcemanager |
HA4 | JDK,hadoop | resourcemanager |
HA5 | JDK,hadoop | datenode,nodemanager |
HA6 | JDK,hadoop | datenode,nodemanager |
HA7 | JDK,hadoop | datenode,nodemanager |
HA8 | JDK,zookeeper,hadoop | JournalNode、QuorumPeerMain,zkfc状态值,yarn的ha状态值 |
HA9 | JDK,zookeeper,hadoop | JournalNode、QuorumPeerMain,zkfc状态值,yarn的ha状态值 |
HA10 | JDK,zookeeper,hadoop | JournalNode、QuorumPeerMain,zkfc状态值,yarn的ha状态值 |
2、每个节点设置时间一致,设置开机自动校验时间。
chkconfig --list
chkconfig --level 12345 ntpdate on
service ntpdate start
3、每个节点修改主机名。
vi /etc/sysconfig/network
hostname HA123456...10
4、每个节点配置hosts。
vi /etc/hosts
192.168.18.136 HA1
192.168.18.137 HA2
192.168.18.138 HA3
192.168.18.139 HA4
192.168.18.140 HA5
192.168.18.141 HA6
192.168.18.142 HA7
192.168.18.143 HA8
192.168.18.144 HA9
192.168.18.145 HA10
//要编写一个shell脚本,如果集群里有几十台怎么办?
5、每个节点关闭防火墙。
chkconfig iptables off
service iptables stop
6、新建application文件夹,上传JDK,配置JDK
每台机器都需要
1、HA1上传JDK压缩包到根目录
2、解压到根目录
tar -xzvf jdk-8u73-linux-x64.tar.gz
vi /etc/profile
export JAVA_HOME=/jdk1.8.0_73
export PATH=$PATH:$JAVA_HOME/bin
删除一些无用的文件
拷贝到其他机器,在向所有窗口发送中输入:
scp -r HA1:/jdk1.8.0_73/ $HOSTNAME:/
拷贝 /etc/profile 到其他机器
scp HA1:/etc/profile $HOSTNAME:/etc/profile
source /etc/profile
7、 创建hadoop账号
adduser hadoop
passwd hadoop
123456
8、给hadoop用户配置root组
vi /etc/sudoers
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
在这里添加
hadoop ALL=(ALL) ALL
------------以下hadoop用户的操作-----------------
9、开启ssh免密登录。
ssh-keygen -t rsa
touch authorized_keys
修改authorized_keys文件权 限为 600,命令:chmod 600 authorized_keys
如果不修改权限,通不过linux的权限认证,ssh会无效的
这个ssh免密登录是针对hadoop用户。root用户没有配置,不能免密登录对方。ssh免密是用户有效
10、上传Zookeeper到HA8,解压
上传到home文件夹下
解压到home文件夹下
tar -xzvf zookeeper-3.3.6.tar.gz
11、环境变量配置zookeeper
sudo vi /etc/profile
export ZOOKEEPER_HOME=/home/hadoop/zookeeper-3.3.6
export PATH=$PATH:$JAVA_HOME/bin:$ZOOKEEPER_HOME/bin
12、配置zoo.cfg文件。
cd conf/
cp zoo_sample.cfg zoo.cfg
vi zoo.cfg
dataDir=/home/hadoop/zookeeper-3.3.6/data
dataLogDir=/application/zookeeper-3.3.6/log
server.1=HA8:2888:3888
server.2=HA9:2888:3888
server.3=HA10:2888:3888
13、创建zoo.cfg中配置的文件夹
[hadoop@HA8 zookeeper-3.3.6]$ mkdir data
[hadoop@HA8 zookeeper-3.3.6]$ mkdir log
14、配置myid文件
cd data
vi myid
1
不能带有空格或空行
15、删除zookeeper安装目录下无用的帮助文档。
rm -rf docs dist-maven/
rm -rf src.zip *.txt javafx-src.zip *.html
rm -rf *.xml *.txt src zookeeper-3.3.6.jar.*
16、scp zookeeper的安装目录到8,9,10节点。
[hadoop@HA8 ~]$ scp -r zookeeper-3.3.6 HA9:/home/hadoop
[hadoop@HA8 ~]$ scp -r zookeeper-3.3.6 HA10:/home/hadoop
17、修改其他节点上的 myid文件
cd data
vi myid
2 另一台 3
不能带有空格或空行
18、scp 环境变量到其他节点。
sudo scp /etc/profile HA9:/etc/profile
sudo scp /etc/profile HA10:/etc/profile
19、source 各个节点的环境变量。
source /etc/profile
20、启动。
8,9,10三台机器都要运行
zkServer.sh start
21、查看状态。
8,9,10三台都要运行
jsp
zkServer.sh status
22、停止Zookeeper
Zookeeper安装启动成功后,先stop。
8,9,10三台都要运行
zkServer.sh stop
23、上传hadoop 压缩包,解压
[hadoop@HA1 hadoop-2.7.3]$ tar -xzvf hadoop-2.7.3.tar.gz
24、配置hadoop 环境变量
sodu vi /etc/profile
export HADOOP_HOME=/home/hadoop/hadoop-2.7.3
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
除了配置HA1,还要配置 HA8,9,10
25、配置hadoop-HA参数
25.1修改hadoop-env.sh
vi hadoop-env.sh
#export JAVA_HOME=${JAVA_HOME}
export JAVA_HOME=/jdk1.8.0_73
25.2修改core-site.xml
<configuration>
<!-- 指定hdfs的nameservice为nbdo -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://nbdo/</value>
</property>
<!-- 指定hadoop临时目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/app/hdpdata/</value>
</property>
<!-- 指定zookeeper地址 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>HA8:2181,HA9:2181,HA10:2181</value>
</property>
</configuration>
25.3修改hdfs-site.xml
<configuration>
<!--指定hdfs的nameservice为nbdo,需要和core-site.xml中的保持一致 -->
<property>
<name>dfs.nameservices</name>
<value>nbdo</value>
</property>
<!-- nbdo下面有两个NameNode,分别是nn1,nn2 -->
<property>
<name>dfs.ha.namenodes.nbdo</name>
<value>nn1,nn2</value>
</property>
<!-- nn1的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.nbdo.nn1</name>
<value>HA1:9000</value>
</property>
<!-- nn1的http通信地址 -->
<property>
<name>dfs.namenode.http-address.nbdo.nn1</name>
<value>HA1:50070</value>
</property>
<!-- nn2的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.nbdo.nn2</name>
<value>HA2:9000</value>
</property>
<!-- nn2的http通信地址 -->
<property>
<name>dfs.namenode.http-address.nbdo.nn2</name>
<value>HA2:50070</value>
</property>
<!-- 指定NameNode的edits元数据在JournalNode上的存放位置 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://HA8:8485;HA9:8485;HA10:8485/nbdo</value>
</property>
<!-- 指定JournalNode在本地磁盘存放数据的位置 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/home/hadoop/journaldata</value>
</property>
<!-- 开启NameNode失败自动切换 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!-- 配置失败自动切换实现方式 -->
<property>
<name>dfs.client.failover.proxy.provider.nbdo</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!-- 配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行,防止脑裂问题-->
<property>
<name>dfs.ha.fencing.methods</name>
<value>
sshfence
shell(/bin/true)
</value>
</property>
<!-- 使用sshfence隔离机制时需要ssh免登陆 -->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/hadoop/.ssh/id_rsa</value>
</property>
<!-- 配置sshfence隔离机制超时时间 -->
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
</configuration>
25.4修改mapred-site.xml
[hadoop@HA1 hadoop]$ cp mapred-site.xml.template mapred-site.xml
[hadoop@HA1 hadoop]$ vi mapred-site.xml
<configuration>
<!-- 指定mr框架为yarn方式 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
25.5修改yarn-site.xml
<configuration>
<!-- 开启RM高可用 -->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<!-- 指定RM的cluster id -->
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>yrc</value>
</property>
<!-- 指定RM的名字 -->
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<!-- 分别指定RM的地址 -->
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>HA3</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>HA4</value>
</property>
<!-- 指定zk集群地址 -->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>HA8:2181,HA9:2181,HA10:2181</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
25.5修改slaves
(slaves是指定子节点的位置,因为要在HA1和HA2上启动HDFS、在HA3和HA4启动yarn,所以HA1和HA2上的slaves文件指定的是datanode的位置,HA3和HA4上的slaves文件指定的是nodemanager的位置)
HA5
HA6
HA7
26、scp环境变量到1~7节点
sudo scp HA1:/etc/profile $HOSTNAME:/etc/profile
27、source 环境变量1~7节点
source /etc/profile
28、scp hadoop.xxx文件夹其他9台机器
删除share文件下的doc文件夹
rm -rf doc
scp -r HA1:/home/hadoop/hadoop-2.7.3 $HOSTNAME:/home/hadoop/
29、启动
顺序严格按照
29.1启动Zookeeper
HA8,9,10
zkServer.sh start
29.2启动journalnode
HA8,9,10
hadoop-daemon.sh start journalnode
29.3格式化HDFS
#在HA1上执行命令:
hdfs namenode -format
#格式化后会在根据core-site.xml中的hadoop.tmp.dir配置生成个文件,这里我配置的是/home/hadoop/app/hdpdata/,然后将/home/hadoop/app/hdpdata/拷贝到HA2的/home/hadoop/app/hdpdata/。
scp -r
##也可以这样,建议HA2上运行:hdfs namenode -bootstrapStandby
29.4格式化ZKFC(在HA1上执行一次即可)
hdfs zkfc -formatZK
29.5启动HDFS(在HA1上执行)
sbin/start-dfs.sh
29.6启动YARN
(#####注意#####:是在HA3上执行start-yarn.sh,把namenode和resourcemanager分开是因为性能问题,因为他们都要占用大量资源,所以把他们分开了,他们分开了就要分别在不同的机器上启动)
HA3上:sbin/start-yarn.sh
HA4上:yarn-daemon.sh start resourcemanager
yarn-ha,还需要手动启动(HA4上:yarn-daemon.sh start resourcemanager)第二个resourcemanager,
因为start-yarn.sh不具备启动第二个resourcemanager的功能
[hadoop@HA1 .ssh]$ jps
2949 DFSZKFailoverController
3064 Jps
2622 NameNode
[hadoop@HA1 .ssh]$
[hadoop@HA2 .ssh]$ jps
2040 NameNode
2154 DFSZKFailoverController
2287 Jps
[hadoop@HA3 ~]$ jps
2593 ResourceManager
2859 Jps
[hadoop@HA4 ~]$ jps
2320 ResourceManager
2376 Jps
[hadoop@HA4 ~]$
[hadoop@HA5 ~]$ jps
2331 Jps
2220 NodeManager
2015 DataNode
[hadoop@HA5 ~]$
[hadoop@HA6 ~]$ jps
2317 Jps
2206 NodeManager
2015 DataNode
[hadoop@HA6 ~]$
[hadoop@HA7 ~]$ jps
2419 NodeManager
2551 Jps
2008 DataNode
[hadoop@HA7 ~]$
[hadoop@HA8 ~]$ jps
2187 Jps
1979 QuorumPeerMain
2031 JournalNode
[hadoop@HA8 ~]$
[hadoop@HA9 ~]$ jps
2001 JournalNode
2157 Jps
1951 QuorumPeerMain
[hadoop@HA9 ~]$
[hadoop@HA10 ~]$ jps
2178 Jps
2019 JournalNode
1961 QuorumPeerMain
[hadoop@HA10 ~]$
http://192.168.18.136:50070/(HDFS管理界面)
http://192.168.18.138:8088/ (MR管理界面)