注:使用VMware+Centos7
安装步骤
安装Centos7虚拟机,参考网上教程,安装时网络模式选择NAT方式
-
虚拟机左上方,编辑-》虚拟网络编辑器,选择VMnet8NAT模式,设置子网IP以及子网掩码,按心情配置即可,随后在DHCP设置中将起始IP地址和结束IP地址根据配置的子网IP和子网掩码进行填写即可(使用DHCP方式的话,不用在系统中设置静态IP,不过要把DHCP的租用时间尽可能的设置长一点,保证IP短时间不会改变),点击确定。
-
假设安装好了一台虚拟机,即可利用VMware提供的克隆功能,克隆出剩余的几台机器,不用再单独安装,十分方便,具体操作,右键已经安装的虚拟机->管理->克隆,至此已经有了以下虚拟机(命名随意):
打开四台虚拟机,首先是系统配置,添加epel源,更新,添加hadoop用户,添加sudo权限
#sudo su 用root登陆或者切换为root账户
yum install epel-release
yum update -y
yum install git curl vim wget -y
useradd hadoop -s /bin/bash -d /home/hadoop -m -G wheel
passwd hadoop
-
配置hosts, 演示所用四台虚拟机的IP地址分别为:
- master: 192.168.175.5
- slave1: 192.168.175.6
- slave2: 192.168.175.4
- client: 192.168.175.7
首先要修改每个机器的机器名:
vim /etc/sysconfig/network
添加 "HOSTNAME=master",其余三台机器类似,分别添加"HOSTNAME=机器名",之后在每台机器上执行
echo " 192.168.175.5 master 192.168.175.6 slave1 192.168.175.4 slave2 192.168.175.7 client " >> /etc/hosts
添加SSH信任,免密登录(master上操作)
su hadoop
#切换为hadoop用户
ssh-keygen -t rsa
#生成用户级公密钥
#按3下回车,完成密钥生成
#开启ssh服务(四台机器都要开启,不然没法连过去)
service sshd start
#关闭防火墙
service iptables stop
#配置信任公钥
cd ~/.ssh
cp id_rsa.pub authorized_keys
chmod 400 authorized_keys
#添加服务器的服务端公钥
ssh master ssh node1 ssh node2
#可以不用登陆,只要出现提示第一次连接添加密钥那一步,输入yes,就可以退出
#建立信任关系
#第一次scp需要输入其余服务器hadoop账户的密码
scp -r ~/.ssh slave1:~
scp -r ~/.ssh slave2:~
scp -r ~/.ssh client:~
#最后切换回root权限
exit(至此,四台机器之间可ssh免密登录,随意切换)
-
接下来安装所需软件 JDK1.8、scala2.11.11、Spark2.2.0、Hadoop 2.7.4
首先下载对应包,在root用户的家目录下执行
mkdir soft
cd soft
wget 相应包文件链接
或者为了方便, 直接用本机下载,完事scp到虚拟机上
接着把soft整个目录copy到slave1 和slave2机器上,client不需要,client只是我们模拟提交代码的客户端机器。
以下操作master、slave1、slave2都需要进行安装JDK
mkdir -p /usr/local/java
tar zxvf jdk-8u151-linux-x64.tar.gz -C /usr/local/java
安装Scala
tar zxvf scala-2.11.11.tgz -C /opt
ln -s /opt/scala-2.11.11 /usr/local/scala
安装hadoop
tar zxvf hadoop-2.7.4.tar.gz -C /opt
ln -s /opt/hadoop-2.7.4 /usr/local/hadoop
安装Spark
tar zxvf spark-2.2.0-bin-hadoop2.7.tgz -C /opt
ln -s /opt/spark-2.2.0-bin-hadoop2.7 /usr/local/spark
chown hadoop:hadoop /opt -R
配置环境变量
执行
vim /etc/bashrc
在末尾添加:
#JDK
export JAVA_HOME="/usr/local/java/jdk1.8.0_151"
export CLASSPATH=".:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar"
export PATH="$PATH:$JAVA_HOME/bin"
#scala
export SCALA_HOME="/usr/local/scala"
export PATH="$PATH:$SCALA_HOME/bin"
#hadoop
xport HADOOP_HOME="/usr/local/hadoop"
export HADOOP_CONF_DIR="$HADOOP_HOME/etc/hadoop"
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"
#spark
export SPARK_HOME="/usr/local/spark"
export PATH="$PATH:$SPARK_HOME/bin"
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib:$HADOOP_COMMON_LIB_NATIVE_DIR"
之后执行
source /etc/bashrc
查看jdk版本
java -version
注意有些系统会自带openjdk,这时执行上述命令会显示openjdk的版本,修改系统默认jdk:
cd /usr/bin
ln -s -f /usr/local/java/jdk1.8.0_151/jre/bin/java
ln -s -f /usr/local/java/jdk1.8.0_151/bin/javac
查看scala版本
scala -version
查看hadoop版本
hadoop version
-
Hadoop分布式配置
分布式模式需要修改hadoop 中的5个配置文件:slaves、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml。- slaves
文件 slaves,将作为 DataNode 的主机名写入该文件,每行一个,默认为 localhost,所以在伪分布式配置时,节点既作为 NameNode 也作为 DataNode。
这里我们让 Master 节点仅作为 NameNode 使用,slave1和slave2作为DataNode
cd /usr/local/hadoop/etc/hadoop
echo "slave1 slave2" > /usr/local/hadoop/etc/hadoop/slaves
- core-site.xml
<configuration>
<-- 指定HDFS namenode 的通信地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:8020</value>
</property>
<-- 指定hadoop运行时产生文件的存储路径 -->
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/tmp</value>
</property>
</configuration>
- hdfs-site.xml
<configuration>
<-- 设置hdfs副本数量 -->
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<-- 设置namenode存放的路径 -->
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/name</value>
</property>
<-- 设置datanode存放的路径 -->
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/data</value>
</property>
</configuration>
- mapred-site.xml
执行
mv /usr/local/hadoop/etc/hadoop/mapred-site.xml.template /usr/local/hadoop/etc/hadoop/mapred-site.xml
打开mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
- yarn-site.xml
<configuration>
<-- 设置 resourcemanager 在哪个节点-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<-- reducer取数据的方式是mapreduce_shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
- slaves
配置同步
su hadoop
scp -r /usr/local/hadoop/etc/hadoop/* slave1:/usr/local/hadoop/etc/hadoop
scp -r /usr/local/hadoop/etc/hadoop/* slave2:/usr/local/hadoop/etc/hadoop
启动Hadoop(master)
hadoop namenode -format
start-dfs.sh
start-yarn.sh
mr-jobhistory-daemon.sh start historyserver
使用jps查看状态
jps
- http://master:50070 查看 hadoop 集群情况
- http://master:19888 查看 JobHistory 中的任务执行历史信息
- http://slave1:8042 可以查看 slave1中 NodeManager 运行状态
- http://slave2:8042 可以查看 slave2中 NodeManager 运行状态
- 常见错误
hadoop web50070端口界面打开之后没有找到dataNode,显示数量为0,,这时候检查一下自己的防火墙,centos7默认用的是firewall,把防火墙关掉。
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动