前言
- Linux操作系统为CentOS7 ,与CentOS6以及Ubuntu命令有稍许不同;
- 在创建hadoop用户之后,所有的操作都是使用hadoop用户去操作。当然可以使用root以及其他用户去操作,但非root操作注意权限问题;
- jdk需要1.8以上,安装的Spark和Hadoop需注意他们的版本依赖关系,可以去官网查看;
- 安装包
jdk1.8.0_201+hadoop-2.6.5+scala-2.11.12+spark-2.3.1-bin-hadoop2.6
https://download.youkuaiyun.com/download/qq_41153405/11505092 ; - 用到两台服务器,一台阿里云,一台腾讯云。下面文件配置中涉及到的端口都要打开(不管有没有关闭系统防火墙)。
- 本集群仅为测试,所以没有配置NTP,有需要请自行百度。
PS:搭集群过程中遇到很多坑,也借鉴了很多博客,望指正。
基础环境配置
1.集群规划
两台服务器,以阿里云服务器为主,阿里云的服务器跑一个NameNode和一个DataNode,腾讯云的服务器跑一个DataNode。
2.IP和系统映射
在/etc/hosts所有节点都增加IP和服务器名称的映射关系,且2个节点可以相互ping通。
阿里云服务器的公网IP为a11.b11.c11.d11,内网IP为a12.b12.c12.d12;腾讯云服务器的公网IP为a21.b21.c21.d21,内网IP为a22.b22.c22.d22。
在阿里云服务器中,编辑/etc/hosts文件:
a12.b12.c12.d12 hadoop1
a21.b21.c21.d21 hadoop2
在腾讯云服务器中,编辑/etc/hosts文件:
a11.b11.c11.d11 hadoop1
a22.b22.c22.d22 hadoop2
两个服务器公网可以ping通!!!
3.关闭所有节点的防火墙
两个服务器的防火墙默认都是开启的,若是 CentOS 7,需通过如下命令关闭(防火墙服务改成了 firewall):
sudo systemctl stop firewalld.service # 关闭firewall
sudo systemctl disable firewalld.service # 禁止firewall开机启动
注:阿里云和腾讯云的服务器采用了防火墙+安全组的安全防御模式,所以单单关闭防火墙没有用,Hadoop和Spark配置文件中涉及到的端口都要在安全组中开放才可以。
4.修改主机名
查看当前主机名:hostname
修改/etc/sysconfig/network文件:vi /etc/sysconfig/network
最后添加一行:HOSTNAME=主机名
如果是 CentOS 7 操作系统,可以使用命令:hostnamectl set-hostname 主机名
重启服务器:shutdown -r now
重启服务器后自动生效。
参考网址:https://www.cnblogs.com/huhyoung/p/9656263.html
5.添加用户hadoop及权限
添加用户hadoop及密码
[root@hadoop1 /]# useradd hadoop
useradd: user 'hadoop' already exists
[root@hadoop1 /]# passwd hadoop
给hadoop用户增加管理员权限
[root@hadoop1 ~]# visudo
找到 root ALL=(ALL) ALL 这行(应该在第98行,可以先按一下键盘上的 ESC 键,然后输入 :98 (按一下冒号,接着输入98,再按回车键),可以直接跳到第98行 ),然后在这行下面增加一行内容:hadoop ALL=(ALL) ALL (当中的间隔为tab)
6.SSH免密登录
用hadoop用户执行以下指令:
- cd ~ //切换到用户home目录下
- ls -al //查看home目录下有无隐藏文件夹**.ssh**。如果没有创建一个.ssh。注意.ssh目录的权限是700(drwx------),如果不是,修改一下(chmod 700 .ssh)
- cd .ssh //进入 .ssh目录下
- ssh-keygen -t rsa //输入该命令,连续回车,会在.ssh目录下生成私钥id_rsa和公钥id_rsa.pub
- ssh-copy-id hadoop1 //该命令把生成的公钥文件的内容追加到hadoop1的authorized_keys 文件中,注意authorized_keys的文件权限是600。这步完成后,就可以ssh hadoop1免密登录自己了
- ssh-copy-id hadoop2 //该命令把生成的公钥文件的内容追加到hadoop2的authorized_keys 文件中,hadoop1可以免密登录hadoop2
- 按照上面步骤配置一下hadoop2,实现hadoop2免密登录hadoop1
安装JDK
JDK路径:/home/java/jdk
解压安装包,重命名为jdk
# sudo tar -zvxf jdk-8u201-linux-x64.tar.gz
# sudo mv jdk1.8.0_201 jdk
将解压后的jdk目录拷贝到hadoop2
scp -r /home/java/jdk root@hadoop2:/home/java
注:用hadoop用户操作命令,如果java目录是hadoop用户组hadoop用户的,不需要sudo;若java属于root则需要sudo。注意文件权限问题!!!
配置环境变量(hadoop1和hadoop2两个节点都要配置)
# sudo vim /etc/profile
在/etc/profile文件尾添加:
export JAVA_HOME=/home/java/jdk
export PATH=:$PATH:$JAVA_HOME/bin
保存退出,使配置文件生效
source /etc/profile
验证
安装Hadoop
路径:/home/hadoop/app/hadoop
解压安装包,重命名为hadoop
# tar -zvxf hadoop-2.6.5.tar.gz
# mv hadoop-2.6.5 hadoop
进入/home/hadoop/app/hadoop/etc/hadoop目录下,修改配置文件(hadoop1操作)
1.配置slaves
把两个服务器节点放到slaves文件中。
2.配置hadoop-env .sh
在hadoop-env.sh文件中修改JAVA_HOME路径。
3.配置core-site.xml
在core-site.xml文件中添加以下内容:
<property>
<name