一、hadoop集群安装
1. 安装好linux
3. 关闭防火墙
sudo service iptables stop
sudo chkconfig iptables off
4. 设置静态IP,改主机名
编辑vim /etc/sysconfig/network-scripts/ifcfg-eth0
改成
=================================
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
NAME="eth0"
IPADDR=192.168.5.101
PREFIX=24
GATEWAY=192.168.5.2
DNS1=192.168.5.2
=================================
5.编辑vim /etc/sysconfig/network
改HOSTNAME=那一行
6. 配置/etc/hosts
vim /etc/hosts
=============================
192.168.5.100 clay01
192.168.5.101 clay02
192.168.5.102 clay03
192.168.5.103 clay04
=============================
7. 创建一个一般用户clay,给他配置密码
useradd clay
passwd 123456
8. 配置这个用户为sudoers
visudo
在root ALL=(ALL) ALL 下面添加
clay ALL=(ALL) NOPASSWD:ALL
保存时wq!强制保存
9. *在/opt目录下创建两个文件夹module和software,并把所有权赋给clay
mkdir /opt/module /opt/software
chown clay:clay /opt/module /opt/software
10. 关机,快照,克隆
从这里开始要以一般用户登陆
11. 克隆后的虚拟机修改四个部分
vim /etc/udev/rules.d/70-persistent-net.rules
修改ip vim /etc/sysconfig/network-scripts/ifcfg-eth0
修改主机名称 vi /etc/sysconfig/network
配置映射 vim /etc/hosts
11. 搞一个分发脚本
cd ~
vim xsync
内容如下:
=================================================================
#!/bin/bash
#1. 判断参数个数
if [ $# -lt 1 ]
then
echo Not Enough Arguement!
exit;
fi
#2. 遍历集群所有机器
for host in clay01 clay02 clay03
do
echo ==================== $host ====================
#3. 遍历所有目录,挨个发送
for file in $@
do
#4 判断文件是否存在
if [ -e $file ]
then
#5. 获取父目录
pdir=$(cd -P $(dirname $file); pwd)
#6. 获取当前文件的名称
fname=$(basename $file)
ssh $host "mkdir -p $pdir"
rsync -av $pdir/$fname $host:$pdir
else
echo $file does not exists!
fi
done
done
==============================================================
chmod +x xsync
sudo cp xsync /bin
sudo xsync /bin/xsync
12. 配置免密登陆
1. 生成密钥对
ssh-keygen -t rsa 三次回车
2. 发送公钥到本机和其他机器
ssh-copy-id clay01 输入一次密码
3. 复制authority文件到其他机器
13. 在一台机器上安装Java和Hadoop,并配置环境变量,并分发到集群其他机器
1. 拷贝文件到/opt/software,两个tar包
2. 解压
3. 配置环境变量
*在/etc/profile.d文件夹下新建一个environment.sh文件,内容如下
=======================================================
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_144
export PATH=$PATH:$JAVA_HOME/bin
#HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-2.7.2
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
========================================================
并将这个文件同步到集群所有机器
sudo xsync /etc/profile.d
###所有配置文件都在$HADOOP_HOME/etc/hadoop
14. 首先配置hadoop-env.sh,yarn-env.sh,mapred-env.sh文件,配置Java_HOME
在每个文件第二行添加 export JAVA_HOME=/opt/module/jdk1.8.0_144
15. 配置Core-site.xml
==============================================================
<!-- 指定HDFS中NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://clay01:9000</value>
</property>
<!-- 指定Hadoop运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-2.7.2/data/tmp</value>
</property>
==============================================================
16. 配置hdfs-site.xml
==============================================================
<!-- 数据的副本数量 -->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!-- 指定Hadoop辅助名称节点主机配置 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>clay03:50090</value>
</property>
==============================================================
17. 配置yarn-site.xml
==============================================================
<!-- Site specific YARN configuration properties -->
<!-- Reducer获取数据的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定YARN的ResourceManager的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>clay02</value>
</property>
<!-- 日志聚集功能使能 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 日志保留时间设置7天 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
==============================================================
18. 配置mapred-site.xml
==============================================================
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- 历史服务器端地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>clay03:10020</value>
</property>
<!-- 历史服务器web端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>clay03:19888</value>
</property>
==============================================================
启动历史服务器:mr-jobhistory-daemon.sh start historyserver
19. 配置Slaves(只负责群起,没有其他的作用)
=======================
clay01
clay02
clay03
========================
20. 分发配置文件
xsync /opt/module/hadoop-2.7.2/etc
21. 格式化Namenode 在clay01
hdfs namenode -format
22. 启动hdfs start-dfs.sh
23. 在配置了Resourcemanager机器上执行
在clay02上启动start-yarn.sh
查看namenode clay01:50070
查看yarn clay02:8088
查看jobhistory http://clay03:19888/jobhistory
24、 测试
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /input /output
26 hadoop-daemon.sh start namenode或datanode
yarn-daemon.sh start resourcemanager或nodemanager
27、如果集群出了问题,关闭集群后,三台机器都要执行
rm -rf data logs
回到21重新操作
二、HadoopHA安装
1、集群规划
clay01 clay02 clay03
2、安装zookeeper
a.在/opt/module/zookeeper-3.4.10/这个目录下创建zkData
b.重命名/opt/module/zookeeper-3.4.10/conf这个目录下的zoo_sample.cfg为zoo.cfg
c.配置zoo.cfg文件
dataDir=/opt/module/zookeeper-3.4.10/zkData
增加如下配置
#######################cluster##########################
server.1=clay01:2888:3888
server.2=clay02:2888:3888
server.3=clay03:2888:3888
d.在/opt/module/zookeeper-3.4.10/zkData目录下创建一个myid的文件
在文件中添加与server对应的编号:如1
f.拷贝配置好的zookeeper到其他机器上,修改myid文件
g.分别启动zk 并查看状态
bin/zkServer.sh start
bin/zkServer.sh status
3、配置HA集群
a.拷贝之前配置的hadoop到新创建的ha文件夹进行高可用配置
删除data和logs文件
#########core-site.xml########
<property>
<name>ha.zookeeper.quorum</name>
<value>clay01:2181,clay02:2181,clay03:2181</value>
</property>
<!-- 把两个NameNode)的地址组装成一个集群mycluster -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value>
</property>
<!-- 指定hadoop运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/HA/hadoop-2.7.2/data/tmp</value>
</property>
-----------------------------------------------
###########hdfs-site.xml#######################
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!-- 完全分布式集群名称 -->
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
<!-- 集群中NameNode节点都有哪些 -->
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2</value>
</property>
<!-- nn1的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>clay01:9000</value>
</property>
<!-- nn2的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>clay02:9000</value>
</property>
<!-- nn1的http通信地址 -->
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>clay01:50070</value>
</property>
<!-- nn2的http通信地址 -->
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>clay02:50070</value>
</property>
<!-- 指定NameNode元数据在JournalNode上的存放位置 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://clay01:8485;clay02:8485;clay03:8485/mycluster</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>/home/clay/.ssh/id_rsa</value>
</property>
<!-- 声明journalnode服务器存储目录-->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/opt/HA/hadoop-2.7.2/data/jn</value>
</property>
<!-- 关闭权限检查-->
<property>
<name>dfs.permissions.enable</name>
<value>false</value>
</property>
<!-- 访问代理类:client,mycluster,active配置失败自动切换实现方式-->
<property>
<name>dfs.client.failover.proxy.provider.mycluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
-----------------------------------------------------------------------------
#############yarn-site.xml#####################
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!--启用resourcemanager ha-->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<!--声明两台resourcemanager的地址-->
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>cluster-yarn1</value>
</property>
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>clay03</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>clay02</value>
</property>
<!--指定zookeeper集群的地址-->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>clay01:2181,clay02:2181,clay03:2181</value>
</property>
<!--启用自动恢复-->
<property>
<name>yarn.resourcemanager.recovery.enabled</name>
<value>true</value>
</property>
<!--指定resourcemanager的状态信息存储在zookeeper集群-->
<property>
<name>yarn.resourcemanager.store.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>
先配置zookeeper
启动(1)
1. 在各个JournalNode节点上,输入以下命令启动journalnode服务
sbin/hadoop-daemon.sh start journalnode
2. 在[nn1]上,对其进行格式化,并启动
bin/hdfs namenode -format
sbin/hadoop-daemon.sh start namenode
3. 在[nn2]上,同步nn1的元数据信息
bin/hdfs namenode -bootstrapStandby
4. 启动[nn2]
sbin/hadoop-daemon.sh start namenode
5.查看web页面显示,如图3-21,3-22所示
图3-21 hadoop102(standby)
图3-22 hadoop103(standby)
6.在[nn1]上,启动所有datanode
sbin/hadoop-daemons.sh start datanode
7.将[nn1]切换为Active
bin/hdfs haadmin -transitionToActive nn1
7.查看是否Active
bin/hdfs haadmin -getServiceState nn1
启动(2)
(1)关闭所有HDFS服务:
sbin/stop-dfs.sh
(2)启动Zookeeper集群:
bin/zkServer.sh start
(3)初始化HA在Zookeeper中状态:
bin/hdfs zkfc -formatZK
(4)启动HDFS服务:
sbin/start-dfs.sh
(5)在各个NameNode节点上启动DFSZK Failover Controller,先在哪台机器启动,
哪个机器的NameNode就是Active NameNode
sbin/hadoop-daemin.sh start zkfc
(6)在clay01中执行:
sbin/start-yarn.sh
(7)在clay02中执行:
sbin/yarn-daemon.sh start resourcemanager