搭建前的工具准备
vmware15,centos7,jdk1.8,hadoop-3.1.3,xshell6,xftp6。
我是用的hadoop最新版,在网上看了很多都是很久前的老版本教程着实踩了很多坑…
安装虚拟机
安装过程不必多说,默认安装过来就好了。记得安装一个桌面,别最小安装。前期设置普通用户的时候建议就设置用户名为hadoop吧,密码弄个自己好记的就行。
虚拟机的系统配置
登录虚拟机后,先连接好网络,查看自己的ip,输入ifconfig命令查看。建议用xshell连接好主机进行操作,xshell界面更舒服点。用xftp传输文件。
- 修改hostname:先输入hostname查看自己的主机名,一般都是localhost。切换到root,输入
hostname master
把这台机器的主机名修改为master,这只是临时修改,重启就会失效。我们需要永久修改,输入vim /etc/sysconfig/network
按i编辑加入两行:
NETWORKING=yes #使用网络
HOSTNAME=master #设置主机名
保存退出,然后vim /etc/hosts
在下面添加代码:
***.***.***.*** master
***.***.***.*** slave1
***.***.***.*** slave2
***.***.***.*** slave3
*号处填上对应的ip地址即可,slave的数量根据你自己的意愿,这里先配置好master,slave还没创建,等master配置好然后直接克隆为slave即可。
配置好上述文件,可以手动切换下用户,一般主机名就会更改成功。
- 关闭防火墙:输入
systemctl status firewalld
查看防火墙状态。一般都是开启的,需要关闭它。输入systemctl stop firewalld
禁用防火墙。然后输入systemctl disable firewalld
永久关闭防火墙。这时候可以再输入命令查看状态。然后就是关闭selinux,selinux是Linux一个子安全机制,学习环境可以将它禁用。输入vim /etc/sysconfig/selinux
,修改一处即可:SELINUX=disabled
配置java、hadoop环境
在配置之前,先把虚拟机自带的jdk卸载。
查看自带的jdk
rpm -qa | grep gcj
把列出的文件逐一全部删除:
rpm -e <检索到的软件名>
卸载干净后,创建一个存放它们的目录,这里放在/opt/modules,因为opt是存放外部文件的目录,使用mkdir -p /opt/modules
创建好该目录。用xftp把jdk和hadoop文件传输给虚拟机后,先配置好java环境,使用如下命令解压:
tar -zxvf jdk-8u231-linux-x64.tar.gz -C /opt/modules
输入vim /etc/profile
在末尾添加
export JAVA_HOME="/opt/modules/jdk1.8.0_231"
export PATH=$JAVA_HOME/bin:$PATH
保存退出,输入source /etc/profile
使当前配置立即生效,然后就可以输入java -version
查看,若显示版本则配置成功
[hadoop@master ~]$ java -version
java version "1.8.0_231"
Java(TM) SE Runtime Environment (build 1.8.0_231-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.231-b11, mixed mode)
[hadoop@master ~]$
接下来配置hadoop,创建目录mkdir -p /opt/modules/app
,解压至指定目录:
tar -zxvf hadoop-3.1.3.tar.gz -C /opt/modules/app
输入vim /etc/profile
在末尾添加
export HADOOP_HOME="/opt/modules/app/hadoop-3.1.3"
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
保存退出,输入source /etc/profile
使当前配置立即生效,然后就可以输入hadoop version
查看,若显示版本则配置成功。
提示:在之后有需要用到这两个环境变量,输入echo ${JAVA_HOME}或者echo ${HADOOP_HOME}就可以查看相关路径了。
配置hadoop
大家可以先进入hadoop目录熟悉下结构。cd /opt/modules/app/hadoop-3.1.3
,配置文件是在hadoop目录下的etc/hadoop/下。
配置之前可以先把hadoop文件的拥有者改为hadoop用户:sudo chown –R hadoop:hadoop /opt/modules/app/hadoop-3.1.3
然后切换为hadoop用户开始配置
- 配置 hadoop-env.sh文件的JAVA_HOME参数:
找到该段代码,在下方添加export JAVA_HOME="/opt/modules/jdk1.8.0_231"
#The java implementation to use. By default, this environment
#variable is REQUIRED on ALL platforms except OS X!
#export JAVA_HOME=
- 配置 mapred-env.sh文件的JAVA_HOME参数:
在末尾添加export JAVA_HOME="/opt/modules/jdk1.8.0_231"
- 配置 yarn-env.sh文件的JAVA_HOME参数:
在末尾添加export JAVA_HOME="/opt/modules/jdk1.8.0_231"
- 配置core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:8020</value> #hdfs的api接口
</property>
<property>
<name>hadoop.tmp.dir</name> #hadoop运行时产生临时数据的存储目录
<value>/opt/modules/app/hadoop-3.1.3/data/tmp</value>
</property>
</configuration>
创建目录/data/tmp:mkdir -p data/tmp
- 配置hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:50090</value>
</property>
<property>
<name>dfs.replication</name> #设置副本个数
<value>3</value>
</property>
<property>
<name>dfs.namenode.name.dir</name> #设置namende数据存放点
<value>file:/opt/modules/app/hadoop-3.1.3/data/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name> #设置datanode数据存放点
<value>file:/opt/modules/app/hadoop-3.1.3/data</value>
</property>
</configuration>
- 配置yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<property>
<name>yarn.log-aggregation-enable</name> #开启日志聚集
<value>true</value>
</property>
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>106800</value>
</property>
- 配置mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name> #设置mapreduce任务运行在yarn上
<value>yarn</value>
</property>
<property>
<name>mapred.job.tracker</name>
<value>hdfs://master:8021</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name> #开启历史服务
<value>master</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>
</configuration>
- 配置workers:
这里提醒一点,很多教程都说配置slave,在hadoop3之后把slave改成了workers,相应配置就行。
这里是加入你搭建该集群需要的机器主机名,和前面hosts文件配置对应的。
master
slave1
slave2
slave3
到此,master的配置就是这样的了。
克隆
我是一台master三台slave所以克隆三次,操作都是一样的,选择完整克隆。克隆完成后,配置都是一样的,可以分别运行java -version和hadoop version检查。
配置:首先得到每台slave的ip地址,然后按照上面修改/etc/sysconfig/network和/etc/hosts。包括给master的hosts文件中补上slave的ip。
免密登录
所有主机都要操作:
首先在master上输入命令:ssh-keygen -t rsa
一路回车,生成公钥秘钥后,输入
ssh-copy-id master
ssh-copy-id slave1
ssh-copy-id slave2
ssh-copy-id slave3
这是讲master的公钥转发给该集群上的所有主机,其他主机就可以免密登录master,同理在其他主机上执行相同的操作,使所有主机互通。
…
可以输入ssh 主机名
检查互通情况,能直接登录即可。
开启集群
- 格式NameNode:
bin/hdfs namenode –format
- 启动HDFS:
start-dfs.sh
- 启动YARN:
start-yarn.sh
- 启动日志服务器:
sbin/mr-jobhistory-daemon.sh start historyserver
- 查看HDFS WEB界面(端口说明:旧版本是50070,新版本是9870):
http://主机ip:9870
- 查看YARN WEB界面 :
http://主机ip:8088
- 查看历史服务器:
http://主机ip:19888
测试运行
输入: bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar pi 3 100
在网页上查看结果