本地系统:windows 10
虚拟机:VMware Workstation Pro
虚拟系统:Centos 7.6 已配通NAT
SSH工具:XShell 6
Hadoop版本: 3.2.1
Java版本: JDK1.8
tips:若系统未配通NAT可参考
VMware——CentOS 7之NAT网络连接配置
打开虚拟机登录系统并连接SSH
记得先打开CentOS系统在进行连接,忘记ip可使用ip addr查看第二项ens中的IP。
创建hadoop用户并设定密码
如果不是root账号,需要执行su命令以登录root账号。
su # 上述提到的以 root 用户登录
如果是root账号,只需要执行
useradd -m hadoop -s /bin/bash # 创建新用户hadoop
密码设定,需输入2次,这里将密码设为hdfs2020(至少8个字符且不能过于简单,不能包含用户名),输入时密码不显示;
passwd hadoop
sudo yum install openssh-clients -y
sudo yum install openssh-server -y
输入以下指令
cd ~/.ssh/ # 若没有该目录,请先执行一次ssh localhost
ssh-keygen -t rsa # 出现输入提示,都按回车就可以
cat id_rsa.pub >> authorized_keys # 加入授权
chmod 600 ./authorized_keys # 修改文件权限
完成后,再输入ssh localhost,发现这次登录不用密码即代表成功。
sudo yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel
配置JAVA_HOME环境变量:
vim ~/.bashrc #编辑环境变量文件
输入环境变量保存并退出:
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
source ~/.bashrc # 使变量设置生效
echo $JAVA_HOME
快照
前面准备工作完成后,最好进行一次虚拟机快照。
Hadoop下载
镜像地址1:https://mirrors.cnnic.cn/apache/hadoop/common/
镜像地址2:
http://mirror.bit.edu.cn/apache/hadoop/common/
下载hadoop-x.y.z.tar.gz 这个文件。
包含 src 的则是 Hadoop 源代码,需要进行编译才可使用。
若没有安装lrzsz可先执行命令
yum install lrzsz -y
# 解压到/usr/local中
sudo tar -zxf ~/hadoop/hadoop-3.2.1.tar.gz -C /usr/local
检查Hadoop是否可用,若显示下图结果则表示正确。
cd /usr/local/hadoop-3.2.1
./bin/hadoop version
伪分布式说明
Hadoop 可以在单节点上以伪分布式的方式运行,Hadoop 进程以分离的 Java 进程来运行,节点既作为 NameNode 也作为 DataNode,同时,读取的是 HDFS 中的文件。
进行快照
此时机器上已安装好了Hadoop,为了防止配置错误找不到问题所在,需用重新安装的情况,这里进行一次快照比较保险。
配置Hadoop环境变量
vi ~/.bashrc
在文件中JAVA_HOME变量下面加入以下HADOOP_HOME内容,保存并退出。
export HADOOP_HOME=/usr/local/hadoop-3.2.1
export HADOOP_INSTALL=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
重启配置以生效。
source ~/.bashrc
<configuration>
<property>
<name>hadoop.tmp.dirname>
<value>/usr/local/hadoop-3.2.1/data/tmpvalue> property>
<property>
<name>fs.defaultFSname>
<value>hdfs://master:9000value>
property>
configuration>
② 修改hdfs-site.xml文件内容为:
<configuration>
<property>
<name>dfs.replicationname>
<value>3value>
property>
<property>
<name>dfs.permissions.enabledname>
<value>falsevalue>
property>
configuration>
③ 修改yarn-site.xml文件内容为:
<configuration>
<property>
<name>yarn.nodemanager.aux-servicesname>
<value>mapreduce_shufflevalue> property>
<property>
<name>yarn.nodemanager.vmem-check-enabledname>
<value>falsevalue>
property>
configuration>
④ 修改mapred-site.xml文件内容为:
(记得按自己安装目录修改路径)
<configuration>
<property>
<name>mapreduce.framework.namename>
<value>yarnvalue>
property>
<property>
<name>yarn.app.mapreduce.am.envname>
<value>HADOOP_MAPRED_HOME=/usr/local/hadoop-3.2.1/value>
property>
<property>
<name>mapreduce.map.envname>
<value>HADOOP_MAPRED_HOME=/usr/local/hadoop-3.2.1value>
property>
<property>
<name>mapreduce.reduce.envname>
<value>HADOOP_MAPRED_HOME=/usr/local/hadoop-3.2.1value>
property>
configuration>
⑤ 配置环境变量 hadoop-env.sh
在第54行左右,将 # export JAVA_HOME = 修改为:
export JAVA_HOME= /usr/lib/jvm/java-1.8.0-openjdk/
⑥ 配置环境变量 yarn-env.sh
在适当的位置手动加入JAVA_HOME路径
⑦ 配置/etc/profile
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
export PATH=$PATH:$JAVA_HOME/bin
export HADOOP_HOME=/usr/local/hadoop-3.2.1
export HADOOP_PREFIX=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_YARN_HOME=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
记得 执行 source .profile 让配置立即生效。
vim /etc/hosts
在Master主机下ping worker1和 worker2,若结果如下图则代表修改hosts完成。
Tips:使用crtl + c 或 crtl + z 来结束ping命令,否则会一直ping下去。
# Master主机下
hostnamectl set-hostname master
# 两台Worker主机下
hostnamectl set-hostname worker1
hostnamectl set-hostname worker2
# 查看修改后hostname可直接输入
hostname
#关闭防火墙指令
systemctl stop firewalld.service
#防火墙不自启动
systemctl disable firewalld.service
#查看防火墙状态指令两个选一个用
systemctl status firewalld
ssh-copy-id worker1
ssh-copy-id worker2
#测试SSH免密连接
ssh worker1
ssh worker2
# 修改workers文件, Hadoop2.X对应的是slaves文件
vim /usr/local/hadoop-3.2.1/etc/hadoop/workers
#添加内容
worker1
worker2
# 切换账户
su hadoop
# 编辑文件
vim ~/.bash_profile
# 添加以下内容到文件末尾,注意修改成自己的路径
#HADOOP
export HADOOP_HOME=/usr/local/hadoop-3.2.1
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
# 变量生效
source ~/.bash_profile
# 路径为core-site.xml配置文件中
#hadoop.tmp.dir指定的目录
mkdir -p /usr/local/hadoop-3.2.1/data/tmp
# hadoop用户下输入,若为产生Exception提示则成功格式化
# 建议成功格式化后进行虚拟机快照
hdfs namenode -format
在格式化文件系统时产生了异常,已解决。
主要是core-site.xml路径问题导致的异常,详情请看第六大项第一点。
# 进入Hadoop主目录
cd /usr/local/hadoop-3.2.1/
# 启动命令
sbin/start-all.sh
# jps命令查看运行情况
jps
[hadoop@master hadoop-3.2.1]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar pi 1 1
[hadoop@master hadoop-3.2.1]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar pi 3 3
这里用pi 1 1 和 pi 3 3来做结果检验,如果想要精度高一点可以使用pi 10 10
Tips:若出现未找到主类或加载主类失败异常,请看第六大点第五小点。
core-site.xml与创建的数据目录不符合导致格式化失败
解决方法:检查core-site.xml中设置的目录和创建数据文件目录时的目录是否一致。
不一致则需修改路径或重新创建目录,所有主机都需要进行相同操作。
master也作为DataNode了
正常来说Master应该没有DataNode,想起在配置worker时没有删除掉localhost一项,可能是这个导致的。
解决方法:删除worker配置文件中localhost后,重新格式化并重新启动,其他两个worker节点的localhost不影响可不进行修改。
重新格式化前需关闭hadoop服务。
#进入Hadoop主目录后执行
sbin/stop-all.sh
vim /etc/hosts
原因:
# 获取hadoop classpath
hadoop classpath
<property>
<name>yarn.application.classpathname>
<value>/usr/local/hadoop-3.2.1/etc/hadoop:/usr/local/hadoop-3.2.1/share/hadoop/common/lib/*:/usr/local/hadoop-3.2.1/share/hadoop/common/*:/usr/local/hadoop-3.2.1/share/hadoop/hdfs:/usr/local/hadoop-3.2.1/share/hadoop/hdfs/lib/*:/usr/local/hadoop-3.2.1/share/hadoop/hdfs/*:/usr/local/hadoop-3.2.1/share/hadoop/mapreduce/lib/*:/usr/local/hadoop-3.2.1/share/hadoop/mapreduce/*:/usr/local/hadoop-3.2.1/share/hadoop/yarn:/usr/local/hadoop-3.2.1/share/hadoop/yarn/lib/*:/usr/local/hadoop-3.2.1/share/hadoop/yarn/*value>
property>
关闭服务并重新开启服务。
# hadoop主目录下,hadoop账户下
bsin/stop-all.sh
bsin/start-all.sh
解决方法:
查看master节点的clusterID并覆盖worker节点的clusterID,完成后关闭服务并重启。
[hadoop@worker2 hadoop-3.2.1]$ cd data/tmp/dfs/data/current/
[hadoop@worker2 current]$ vim VERSION
若仍不行就直接删除三台机器core-site.xml中定义的dfs.data.dir在本地系统的路径(此教程为/usr/local/hadoop-3.2.1/data/tmp),然后重新格式化文件系统。