文章目录
前言:找了全网关于mac配置Hadoop大数据框架,很多都不不全面,有的还没有效果,对于新手小白来说极其不友好,因此特地花费了几天时间整理Hadoop环境搭建教程,保证一看就会,干货内容很多,请耐心学习!
1、准备工作
请安装以下几个软件
VMware
Centos 7
安装链接:
VMware Fusion12安装链接
Centos安装链接
2、静态IP地址配置
想为虚拟机配置固定ip,需要设置网关,但是mac版的vmware workstation没有Virtual Network Editor,所以不能直接查看到,需要在终端执行如下命令( 不要漏掉VMware后的\ )
cd /Library/Preferences/VMware\ Fusion/vmnet8
然后输入ls,你会看到几个文件
接着使用vim操作打开nat.conf文件就可以查看到vmnet8的网关地址,输入命令为:
vi nat.conf
结果如下图所示:
然后就找到vmnet8的的网关地址
ip = 172.16.55.2
netmask = 255.255.255.0
然后使用 管理者权限登陆虚拟机,并且通过vim操作进入文件,操作命令为:
vi /etc/sysconfig/network-scripts/ifcfg-ens33
会出现如下结果
下面我们需要修改几个配置参数,从而达到使用静态IP地址的目的,具体如下图:
其中,
- 将BOOTPROTO=“dhcp” 改为BOOTPROTO="static"
- 将ONBOOT=“no” 改为ONBOOT="yes"
- 定义IPADDR的值:IPADDR的选取是不唯一的,需要在一定范围内选取,在终端输入:
vi dhcpd.conf
出现如下结果:
也就是说,你设置的静态IP地址必须在如图方框的范围内才有效,我这里选取的IPADDR=172.16.155.130,当然也可以是其他的数值(按:q退出vim)
- GATEWAY和NETMASK设置就是咱们之前获取的vmnet8的的网关地址中的ip和netmask,
GATEWAY = 172.16.55.2
NETMASK = 255.255.255.0
- 获取DNS,则是在mac电脑中的系统偏好设置–>网络–>高级–>DNS
注意:这里的DNS配置不是唯一的,你可以配置多个DNS,建议在配置一个百度的公共DNS,以便更换了的无线网络也可以响应。
DNS2=180.76.76.76
OK,走到这里咱们就把静态IP地址给设置好了,然后咱们来检验一下,是否配置成功
在虚拟机上输入[ 必须要restart一下,才有效果]
service network restart
然后输入
ping www.baidu.com
看看是否出现下面这个画面
如果出现这个响应,说明已经静态IP地址配置成功(按command+c停止响应)
3、关闭防火墙
关闭防火墙的目的是为了使得服务器与服务器之间可以互通,否则就无法进行通信了
操作命令:
systemctl status firewalld #检查防火墙状态
systemctl stop firewalld # 关闭防火墙
systemctl disable firewalld.service
出现removed…信息就代表关闭防火墙了,当然也可以再通过systemctl status firewalld命令,如果看到active状态变为inactive(dead)就表示已经关闭了
4、修改主机名称
在虚拟机上配置主机名,可以看到默认名称为 localhost lib,这里只需要输入命令:hostnamectl set-hostname hadoop100
其中**“hadoop100”**是我自己取的名称,你们可以自己随意取名
然后使用 “reboot”命令重启虚拟机,使得修改命令生效
可以看到我这里的主机名已经修改成功了,然后再次登陆管理员账号( “reboot”)即可
5、编辑hosts文件
在虚拟机上输入命令:vi /etc/hosts
会看到
然后同样用vi操作( 输入“i”,进入编辑模式,然后插入IP地址和对应的名称,按esc退出,最后输入“:wq”保存结果即可),参考一下我的命名格式:
我这里暂时新建了5个虚拟机IP地址,如果想新建更多的虚拟机,方法是一样的;然后,每一个IP地址只要不同就可以了,其中第一个IP是我们一开始已经确定好的,就不要修改了,剩下的IP建议 按顺序依次往下添加,至于右边的名称可以自己修改。
6、虚拟机克隆
为了使上面的步骤有效起来,这里我们需要克隆3台虚拟机,我分别命名为hadoop101、hadoop102、hadoop103。
注意: 克隆虚拟机一定要将虚拟机关闭
关闭虚拟机的命令【手动关闭也可以】
init 0
然后直接在虚拟机资源库中对主机hadoop100, 右击,点击“创建完整克隆”,再重新命名一下即可,如图所示
注:我这里已经提前创建好克隆机hadoop101、hadoop102、hadoop103了,因此会出现4台服务器,正常按我的操作的话,这一步只能看到hadoop101。
由于克隆机与主机是完全一样的,因此需要修改3个参数:ip地址、uuid和hostname,
依然是先root登陆,输入密码,然后输入
vi /etc/sysconfig/network-scripts/ifcfg-ens33
只需要修改图中圈中的部分即可
(1)IP地址修改
直接和咱们之前hosts文件中设置的一样即可,因为我这里是hadoop102,所以需要将IPADDR修改为 IPADDR=172.16.55.132
(2)uuid修改
需要先推出vi编辑器,然后在虚拟机输入命令uuidgen
就会产生新的uuid,如图所示
然后按照这个新生成的uuid,修改原来ifcfg-ens33文件下的uuid即可,最终的修改结果如图所示
(3)修改hostname
具体过程和之前讲解的一样,输入hostnamectl set-hostname hadoop102
最后记得reboot一下即可,然后重新登陆就会发现hostname变成了hadoop102了
远程连接虚拟机(远程服务器)
由于mac电脑自带ssh命令,因此就不需要在下载Xshell软件了,还是省了一些事情的。
下面演示一下如何在本地终端连接虚拟机,结果如图。
如果出现这个界面就代表我们已经实现远程操作虚拟机了,这样的话咱们就摆脱在VMware上操作虚拟机,还是很方便的。
注意,第一次输入这样的命令可能不是这个界面,会多一步让你输入“yes/no”的步骤,咱们输入“yes”即可。然后这里的IP地址就是咱们之前/etc/hosts文件的添加的IP地址,需要保持一致。
7、SSH免密登陆
第一步:生成密钥
在三个虚拟机上均要执行下面的操作,这里以hadoop100为例,依次输入命令ssh-keygen -b 1024 -t rsa
,然后连续按三个Enter键即可。
之后需要在不同虚拟机进行免密登陆的话,就需要多次设置,分别为:
**
hadoop100 免密登陆hadoop101和hadoop102、hadoop103
hadoop101 免密登陆hadoop102、hadoop103
hadoop102 免密登陆hadoop101**
…
下面以hadoop100免密登陆hadoop101为例,其余同理
在hadoop100虚拟机上输入命令
cd .ssh
ssh-copy-id hadoop101
yes
密码
最后测试一下是否可以免密登陆,我这里是在hadoop100免密登陆hadoop101,命令如下ssh hadoop101
,出现如下结果就代表登陆免密成功
8、搭建虚拟机上的Hadoop环境
准备工作
需要准备jdk以及对应的hadoop版本,我这里使用的是Hadoop3.x的版本,这里提供网址供你们自行下载:
jdk1.8下载
hadoop3.1.4下载
注意:下载的是压缩包文件(tar.gz结尾)
第一步:在hadoop100上的opt文件夹下创建两个module和software文件夹,如图所示:
注意:我这里是在根目录“/”下创建的,所以没有在opt前添加“/”
第二步:利用文件传输工具()将刚才下载的好的两个文件拖到software文件夹下,windows使用Xftp,mac我这里使用的是FileZilla下载好之后需要登陆你的虚拟机账号,然后进行拖拽即可
9、配置jdk和Hadoop
(1)安装jdk及配置其环境变量
在software目录下输入命令:
tar -zxvf jdk-8u212-linux-x64.tar.gz -C /opt/module/
注意:如果你下载的jdk是其他版本的话,就需要重新改一下名字,其余命令均可不变
配置jdk环境变量
在根目录/下进入jdk1.8.0_212文件夹中,然后进入profile.d文件夹中,创建my_env.sh文件,具体输入命令:
cd /etc/profile.d/
vi my_env.sh
然后在vi编辑中,写入:
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_212
export PATH=$PATH:$JAVA_HOME/bin
退出保存后,输入命令source /etc/profile
,就配置好jdk的环境变量啦
输java -version
,
如果出现上述结果就表示jdk环境就搭建好啦
(2)安装hadoop及配置环境变量
在software目录下,输入命令解压hadoop文件
tar -zxvf hadoop-3.1.4.tar.gz -C /opt/module/
注意:如果你下载的hadoop是其他版本的话,就需要重新改一下hadoop名字,其余命令均可不变
然后进入hadoop3.1.4(/opt/module/hadoop3.1.4
)文件夹中,输入命令进入vi编辑器中
vi /etc/profile.d/my_env.sh
在vi编辑器中输入配置环境变量的命令:
#HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-3.1.4
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
保存退出,然后输入命令source /etc/profile
,就配置好hadoop环境变量啦,输入hadoop
命令,如果出现
就意味着配置好hadoop环境变量了
10、scp、xsync集群分发脚本
(1) scp命令(安全拷贝)
实现服务器与服务器之间的数据拷贝
这里以以复制hadoop100–>其他服务器上为例,在hadoop100服务器中进入module文件夹下,输入命令
scp -r jdk1.8.0_212/ root@hadoop101:/opt/module/
表示将hadoop100上的jdk复制到hadoop101中的module里
scp -r /opt/module/* root@hadoop101:/opt/module/
表示将hadoop100上module文件夹中的所有内容的拷贝到hadoop101服务器中的module里
同理使用上述命令可以将hadoop100上module里的所有内容拷贝到其他服务器中,大家自己操作一下,这里就不做记录啦。
(2)rsync 远程同步工具
rsync用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点
首先在hadoop101、hadoop102、hadoop103上均要安装xsync
安装命令:
yum -y install rsync
安装完成之后输入echo $PATH
看一下你的全局变量有哪些:
找到我图中圈出来的全局变量,然后在/root/bin目录下创建xysnc文件,操作如下:
进入vi编辑器后,将以下代码粘贴到xsync文件中,
#!/bin/bash
#1. 判断参数个数
if [ $# -lt 1 ]
then
echo Not Enough Arguement!
exit;
fi
#2. 遍历集群所有机器
for host in hadoop101 hadoop102 hadoop103
do
echo ==================== $host ====================
#3. 遍历所有目录,挨个发送
for file in $@
do
#4. 判断文件是否存在
if [ -e $file ]
then
#5. 获取父目录
pdir=$(cd -P $(dirname $file); pwd)
#6. 获取当前文件的名称
fname=$(basename $file)
ssh $host "mkdir -p $pdir"
rsync -av $pdir/$fname $host:$pdir
else
echo $file does not exists!
fi
done
done
然后输入chmod 777 xysnc
修改xysnc文件权限,可以发现xysnc颜色变成绿色的就代表这是可执行文件。
测试xsync脚本
[root@hadoop101 etc]# xsync bin/
只要不报错,基本就是没问题了,这个脚本接下来需要用到!
11、修改核心配置文件
注意:
- NameNode和SecondaryNameNode不要安装在同一台服务器
- ResourceManager也很消耗内存,不要和NameNode、SecondaryNameNode配置在同一台机器上
本文按照以下表格分配的服务器位置安装
hadoop101 | hadoop102 | hadoop103 | |
---|---|---|---|
HDFS | NameNode DataNode | DataNode | DataNode SecondaryNameNode |
YARN | NodeManager | ResourceManager NodeManager | NodeManager |
这里hadoop核心配置文件包括四个:core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml
这四个配置文件存放在 $HADOOP_HOME/etc/hadoop 这个路径上,以hadoop101为例
(1) core-site.xml配置
使用vi编辑器打开core-site.xml
在配置文件里输入:
<configuration>
<!-- 指定 NameNode 的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop101:8020</value>
</property>
<!-- 指定 hadoop 数据的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-3.1.4/data</value>
</property>
<!-- 配置 HDFS 网页登录使用的静态用户为 root -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>root</value>
</property>
</configuration>
(2) hdfs-site.xml配置
同样的方法,使用vi编辑器进入hdfs-site.xml ,输入:
<configuration>
<!-- nn web端访问地址-->
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop101:9870</value>
</property>
<!-- 2nn web 端访问地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop103:9868</value>
</property>
</configuration>
(3) yarn-site.xml配置
同样的方法,使用vi编辑器进入yarn-site.xml ,输入:
<configuration>
<!-- 指定 MR 走 shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定 ResourceManager 的地址--> <property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop102</value>
</property>
<!-- 环境变量的继承 -->
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
</property>
</configuration>
(4) mapred-site.xml配置
同样的方法,使用vi编辑器进入mapred-site.xml ,输入:
<configuration>
<!-- 指定 MapReduce 程序运行在 Yarn 上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=/opt/module/hadoop-3.1.4</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=/opt/module/hadoop-3.1.4</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=/opt/module/hadoop-3.1.4</value>
</property>
<!-- 历史服务器端地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop101:10020</value>
</property>
<!-- 历史服务器 web 端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop101:19888</value>
</property>
</configuration>
注:这里一定要全部按照我标注的配置,不能漏掉任何一个,且配置过程中一定要检查是否粘贴的出错,如果你的hadoop版本和我的不一致也要按对应的修改!
12、启动集群
(1)配置workers
在/opt/module/hadoop-3.1.4/etc/hadoop目录下,输入vi workers
将里面的localhost换成如下:
注:hadoop101、hadoop102、hadoop103周围均不可以有空格
然后分发一下修改好的workers文件,命令为xsync workers
(2)启动集群
(i)如果集群是第一次启动,需要在 hadoop101节点格式化 NameNode
[root@hadoop101 hadoop-3.1.4]# hdfs namenode -format
(ii) 启动 HDFS
[root@hadoop101 hadoop-3.1.4]# sbin/start-dfs.sh
如果这里报错
Starting namenodes on [hadoop101]
ERROR: Attempting to operate on hdfs namenode as root
ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation.
Starting datanodes
ERROR: Attempting to operate on hdfs datanode as root
ERROR: but there is no HDFS_DATANODE_USER defined. Aborting operation.
就需要配置一个叫hadoop-env.sh文件,
在/etc/hadoop/hadoop-env.sh 目录下,输入
[root@hadoop101 hadoop]# vim hadoop-env.sh
将下面的命令添加到hadoop-env.sh
里,位置无所谓,我是添加在文件末尾的
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
这样启动[root@hadoop101 hadoop-3.1.4]# sbin/start-dfs.sh
就不会报错了!
然后输入[root@hadoop101 hadoop-3.1.4]# jps
检测一下,如果出现DataNode和NameNode说明配置成功
(iii)在配置了 ResourceManager 的节点(hadoop102 )启动 YARN
[root@hadoop102 hadoop-3.1.4]# sbin/start-yarn.sh
如果中间报错Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password)
或者是缺少NodeManager
说明该服务器没有设置和其他服务器之间的免密登陆,需要重新设置一下。
[root@hadoop102 ~]# ssh-copy-id hadoop101
[root@hadoop102 ~]# ssh-copy-id hadoop102
[root@hadoop102 ~]# ssh-copy-id hadoop103
最后输入[root@hadoop101 hadoop-3.1.4]# jps
检查一下,如果出现DataNode、ResourceManager和NodeManager三个说明配置成功,缺少任何一个都代表配置有问题!
到这里整个集群就启动完毕!
13、Hadoop环境检测
检测一下hadoop环境搭建是否有效,我们运行一个官方的实例:
Step1:创建在 hadoop-3.1.4 文件下面创建一个 wcinput 文件夹
[root@hadoop101 hadoop-3.1.4]# mkdir wcinput
Step2: 在 wcinput 文件下创建一个 word.txt 文件
[root@hadoop101 hadoop-3.1.4]# cd wcinput
Step3: 编辑 word.txt 文件
[root@hadoop101 hadoop-3.1.4]# vi word.txt
在文件中输入如下内容,并保存退出
hadoop yarn
hadoop mapreduce
jancy
jancy
Step4: 回到 Hadoop 目录/opt/module/hadoop-3.1.4
Step5: 执行程序
[root@hadoop101 hadoop-3.1.4]# hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.4.jar wordcount wcinput wcoutput
Step6: 查看结果
[root@hadoop101 hadoop-3.1.4]# cat wcoutput/part-r-00000
结果如下:
hadoop 2
jancy 2
mapreduce 1
yarn 1
这里我们也可以通过在本地web页面上看到我们hadoop运行的结果
在网页里输入hadoop101:9870
,如下:
如果输入hadoop101:9870
无法打开网页,但是输入172.16.55.131:9870
可以打开,可以参照我写的这片解决方案博客
这篇文章整理了很久,难免会在整理中出现纰漏,如果有什么疑问的地方,就请留言告知!
如果我的文章对您有帮助,就请一键三连支持一下吧~