以下搭建所需环境和资源包为
使用虚拟机安装3个CentOS7的主机模拟服务器,分别为master、slave1、slave2
如果通过克隆虚拟机等设置的虚拟机需要配置ip和mac地址,使mac地址不同(可以通过删除当前网卡并添加新网卡来完成)
网卡名称
一致性网络设备命名,在家用设备中可以区分自己用的是哪种网卡,在服务器中就比较麻烦,网卡名字不同就很难进行批量化操作,所以我们要对网卡名称统一改为eth0、eth1、eth2…
vim /etc/default/grub
# 在第六行添加biosdevname=0和net.ifnames=0
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet biosdevname=0 net.ifnames=0"
GRUB_DISABLE_RECOVERY="true"
# 执行此命令,使启动文件读取
grub2-mkconfig -o /boot/grub2/grub.cfg
# 重启
reboot
网卡命名规则受biosdevname和net.ifnames两个参数的影响
biosdevname | net.ifnames | 网卡名 | |
---|---|---|---|
默认 | 0 | 1 | ens32 |
组合1 | 1 | 0 | em1 |
组合2 | 0 | 0 | eth0 |
若原网卡名为ifcfg-ens32,修改为ifcfg-eth0后需要在/etc/sysconfig/network-scripts/目录中新增ifcfg-eth0文件设置网络信息(可以复制原ifcfg-ens32文件修改文件名)
# master
vim /etc/hostname
master
# slave1
vim /etc/hostname
slave1
# slave2
vim /etc/slave2
slave2
# master、slave1、slave2
vim /etc/hosts
192.168.180.10 master
192.168.180.11 slave1
192.168.180.12 slave2
# 临时关闭防火墙
systemctl stop firewalld.service
# 永久关闭防火墙
systemctl disable firewalld.service
# 临时关闭selinux
setenforce 0
# 永久关闭selinux
vim /etc/selinux/config
SELINUX=disabled
# master、slave1、slave2生成密钥
ssh-keygen -t rsa
# master生成公钥
cat /root/.ssh/id_rsa.pub > /root/.ssh/authorized_keys
# 修改权限
chmod 600 /root/.ssh/authorized_keys
# 将slave1和slave2的公钥复制到master节点
ssh slave1 cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
ssh slave2 cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
# 复制公钥到slave1和slave2
scp /root/.ssh/authorized_keys root@slave1:/root/.ssh/authorized_keys
scp /root/.ssh/authorized_keys root@slave2:/root/.ssh/authorized_keys
# 免密SSH测试,在master执行
ssh slave1 ip addr
ssh slave2 ip addr
Hadoop集群安装需提前在Linux中安装java
注意,如果不是minimal(最小化)安装的,有可能出现openjdk已安装的情况,会导致到软件冲突,我们在这里先将openjdk进行卸载
# 查看是否有rpm包安装的jdk
rpm -qa | grep java
# 卸载该rpm包的jdk, 再次检查时已经不存在
rpm - e - -nodeps java-1.8.0-openjdk-1.8.0.131.b12-1.el7_6.x86_64
# 解压JDK包
cd /usr/local/src
tar zxvf jdk-8u221-linux-x64.tar.gz
# 配置环境变量,
vim ~/.bashrc
# 在配置最后加入以下内容
export JAVA_HOME=/usr/local/src/jdk1.8.0_221
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
# 复制环境变量到其他节点
scp ~/.bashrc root@slave1:~/
scp ~/.bashrc root@slave2:~/
# 复制JDK包到其他节点
scp -r /usr/local/src/jdk1.8.0_221 root@slave1:/usr/local/src/
scp -r /usr/local/src/jdk1.8.0_221 root@slave2:/usr/local/src/
# 重新加载环境变量
source ~/.bashrc
# 测试是否配置成功
java -version
# 解压Hadoop包
cd /usr/local/src
tar xvzf hadoop-2.6.5.tar.gz
# 修改配置文件,在第26行添加Java的环境变量, 将25行注释
cd hadoop-2.6.5/etc/hadoop/
vim hadoop-env.sh
export JAVA_HOME=/usr/local/src/jdk1.8.0_221
# 修改配置文件,在第24行添加Java的环境变量
vim yarn-env.sh
export JAVA_HOME=/usr/local/src/jdk1.8.0_221
# 修改配置文件,添加从节点主机名
vim slaves
slave1
slave2
# 添加RPC配置
vim core-site.xml
<configuration>
<!-- HDFS的默认访问路径,也是NameNode的访问地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<!-- Hadoop数据文件的存放目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/src/hadoop-2.6.5/tmp/</value>
</property>
</configuration>
# 添加DFS配置
vim hdfs-site.xml
<configuration>
<!-- SecondaryNode主机及端口号 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:9001</value>
</property>
<!-- NameNode节点数据在本地文件系统的存放位置 -->
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/src/hadoop-2.6.5/dfs/name</value>
</property>
<!-- DataNode节点数据在本地文件系统的存放位置 -->
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/src/hadoop-2.6.5/dfs/data</value>
</property>
<!-- 文件在HDFS系统中的副本数 -->
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
</configuration>
# 添加MR配置
cp mapred-site.xml.template mapred-site.xml
vim mapred-site.xml
<configuration>
<!-- 指定任务执行框架为YARN -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- 指定map的memory -->
<property>
<name>mapreduce.map.memory.mb</name>
<value>1536</value>
</property>
<!-- 指定动 JVM 虚拟机时,传递给虚拟机的启动参数,表示Java程序可以使用的最大堆内存数 -->
<property>
<name>mapreduce.map.java.opts</name>
<value>-Xmx1024M</value>
</property>
<!-- 指定reduce的memory -->
<property>
<name>mapreduce.reduce.memory.mb</name>
<value>3072</value>
</property>
<!-- 指定动 JVM 虚拟机时,传递给虚拟机的启动参数,表示Java程序可以使用的最大堆内存数 -->
<property>
<name>mapreduce.reduce.java.opts</name>
<value>-Xmx2560M</value>
</property>
</configuration>
# 添加资源管理配置
vim yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<!-- 日志聚集功能 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 日志保留时间设置7天 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
<!-- NodeManager上运行的附属服务,配置成mapreduce_shuffle,才可运行MapReduce程序 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<!-- ResourceManager对客户端暴露的地址。客户端通过该地址向RM提交应用程序,杀死应用程序等 -->
<property>
<name>yarn.resourcemanager.address</name>
<value>master:8032</value>
</property>
<!-- ResourceManager对ApplicationMaster暴露的访问地址。ApplicationMaster通过该地址向RM申请资源、释放资源等 -->
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:8030</value>
</property>
<!-- ResourceManager对NodeManager暴露的地址.。NodeManager通过该地址向RM汇报心跳,领取任务等 -->
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:8035</value>
</property>
<!-- ResourceManager对管理员暴露的访问地址。管理员通过该地址向RM发送管理命令等 -->
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>master:8033</value>
</property>
<!-- ResourceManager对外Web UI地址。用户可通过该地址在浏览器中查看集群各类信息 -->
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master:8088</value>
</property>
<!-- 单个可申请的最小内存资源量(MB) -->
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>2048</value>
</property>
<!-- 是否开启物理内存检查 -->
<property>
<name>yarn.nodemanager.pmem-check-enabled</name>
<value>false</value>
</property>
<!-- 是否开启虚拟内存检查 -->
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
</configuration>
# 创建临时目录和文件目录
mkdir /usr/local/src/hadoop-2.6.5/tmp
mkdir -p /usr/local/src/hadoop-2.6.5/dfs/name
mkdir -p /usr/local/src/hadoop-2.6.5/dfs/data
# 配置环境变量,在配置最后加入
vim ~/.bashrc
export HADOOP_HOME=/usr/local/src/hadoop-2.6.5
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
# 复制环境变量到从节点
scp -r ~/.bashrc root@slave1:~/
scp -r ~/.bashrc root@slave2:~/
# 复制Hadoop包到从节点
scp -r /usr/local/src/hadoop-2.6.5 root@slave1:/usr/local/src/
scp -r /usr/local/src/hadoop-2.6.5 root@slave2:/usr/local/src/
# 重新加载环境变量
source ~/.bashrc
# 格式化Namenode
hadoop namenode -format
# 提示下列内容即是成功完成格式化
common.Storage: Storage directory /usr/local/src/hadoop-2.6.5/dfs/name has been successfully formatted
# 启动集群
/usr/local/src/hadoop-2.6.5/sbin/start-all.sh
# 查看服务进程,master、slave1、slave2
jps
# master:ResourceManager-Namenode-SecondaryNameNode
# slave:NodeManager-DataNode
# 测试
# 网页控制台(需要修改本地hosts文件 添加主机记录)
Windows C:\Windows\System32\drivers\etc\hosts
Linux /etc/hosts
Mac /etc/hosts
192.168.180.10 master
192.168.180.11 slave1
192.168.180.12 slave2
# 浏览器访问
http://master:8088/cluster