Hadoop集群安装
概述
集群
cluster,将很多任务进程分布到多台计算机上;通过联合使用多台计算机的存储、计算能力完成更庞大的任务。为了实现无限量的存储和计算能力,在生产环境中必须使用集群来满足需求。
总体步骤
基本步骤
- 安装JDK,配置JDK环境变量
- 安装Hadoop,配置Hadoop环境变量,配置Hadoop
- 组织并在集群中分发文件
注意:如果使用克隆方案,克隆后需修改主机名及IP,修改方法参考文后附录。
其它要求
- 集群中的计算机在时间上要同步,系统时间不能差太多(秒级),如果设置时间后重启时间又不准确了(主板电池老化),可以启用NTP(Network Time Protocol网络时间协议)服务解决。
- 集群中的计算机在网络上能够相互访问
i. 虚拟机的网络使用桥接模式(如果在同一台物理机内的虚拟机间搭集群可以用NAT模式)
ii. 固定IP,要规划好IP地址和主机名
iii. 全部关闭防火墙
iv. 全部实现Hosts解析
v. 全部实现免密码SSH访问(可以统一密钥对)
网络规划
规划namenode主机名与ip
规划datanode主机名与ip
安装Linux
安装最小化版本(略)
注意网络选择桥接模式(但如果集群节点都在同一台物理机上选NAT更方便)
注意设置网络(安装过程中设置主机名、IP等)
注意设置时间(安装过程中设置网络时间同步)
关闭防火墙
关闭防火墙
systemctl stop firewalld
禁止防火墙开机启动
systemctl disable firewalld
查看防火墙状态
firewall-cmd --state
安装JDK
略,注意在/etc/hadoop中设置环境变量,用source命令更新环境变量并检查
安装Hadoop
略,注意在/etc/hadoop中设置环境变量,用source命令更新环境变量
打开hadoop-evn.sh指定JDK位置
# The java implementation to use.
export JAVA_HOME=JDK位置
打开core-site.xml指定NameNode
fs.defaultFS
hdfs://master:9000
打开hdfs-site.xml指定SecondaryNameNode
dfs.namenode.secondary.http-address
hdfs://master:50090
注:以上只配置了HDFS,MapReduce等配置项随后使用时再添加
组织并在集群中分发以下文件
下面列出的文件需要组织好内容并分发到各个节点上。
使用scp命令可以跨节点复制文件!
${HADOOP_HOME}/etc/hadoop/slaves
Slaves文件的作用是当使用start-dfs.sh启动HDFS时,会自动将各个datanode节点自动启动起来。
不配Slaves也可以;但每个datanode需要手动启动。如果集群比较大,单独启动一些节点很正常。
单独启动datanode的命令是在指定的datanode节点上运行:
hadoop-daemon.sh stop datanode #关闭当前节点上的datanode
hadoop-daemon.sh start datanode #启动当前节点上的datanode
Slaves文件如:
master #让master同时成为datanode,生产环境通常不需要!
slave1
slave2
…
在NameNode上整理好slaves文件,分发给每个datanode
scp slaves root@slaveXX: ${HADOOP_HOME}/etc/hadoop/
注意:此命令需在${HADOOP_HOME}/etc/hadoop目录中执行
${HADOOP_HOME}指Hadoop的安装目录
/etc/hosts
Hosts的作用是可以在网络使用名字替换IP地址,文件内容如下:
192.168.13.10 master
192.168.13.21 slaves1
…
可以NameNode上整理好,然后分发到各个节点
scp /etc/hosts root@slaveXX :/etc/hosts
~/.ssh/authorized_keys
Authorized_keys的作用是可以免密码地使用SSH跨节点相互访问
生成密钥
在NameNode上使用ssh-keygen命令生成密钥对
ssh #先运行一下ssh命令
ssh-keygen #生成密钥对(如果已经有了,直接使用现有的)
生成的密钥对在~/.ssh中,分别是:
id_rsa #私钥
id_rsa.pub #公钥~
授权公钥
在NameNode上使用cat命令将公钥放入授权文件,授权后可以免密码访问
cat xxx.pub >> authorized_keys~
将~/.ssh目录复制到任意一个DataNode
scp -r ~/.ssh root@slave1:~/
生成known_hosts文件
在NameNode上使用ssh slave1访问DataNode,输入yes
成功后使用ssh master访问NameNode,输入yes
known_hosts文件记录了用户已经yes或no过的公钥指纹,以后不用再反复yes了
分发.ssh
将NameNode上的~/.ssh复制到所有DataNode上,让整个集群使用同一对密钥
并且已经授权
scp -r ~/.ssh root@slaveXX:~/
注意事项
SSH相关的文件对权限比较敏感,其它用户不能有写权限
如果遇到总是需要密码才能登录的问题可以按下面检查并更改权限:
~ #权限700
~/.ssh #权限700
~/.ssh/id_rsa #权限600
~/.ssh/id_rsa.pub #权限600
~/.ssh/known_hosts #权限600
~/.ssh/authorized_keys #权限600
设置权限
chmod 600 ~/.ssh/authorized_keys
启动
格式化
在namenode上运行
hdfs namenode -format
启动
在namenode上运行
start-dfs.sh
检查启动结果
【1】用JPS查看Java进程
NameNode #NameNode启动了,NameNode上要有此进程
DataNode #DataNode启动了,DataNode上要有此进程
SecondaryNameNode #SecondaryNameNode启动了
#这个是NameNode上的辅助进程
【2】用master:50070查看Hadoop站点,检查各个节点是否启动
【3】用命令测试,检查HDFS是否工作正常
hdfs dfs -mkdir /abc
hdfs dfs -ls /
常见问题
遇到问题时查看日志对解决问题非常有帮助
日志在${HADOOP_HOME}/logs中
NameNode有问题就查看NameNode相关的日志
DataNode有问题查看DataNode相关的日志
-
NameNode启动失败
如果配置没错的话,删除namenode中的${hadoop.tmp.dir}/dfs,然后重新格式化(数据会丢失) -
DataNode启动失败
如果查看日志,发现集群ID不同,可以修改集群ID,在下面的文件中
${hadoop.tmp.dir}/dfs/data/current/VERSION
clusterID=CID-xxx
或者删除 ${hadoop.tmp.dir}/dfs/data
重新启动
hadoop-daemon.sh stop datanode
hadoop-daemon.sh start datanode -
某些节点启动失败
a) 检查防火墙是否关闭(包括windows系统中的360等)
b) 检查SSH免密码访问,双向互跳都检查一下
c) 检查etc/hosts设置,主机名是否都已经加入
d) 检查${HADOOP_HOME}/slaves
e) 检查Hadoop其它配置文件
f) 检查系统时间是否正确(不正确可以安装NTP,并开启网络时间同步)
附录
查看及修改主机名
查看主机名
hostname
设置主机名【1】
vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=s1
设置主机名【2】
vi /etc/hostname
s1
查看及修改IP
vi /etc/sysconfig/network-scripts/ifcfg-ens33
BOOTPROTO=static
IPADDR=192.168.1.11
NETMASK=255.255.255.0
NETWORK=192.168.1.0
ONBOOT=yes
DNS1=223.5.5.5
DNS2=223.6.6.6
重启网络服务
systemctl restart network
或
service network restart
网络时间同步
网络时间协议
Network Time Protocol
查看ntp是否安装
rpm -q ntp
安装和设置ntp服务
yum -y install ntp
systemctl start ntpd
systemctl enable ntpd
查看NTP服务器
ntpq -p
查看同步状态
ntpstat
使用国内yum源加速
cd /etc/yum.repos.d
wget http://mirrors.163.com/.help/CentOS7-Base-163.repo
mv CentOS-Base.repo CentOS-Base.repo.bk
mv CentOS7-Base-163.repo CentOS-Base.repo
yum makecache