一.安装虚拟机
VMware12、Centos7安装,网上教程有很多,可参考
https://blog.csdn.net/sinat_35866463/article/details/77934186
网络模式我选择的是NAT
二.hadoop环境准备
1.准备
网络配置
VMware页面 → 编辑 → 虚拟网络编辑 → VMnet8
选择NAT模式
勾选使用本地DHCP服务将IP地址分配给虚拟机
可以点击NAT设置看信息,要与下面的配置信息一致
##端口转发可以了解一下: https://www.cnblogs.com/liuyuxing/p/5010880.html
最终问题解决:https://blog.csdn.net/a532672728/article/details/78640717
使用root用户登录,新添加一个hadoop用户
[root@localhost~]$useradd hadoop
[root@localhost~]$passwd hadoop
[root@localhost~]$chmod u+w /etc/sudoers
[root@localhost~]$vi /etc/sudoers #在root ALL=(ALL)ALL下添加hadoop ALL=(ALL)ALL
[root@localhost~]$chmod u-w /etc/sudoers
2.配置静态IP
设置IP
[root@localhost~]$vi /etc/sysconfig/network-scripts/ifcfg-ens33 #修改此文件
#修改内容
BOOTPROTO=static #dhcp改为static
ONBOOT=yes #开机启用本配置
IPADDR=192.168.120.128 #静态IP
GATEWAY=192.168.120.2 #默认网关
NETMASK=255.255.255.0 #子网掩码
DNS1=114.114.114.114 #DNS 配置
NM_CONTROLLED=no
IPV6INIT=no
配置完重启网络服务service network restart,测试ping baidu.com,ping不通先继续以下步骤
修改hostname
[root@localhost~]$vi /etc/hostname
#修改为
master
[root@localhost~]$hostname #输出为localhost
[root@localhost~]$hostname master #修改成功
修改默认网关配置
[root@localhost~]$vi /etc/sysconfig/network
#修改为
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=master
GATEWAY=192.168.120.2 #默认网关
修改DNS
[root@localhost~]$vi /etc/resolv.conf
#修改为
nameserver 114.114.114.114
[root@localhost~]$source /etc/resolv.conf #出错,提示no command nameserver,跳过
关闭防火墙
[root@localhost~]$systemctl stop firewalld.service #停止firewall
[root@localhost~]$systemctl disable firewalld.service #禁止firewall开机启动
配置/etc/hosts
[root@localhost~]$vi /etc/hosts
#修改为
127.0.0.1 localhost #第一行配置不能丢掉,否则Hadoop启动的时候会报错
192.168.120.128 master #主节点
192.168.120.129 slave1 #从节点1
192.168.120.131 slave2 #从节点2
重启网络服务service network restart
3.xshell工具
xshell6下载地址
https://www.jb51.net/softs/595166.html
Xshell 6 连接时报错 “The remote SSH server rejected X11 forwarding request.”
解决方法:
yum install xorg-x11-xauth -y
#然后重启网络服务
4.安装JDK
下载离线JDK压缩包,1.8版本,通过xshell中xftp工具上传至虚拟机
http://www.oracle.com/technetwork/java/javase/downloads/index.html
然后解压到自己设置的文件夹
tar -zxvf jdk-8u144-linux-x64.tar.gz -C /Java
配置环境变量
[root@localhost~]$vi /etc/profile
#添加以下内容
export JAVA_HOME=/Java/jdk1.8.0_144
export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
export CLASSPATH=$CLASSPATH:.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
#然后
[root@localhost~]$source /etc/profile
[root@localhost~]$java -version #查看是否安装成功
5.克隆虚拟机
克隆两台虚拟机作为slave1,slave2,并修改静态IP、主机名,在VMware的NAT设置中添加这两个IP转发接口
测试一下网络通不通,
ping baidu.com
ping master
ping slave1
ping slave2
6.ssh免密登录
使用hadoop用户登录master
[hadoop@localhost~]$cd /home/hadoop
[hadoop@localhost~]$ssh-keygen -t rsa #敲回车就行
[hadoop@localhost~]$cat .ssh/id_dsa.pub >> .ssh/authorized_keys #导入公钥
#先测试连接自己
[hadoop@localhost~]$ssh master
#如果提示要输入密码, 查看authorized_keys文件权限,
#执行命令 $chmod 600 .ssh/authorized_keys
#如果是属于其他用户的, 需要修改该文件给其他用户权限
#执行命令 $chmod 644 .ssh/authorized_keys
#chmod 700 .ssh
在slave1和slave2中执行命令"mkdir /root/.ssh",同样要生成秘钥公钥
然后将公钥发给master节点
slave1:
ssh-keygen -t rsa
scp .ssh/id_rsa.pub hadoop@master:/home/hadoop/.ssh/id_rsa_1.pub
在master节点执行如下操作:
cat id_rsa_1.pub >> .ssh/authorized_keys
cat id_rsa_2.pub >> .ssh/authorized_keys
scp .ssh/authorized_keys hadoop@slave1:/home/hadoop/.ssh/authorized_keys
scp /root/.ssh/authorized_keys hadoop@slave2:/home/hadoop/.ssh/authorized_keys
#测试一下
ssh master
ssh slave1
ssh slave2
三、安装hadoop
hadoop2.6.5下载地址 http://mirrors.hust.edu.cn/apache/hadoop/common/
1.解压到hadoop用户下
tar -zxvf hadoop-2.6.5.tar.gz -C /home/hadoop/
2.进入解压目录…/hadoop-2.6.5/etc/hadoop/目录修改里面的配置文件
①hadoop-env.sh和yarn-env.sh文件
修改Java环境变量,将其值改为前面Java的安装路径
export JAVA_HOME=${JAVA_HOME}
②core-site.xml
mkdir -p /home/hadoop/tmp
#然后进行如下修改
③hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/home/hadoop/data/namenode</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/home/hadoop/data/datanode</value> #建立data目录
</property>
</configuration>
④mapred-site.xml
该文件是MapReduce的配置文件,由于Hadoop中不存在该文件,首先复制一个:
cp ./mapred-site.xml.template ./hadoop/mapred-site.xml
然后将其修改为下图内容,指定由yarn作为MapReduce的程序运行框架。如果没有配置这项,那么提交的程序只会运行在 locale 模式,而不是分布式模式。
⑤yarn-site.xml
yarn-site.xml用来配置Yarn的一些信息。yarn.nodemanager.aux-services配置用户自定义服务,例如MapReduce的shuffle。yarn.resourcemanager.address设置客户端访问的地址,客户端通过该地址向RM提交应用程序,杀死应用程序等。yarn.resourcemanager. scheduler.adress设置ApplicationMaster的访问地址,通过该地址向ResourceManager申请资源、释放资源等。yarn.resourcemanager.resource-tracker.address设置NodeManager的访问地址,通过该地址向ResourceManager汇报心跳,领取任务等。yarn.resourcemanager.admin.address设置管理员的访问地址,通过该地址向ResourceManager发送管理命令等。yarn.resourcemanager.webapp.address设置对外ResourceManager Web访问地址,用户可通过该地址在浏览器中查看集群各类信息。yarn-site.xml配置信息如图
⑥创建文件slaves
touch /home/hadoop/hadoop-2.6.5/etc/hadoop/slaves
#添加如下内容
slave1
slave2
3.将hadoop文件发送给slave1和slave2
$scp -r hadoop-2.6.0/ slave1:/home/hadoop/hadoop-2.6.0
$scp -r hadoop-2.6.0/ slave2:/home/hadoop/hadoop-2.6.0
4.修改master、slave1、slave2的hadoop环境变量
vi /etc/profile
#添加以下内容
export HADOOP_HOME=/hadoop/hadoop-2.6.5
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
#然后source /etc/profile
四、测试
1.在master节点格式化namenode
hdfs namenode –format
若出现错误:java.io.IOException: Cannot create directory
三个节点上
sudo chmod -R a+w /home/hadoop/tmp
#data目录可能也需要
start-dfs.sh
start-yarn.sh
#也可用start-all.sh
#停止服务如下
stop-dfs.sh
stop-yarn.sh
#也可用stop-all.sh
3.jps显示信息
master节点输入jps
$jps
#显示如下信息
5161 SecondaryNameNode
5320 ResourceManager
4989 NameNode
slave节点输入jps
$jps
#显示如下信息
3586 NodeManager
4765 DataNode
4.web页面验证
在浏览器中输入地址http://192.168.120.128:50070检查NameNode和DataNode是否启动正常。
在浏览器中输入地址http://192.168.120.128:18088检查Yarn是否启动正常
5在master节点运行Hadoop自带的MapReduce例子验证
$cd /home/hadoop/hadoop-2.6.5/share/hadoop/mapreduce/
$hadoop jar hadoop-mapreduce-examples-2.6.5.jar pi 10 10
若出现Warning: Permanently added ‘192.168.9.10‘ (RSA) to the list of known hosts.重新跑一遍
若出现hadoop运行mapreduce作业无法连接0.0.0.0/0.0.0.0:10020 Already tried 0 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1 SECONDS)
在mapred-site.xml配置文件中添加:
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
在master上启动JobHistoryServer服务
$mr-jobhistory-daemon.sh start historyserver
再次运行实例即可