一、Linux安装及网络配置
1.虚拟机的选择
虚拟机选择的是VMware Workstation Pro16,下载地址https://www.vmware.com/cn.html,自行选择需要的版本,然后正版激活的方式就因钱而异了。
2.系统的选择
系统选择的是基于Linux内核的CentOS7,下载地址http://vault.centos.org/,将iso文件保存在本地任意文件夹内即可。
3.安装CentOS7
具体安装的流程推荐看这篇博客,写的非常细致:https://blog.csdn.net/qq_39135287/article/details/83993574
4.CentOS7基本设置
先完成一台虚拟机的基本配置,作为母虚拟机。
配置hadoop集群至少需要三台虚拟机,这三台虚拟机是通过对母虚拟机的克隆得到的。
4.1母虚拟机的操作
4.1.1修改网络信息
输入:
vi /etc/sysconfig/network-scripts/ifcfg-ens33
//修改以下内容
BOOTPROTO=static //静态IP地址
ONBOOT=yes //开机自动启用网络连接
//添加以下内容
IPADDR=192.168.***.1 //设置IP地址
NETMASK=255.255.255.0 //子网掩码
GATEWAY=192.168.***.2 //设置网关(网关是和IP在同一个子字段下的不会被IP使用的地址)
DNS1=192.168.1.1 //DNS设置是根据当前使用的网络决定的
IP设置的规则:三者相同(即保证以下三个地方查看到的IP的前三个网段相同)
1.CentOS7中 /etc/sysconfig/network-scripts/ifcfg-ens33
的IPADDR
2.Windows + R
输入cmd
进入命令行模式,输入ipconfig
查看到的以太网适配器 VMware Network Adapter VMnet8下的IPv4 地址
3.进入VMware依次点击编辑(E)
-虚拟网络编辑器(N)
-VMnet8(NAT模式)
-NAT设置(S)
后看到的子网IP,注意这里看到的网关即/etc/sysconfig/network-scripts/ifcfg-ens33
中GATEWAY
应该设置为的网关
4.1.2永久关闭防火墙
依次输入:
systemctl stop firewalld.service // 停止firewalld
systemctl disable firewalld.service // 禁止开机启动
输入:
vi /etc/sysconfig/selinux
将SELINUX
修改为disabled
全部修改完成后输入service network restart
重启网络服务,或者直接重启虚拟机,此时母虚拟机的基本配置就完成了。
4.2创建hadoop集群中的三台虚拟机
4.2.1将母虚拟机克隆三份
4.2.1单独配置每台虚拟机的网络(四步)
第一步:
vi /etc/sysconfig/network-scripts/ifcfg-ens33
修改IPADDR,修改IP以区分不同的虚拟机
第二步:
vi /etc/hostname
修改该主机的名称,以用名称的方式区分不同虚拟机
第三步:
vi /etc/hosts
将三台虚拟机的IP和主机名输入进去
例如:
192.168.11.111 hadoop1
192.168.11.222 hadoop2
192.168.11.333 hadoop3
第四步:
去本机C:\Windows\System32\drivers\etc\hosts
把新的虚拟机的IP和主机名添加进去,为了可以在网络上通过主机名找到对应的IP
二、Haoop集群配置
集群的三台机器为hadoop2、3、4
1.创建新用户testman
[root@hadoop1 ~]$ useradd testman
[root@hadoop1 ~]$ passwd testman
2.赋予testman用户root的权限
[root@hadoop1 ~]#vi /etc/sudoers
修改以下内容:
## Allow root to run any commands anywhere
root ALL=(ALL) ALL //原有内容
testman ALL=(ALL) ALL //添加该行
3.在/opt目录操作
在/opt目录下创建module、software文件夹,并修改所有者
[testman@hadoop101 opt]$ sudo mkdir module
[testman@hadoop101 opt]$ sudo mkdir software
[testman@hadoop1 opt]$ sudo chown testman:testman module/ software/
4.安装JDK和Hadoop
使用Xftp,将JDK和Hadoop的安装jar包放进/opt/software
中,并解压到/opt/module
中
[testman@hadoop1 software]$ tar -zxvf jdk-8u144-linux-x64.tar.gz -C /opt/module/
[testman@hadoop1 software]$ tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/
获取JDK和Hadoop的的路径
[testman@hadoop1 jdk1.8.0_144]$ pwd
/opt/module/jdk1.8.0_144
[testman@hadoop1 hadoop-3.1.3]$ pwd
/opt/module/hadoop-3.1.3
新建/etc/profile.d/my_env.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-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
保存退出并让文件生效:
[testman@ hadoop1 hadoop-3.1.3]$ source /etc/profile.d/my_env.sh
测试是否安装成功:
[testman@hadoop1 jdk1.8.0_144]$ java -version
java version "1.8.0_144"
[testman@hadoop1 hadoop-3.1.3]$ hadoop version
Hadoop 3.1.3
5.拷贝到集群机
在hadoop1上,将hadoop1中/opt/module
目录下的软件拷贝到hadoop2、3、4上
[testman@hadoop1 /]$ scp -r /opt/module root@hadoop2:/opt/module
[testman@hadoop1 /]$ scp -r /opt/module root@hadoop3:/opt/module
[testman@hadoop1 /]$ scp -r /opt/module root@hadoop4:/opt/module
在hadoop2、hadoop3、hadoop4上修改所有文件的,所有者和所有者组
sudo chown testman:testman -R /opt/module
hadoop1中/etc/profile.d/my_env.sh
文件拷贝到hadoop2、3、4的/etc/profile.d/my_env.sh
上
[testman@hadoop1 ~]$ sudo scp /etc/profile.d/my_env.sh root@hadoop2:/etc/profile.d/my_env.sh
[testman@hadoop1 ~]$ sudo scp /etc/profile.d/my_env.sh root@hadoop3:/etc/profile.d/my_env.sh
[testman@hadoop1 ~]$ sudo scp /etc/profile.d/my_env.sh root@hadoop4:/etc/profile.d/my_env.sh
分别在hadoop2、3、4上使配置文件生效
source /etc/profile.d/my_env.sh
6.准备集群分发的脚本文件xsync
[testman@hadoop2 ~]$ mkdir bin
[testman@hadoop2 ~]$ cd bin/
[testman@hadoop2 bin]$ touch xsync
[testman@hadoop2 bin]$ vi xsync
并在文件中编写如下的shell代码:
#!/bin/bash
#1 获取输入参数个数,如果没有参数,直接退出
pcount=$#
if((pcount==0)); then
echo no args;
exit;
fi
#2 获取文件名称
p1=$1
fname=`basename $p1`
echo fname=$fname
#3 获取上级目录到绝对路径
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir
#4 获取当前用户名称
user=`whoami`
#5 循环
for((host=3; host<5; host++)); do
echo ------------------- hadoop$host --------------
rsync -rvl $pdir/$fname $user@hadoop$host:$pdir
done
修改脚本 xsync 具有执行权限
[testman@hadoop2 bin]$ chmod 777 xsync
在hadoop2、3、4中安装rsync:
yum -y install rsync
注意:如果将xsync放到/home/testman/bin目录下仍然不能实现全局使用,可以将xsync移动到/usr/local/bin目录下。
7.集群部署规划
hadoop2 | hadoop3 | hadoop4 | |
---|---|---|---|
HDFS | NameNode DataNode | DataNode | SecondaryNameNode DataNode |
YARN | NodeManager | ResourceManager NodeManager | NodeManager |
8.配置
先进入
[root@hadoop132 ~]$ cd /opt/module/hadoop-3.1.3/etc/hadoop/
8.1配置核心文件
配置core-site.xml
[testman@hadoop2 hadoop]$ vi core-site.xml
文件中配置:
<!-- 指定NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop132:9820</value>
</property>
<!-- 指定hadoop数据的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-3.1.3/data</value>
</property>
8.2配置HDFS
配置hadoop-env.sh
[testman@hadoop2 hadoop]$ vi hadoop-env.sh
在文件中添加:
export JAVA_HOME=/opt/module/jdk1.8.0_144
配置hdfs-site.xml
[testman@hadoop2 hadoop]$ vi hdfs-site.xml
文件中配置:
<!-- nn web端访问地址-->
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop132:9870</value>
</property>
<!-- 2nn web端访问地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop134:9868</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
8.3配置YARN
配置yarn-env.sh
[testman@hadoop2 hadoop]$ vi yarn-env.sh
在文件中添加:
export JAVA_HOME=/opt/module/jdk1.8.0_144
配置yarn-site.xml
[testman@hadoop2 hadoop]$ vi yarn-site.xml
文件中配置:
<!-- Site specific YARN configuration properties -->
<!-- 指定MR走shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定ResourceManager的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop133</value>
</property>
8.4配置MapReduce
配置mapred-env.sh
[testman@hadoop2 hadoop]$ vi mapred-env.sh
在文件中添加:
export JAVA_HOME=/opt/module/jdk1.8.0_144
将mapred-site.xml.template
修改为mapred-site.xml
配置mapred-site.xml
[testman@hadoop2 hadoop]$ vi mapred-site.xml
文件中配置:
<!-- 指定MapReduce程序运行在Yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- 历史服务器端地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop132:10020</value>
</property>
<!-- 历史服务器web端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop132:19888</value>
</property>
8.5配置SSH无密登录(需要配置三次)
生成公钥和私钥:
[testman@hadoop2 .ssh]$ ssh-keygen -t rsa
将公钥拷贝到要免密登录的目标机器上:
[testman@hadoop2 .ssh]$ ssh-copy-id hadoop2
[testman@hadoop2 .ssh]$ ssh-copy-id hadoop3
[testman@hadoop2 .ssh]$ ssh-copy-id hadoop4
注意:
还需要在hadoop2上采用root账号,配置一下无密登录到hadoop2、hadoop3、hadoop4;
还需要在hadoop3上采用testman账号配置一下无密登录到hadoop2、hadoop3、hadoop4服务器上。
8.6配置workers
修改文件:
[testman@hadoop2 hadoop]$ vi workers
在该文件中增加如下内容:
hadoop2
hadoop3
hadoop4
8.7在集群上分发Hadoop配置文件
[testman@hadoop2 hadoop]$ xsync /opt/module/hadoop-3.1.3/