平台架构:拟使用三台虚拟机搭建hadoop平台,为了节省时间,首先在一台虚拟机上进行操作,另外两台克隆配置好的虚拟机而成。
Hadoop平台的搭建:
1,安装虚拟机
在此处需要选择自己下载的光盘镜像的位置,选择后选择稍后安装操作系统,然后进行下一步
此处选择自己物理机创建的预放置虚拟机的文件夹
建议分配40G的磁盘,以免后期平台运行时造成存储空间不够的问题,这里如果没有设置,在虚拟机完全安装完毕后,
也是可以进行调整的
点击完成之后,选择虚拟机,选择光盘镜像,然后点击确定,这里一定要进行设置,否则在下一步启动时会出错,
设置完毕后,点击开启此虚拟机,建议把主节点的内存设为2GB(视自身物理机内存大小情况而定)。
这里一定要选择第一个选项,不要进行检查安装,太耗费时间
选择安装过程中使用的语言以及后期安装完毕,系统内部的语言,根据自己喜好进行选择,选择完毕后,
点击右下角的continue按钮
点击NETWORK&HOSTNAME,可以对虚拟机的主机名设置,这里也可以不进行设置后期使用vim /etc/hostname进行更改
设置完毕后,点击begin install进行安装
此处一定要设置root的密码,并且要谨记root的密码
安装完毕后,点击reboot
安装完成后,第一步需要配置ip地址,打开虚拟机设置,查看你的虚拟机的网络模式,总共有三种不同的网络模式,
每一种模式都和物理机上的虚拟网卡对应。
点击编辑,选择虚拟网络编辑器,查看当前网络模式对应的网卡,我的虚拟机是nat模式,映射的网卡为vmnet8
打开物理机的网络连接查看对应的网卡是否存在,一定要确保对应的虚拟网卡存在,否则虚拟机和物理机无法实现通信。
如果对应的虚拟网卡不存在,可以在虚拟网络编辑器界面,点击恢复默认设置,
这时会自动重新配置网络,对应的虚拟机网卡也会重新生成。
下面进行虚拟机ip的配置,点击虚拟网络设置界面的nat设置按钮,查看网关ip
首先登录到虚拟机中,查看当前虚拟机的ip地址
进入到网卡的配置文件内进行ip相关配置
注意上面的DNS1的配置要和本地物理机对应的虚拟网卡的DNS一致
配置完成后,重启网络服务并查看
关闭防火墙并禁用防火墙
测试网络是否配置成功
基本配置已经完成,接下来进行hadoop相关配置,首先配置hosts映射文件,这要求在配置前提前规划好各个节点对应的虚拟机ip,这里ip规划如下
master 192.168.184.128
slave1 192.168.184.129
slave2 192.168.184.130
因为这里主机与虚拟机之间通信连接已建立,这里借助xshell工具进行操作,不需要在虚拟机里操作,相对比较方便,打开xshell工具,
输入ssh 192.168.184.128(自己配置的虚拟机的ip地址)
因为centos自带的命令中只有vi命令并没有vim命令,vi命令和vim命令其实一样,都是文本编辑命令,区别在于vim命令有高亮显示,
而vi命令并不能高亮显示,本人习惯高亮显示,方便查看,所以在这里安装vim命令,可根据自己喜好选择是否安装vim命令,
首先需要有yum源,可以配置本地yum源,需要挂载本地光盘,创建一个挂载目录,然后进行挂载,挂载完毕后修改/etc/yum.repos.d/CentOS-Base.repo文件。
这里采用阿里云的yum源,也就是网络yum源,原因是因为网络yum源相对比较丰富,下载速度也比较快。
在修改文件时,建议最好先做个备份,因为linux系统本身就是由文件组成,如果文件出错,可能会导致系统本身出现故障
备份命令
cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
需要首先安装wget命令
安装完毕后,下载阿里云yum源
下载完毕后,需要更新yum仓库
yum仓库更新完毕后,安装vim命令
安装完毕后,修改映射文件
vim /etc/hosts
在原有映射关系基础上,新增以下映射关系
xshell自带有xftp传输文件功能,这时把搭建hadoop需要的压缩包上传到虚拟机中去
直接将所需的压缩包拖进去即可
sftp对应的目录即是压缩包所在目录,这里是/root目录
切换到xshell界面,查看是否上传成功
上传成功后,将对应的压缩文件解压到一个指定的目录中去
tar -zxvf jdk-8u162-linux-x64.tar.gz -C /opt/
tar -zxvf hadoop-2.9.2.tar.gz -C /opt/
解压完成后,配置相应的环境变量,首先配置jdk环境
vim /etc/profile
使环境变量生效并测试
配置hadoop的环境
vim /etc/profile
使环境变量生效并测试
为了确保系统本身的安全性,一般不会允许使用root用户进行操作,所以在这里创建普通用户,用于后续的操作
普通用户对于root用户家目录下的文件一般没有操作权限,所以如果需要修改某个目录下的文件,需要为普通用户赋予权限,
或者更改目录的属主
chown -R ll /opt/hadoop-2.9.2/
修改完毕,切换用户,接下来是对hadoop的配置文件进行配置,首先修改hadoop-env.sh文件
修改完毕后,接下来修改core-site.xml文件
vim /opt/hadoop-2.9.2/etc/hadoop/core-site.xml
修改的内容如下:
<configuration>
<!--配置HDFS文件系统的命名空间-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<!--HDFS读取文件的缓冲大小-->
<property>
<name>io.file.buffer.size</name>
<value>4096</value>
</property>
</configuration>
箭头处为自己所规划的主节点的主机名
修改完毕后,接下来修改hdfs-site.xml
vim /opt/hadoop-2.9.2/etc/hadoop/hdfs-site.xml
修改的内容如下:
<configuration>
<!--配置hdfs文件系统的副本数-->
<property>
<name>dfs.replication</name>
<!--一个文件三个副本-->
<value>3</value>
</property>
<!--指定hdfs文件系统的元数据存放目录-->
<property>
<name>dfs.namenode.name.dir</name>
<!--路径可以不存在,可以自动创建-->
<value>file:///opt/hadoopdata/dfs/name</value>
</property>
<!--指定hdfs文件系统的数据块存放目录-->
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///opt/hadoopdata/dfs/data</value>
</property>
<!--配置HDFS的web管理地址-->
<property>
<name>dfs.http.address</name>
<!--浏览器通过这个路径可以直接访问hdfs的界面-->
<value>master:50070</value>
</property>
<!--配置secondaryNamenode的web管理地址-->
<property>
<name>dfs.secondary.http.address</name>
<value>slave1:50090</value>
</property>
<!--配置是否打开web管理-->
<property>
<name>dfs.webhdfs.enabled</name>
<!--打开true web端才可以看到-->
<value>true</value>
</property>
<!--指定hdfs文件系统权限是否开启-->
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
</configuration>
第一个箭头处为namenode所在节点的主机名称,第二和箭头处为secondarynamenode所在节点的主机名称,
建议namenode和secondarynamenode放置在不同的节点上,减轻主节点的负载压力
接下来需要配置mapred-site.xml,hadoop安装路径下并没有该文件,只是给了一个模板文件。所以我们需要直接去根据模板文件创建一份该文件,
然后进行修改
修改内容如下:
<configuration>
<!--指定mapreduce运行的框架名-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
<final>true</final>
</property>
<!--配置mapreduce的历史记录组件的内部通信地址-->
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<!--配置mapreduce的历史记录服务的web管理地址-->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>
<property>
<name>mapreduce.job.ubertask.enable</name>
<value>true</value>
</property>
<property>
<name>mapreduce.job.ubertask.maxmaps</name>
<!--最大数量是9-->
<value>9</value>
</property>
<property>
<name>mapreduce.job.ubertask.maxreduces</name>
<value>1</value>
</property>
</configuration>
修改yarn-site.xml文件
vim /opt/hadoop-2.9.2/etc/hadoop/yarn-site.xml
修改内容如下
<configuration>
<!-- Site specific YARN configuration properties -->
<!--指定resourcemanager所启动服务的主机名/ip-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<!--指定mapreduce的shuffle处理数据方式-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!--配置resourcemanager内部通讯地址-->
<property>
<name>yarn.resourcemanager.address</name>
<value>master:8032</value>
</property>
<!--配置resourcemanager的scheduler组件的内部通信地址-->
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:8030</value>
</property>
<!--配置resource-tracker组件的内部通信地址-->
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:8031</value>
</property>
<!--配置resourcemanager的admin的内部通信地址-->
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>master:8033</value>
</property>
<!--配置yarn的web管理地址-->
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master:8088</value>
</property>
<!--yarn的聚合日志是否开启-->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!--聚合日志报错hdfs上的时间-->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>86400</value>
</property>
<!--聚合日志的检查时间段-->
<property>
<name>yarn.log-aggregation.retain-check-interval-seconds</name>
<value>3600</value>
</property>
<!---->
<property>
<name>yarn.nodemanager.log.retain-seconds</name>
<value>10800</value>
</property>
<!--当应用程序运行结束后,日志被转移到的HDFS目录(启用日志聚集功能时有效)-->
<property>
<name>yarn.nodemanager.remote-app-log-dir</name>
<value>/opt/hadoopdata/logs</value>
</property>
</configuration> 修改slaves文件,也就是配置datanode节点,可以配置两个datanode也可以配置三个,可自行决定
vim /opt/hadoop-2.9.2/etc/hadoop/slaves
修改内容如下
配置完成,关闭虚拟机,拍快照,克隆生成另外两个节点
克隆完毕后,需要修改相应的主机名和ip地址
slave1的配置如下:
改完之后,使用reboot命令重启使刚才的配置生效
slave2配置如下:
改完之后,使用reboot命令重启使刚才的配置生效
接下来配置免密登录
(三台虚拟机都需要进行配置---每台主机上的秘钥长得都不一样)
生成ssh免登陆密钥
(1)ssh-keygen -t rsa (四个回车)
//执行完这个命令后,会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
//将公钥拷贝到要免登陆的机器上
(2)给钥匙(一台机器给三个,三要机器都需要各给三个)
ssh-copy-id master ssh-copy-id slave1 ssh-copy-id slave2
hadoop namenode -format(格式化namenode)---格式化第一台机器(主节点),因为只有第一台机器含有namenode,
格式化第一台才有意义
出现下图代表格式化成功
开启hadoop平台,start-hdfs.sh+start-yarn.sh开启或者使用start-all.sh开启
使用mr-jobhistory-daemon.sh start historyserver开启jobhistory服务
开启hadoop后,使用jps查看进程
master:
slave1:
slave2:
客户端进行验证,需要在物理主机的hosts文件中配置这三台虚拟机的ip地址和主机名的映射关系
浏览器中进行验证:
运行wordcount示例
首先在虚拟机上创建文件并写入一些内容
touch test.txt
vim test.txt
在hdfs上创建一个输入目录,并将本地测试文件放到该目录上
使用hadoop自带的wordcount的jar包进行单词切分计数
查看输出结果
hadoop平台搭建完毕,接下来搭建zookeeper
zookeeper的搭建
为了操作的便捷,这里也只是对一台虚拟机进行配置,配置完毕后,使用scp发送至另外两个节点,这里选择master主机也就是主节点进行配置
首先需要上传zookeeper的压缩包
上传完毕后,解压到指定目录,最好把搭建过程中使用到的压缩包都解压到同一个目录下
tar -zxvf zookeeper-3.4.6.tar.gz -C /opt/
切换到zookeeper对应的配置文件目录下,由于只提供了模板文件,复制模板文件并做修改
修改内容如下:
vim zoo.cfg
新建dataDir以及dataLogDir所指向的目录
在DataDir目录(/opt/zookeeper)下新建myid文件,myid文件写入的数值即在配置zoo.cfg所指定的数值即master为1,
slave1为2,slave2为3
同步各个节点数据:
scp -r /opt/* root@slave1:/opt/
scp -r /opt/* root@slave2:/opt/
该过程占据内存资源,可能会造成电脑卡死,使用以下命令替换
分别切换到slave1和slave2,分别创建以下目录
mkdir /opt/zookeeper
mkdir /opt/zookeeper-3.4.6
创建完毕后切换到master,使用如下命令,发送zookeeper相关配置到另外两个节点
scp -r /opt/zookeeper/* root@slave1:/opt/zookeeper
scp -r /opt/zookeeper/* root@slave2:/opt/zookeeper
scp -r /opt/zookeeper-3.4.6/* root@slave1:/opt/zookeeper-3.4.6
scp -r /opt/zookeeper-3.4.6/* root@slave2:/opt/zookeeper-3.4.6
修改slave1和slave2的myid文件
slave1的myid文件修改为2,slave2的myid文件修改为3
传送完成后,配置环境变量,在master进行配置,然后发送到另外两个节点
vim /etc/profile
使配置的环境变量生效(三个节点都需要做)
source /etc/profile
开启zookeeper服务(三个节点都需要做)
验证
创建临时节点并查看
搭建完成,接下来配置scala环境,因为spark需要scala环境,在配置scala时,要注意scala和jdk版本问题。
然后使用scp进行发送到另外两个节点首先上传scala相应的压缩包
上传完毕后,解压到相应的目录下
vim /etc/profile,配置内容如下:
发送到另外两个节点
使配置的环境变量生效(三个节点都需要做)
source /etc/profile
切换到slave1和slave2,创建/opt/scala-2.12.13目录
mkdir /opt/scala-2.12.13
切换到master下,发送scala相关文件
scp -r /opt/scala-2.12.13/* root@slave1:/opt/scala-2.12.13/
scp -r /opt/scala-2.12.13/* root@slave2:/opt/scala-2.12.13/
验证
scala配置完成,接下来配置spark,首先需要下载spark的压缩包,要注意spark和hadoop的版本兼容性问题
首先需要上传spark的压缩包到虚拟机中
上传完毕后,解压到相应目录
tar -zxvf spark-3.0.2-bin-hadoop2.7.tgz -C /opt/
解压完毕后进入到spark的安装目录下的conf目录
cd /opt/spark-3.0.2-bin-hadoop2.7/conf/
因为spark只给了配置文件的模板文件,没有给出配置文件,所以这里我们首先要根据模板文件生成对应的配置文件
修改slave文件,添加work节点
vim slaves
修改spark-env.sh文件,添加如下配置:
vim spark-env.sh
配置环境变量
vim /etc/profile
分别切换到slave1和slave2创建spark安装目录
mkdir /opt/spark-3.0.2-bin-hadoop2.7
创建完毕后,使用scp命令分发文件
使环境变量生效(三台机器都要做)
source /etc/profile
开启spark,在主节点上(master)节点,切换到/opt/spark-3.0.2-bin-hadoop2.7/sbin
cd /opt/spark-3.0.2-bin-hadoop2.7/sbin
开启spark
输入spark-shell进入spark的shell界面
成功