赞
踩
为了有效地演示实验,更好地将理论与实验相结合,本节使用虚拟机组网分布式部署Hadoop平台并完成小规模数据分析。
Hadoop简介
Hadoop是由Apache 研发的开源分布式基础架构,它由 Hadoop内核、MapReduce、Hadoop分布式文件系统(HDFS)及一些相关项目组成。其中,HDFS具有高容错性,负责大数据存储;MapReduce则负责对HDFS中的大量数据进行复杂的分布式计算。
Hadoop作为分布式架构,采用“分而治之”的设计思想:将大量数据分布式地存放于大量服务器上,采用分治的方式对大数据进行分析。在这种思想的驱使下﹐Hadoop 实现了MapReduce的编程范式。其中,"Map”意为映射,其工作是将一个键值对分解为多个键值对;“Reduce"意为归约,其工作是将多组键值对处理合并后产生新的键值对写入HDFS。通过上述工作原理,MapReduce实现了将大数据工作拆分为多个小规模数据任务在大量服务器上分布式处理。
本系列实验一共包括五个实验,其Hadoop平台搭建共使用3台Ubuntu虚拟机来完成,其中一台为master节点,两台为slave节点。
实验一 虚拟机环境搭建
1. VirtualBox 的安装及配置
本实验采用VirtualBox进行虚拟机的创建,用户可以前往 VirtualBox官网下载页面(https :/ / www. virtualbox.org/wiki/Downloads)下载其7.0版本安装包进行安装。
为了实现3台虚拟机之间的网络联通,在VirtualBox安装完成后首先创建一个主机网络(Host-Only Ethernet Adapter)。选择菜单栏中的“管理”→“工具”→“主机网络管理器”打开主机网络管理器,如图1-1所示。之后单击“创建”按钮可以新建一个VirtualBoxHost-Only Ethernet Adapter。在创建过程中可能会遇到系统权限请求,允许即可。
图1-1
VirtualBox Host-Only Ethernet Adapter创建好之后,在主机网络管理器下方的网卡选项中选择手动配置网卡,将IPv4地址设置为192.168.56.1,IPv4网络掩码设置为255.255.255.0,IPv6地址及网络掩码长度不需要修改,本次实验中不会用到.不过在VirtualBox 7.0版本中,系统已经自动为我们创建好了一个VirtualBoxHost-Only Ethernet Adapter。同时,注意建议保持DHCP服务器开启,如图1-2所示。
图1-2
2. Ubuntu虚拟机的安装及配置
创建3台虚拟机,在VirtualBox主界面单击“控制“→“新建”按钮创建新的虚拟机。
这里需要设置虚拟机的名称,在本实验中建议将3台虚拟机分别命名为master,slave1,slave2,以便识别。类型选择“Linux”,版本选择“Ubuntu(64-bit)”,如图1-3所示。单击“下一步”按钮可以进行虚拟机配置的设置,虚拟机内存至少设置为2GB,以保证运行流畅,并为虚拟机创建足够大小的虚拟硬盘,如图1-4所示。然后在如图1-5所示的界面,点击完成。
图1-3
图1-4
图1-5
在创建完成后,选中虚拟机,打开右侧的虚拟机设置,如图1-6所示。
图1-6
如图1-7所示,选择“网络”选项。其中网卡1默认为“网络地址转换(NAT)”,不需要更改。选择网卡2,选中“启用网络连接”复选框,连接方式选择“仅主机(Host-Only)网络”,界面名称选择前面建立的VirtualBox Host-OnlyEthernet Adapter。在高级选项中设置混杂模式为“全部允许”,其他选项保持默认,如图1-8所示。
图1-7
图1-8
对3台虚拟机都进行上述网络设置,完成后可启动虚拟机,在启动时选择加载Ubuntu镜像即可进行虚拟机安装。本实验选用的是Ubuntu-16.04.7-Desktop版本的系统镜像﹐读者可前往Ubuntu官网或各镜像站下载。比如,如图1-9的清华大学的镜像服务器:https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/16.04/
图1-9
另外,也可以选中虚拟机,然后如图1-10所示,在设置→存储→控制器中,添加安装的ubuntu的iso按照文件为虚拟光驱,然后启动虚拟机进行安装。三个虚拟机对应ubuntu主机的名字分别为hadoop-master 、hadoop-slavel、hadoop-slave2,用户名可以分别设置为master、slave1,slave2。本实验使用的用户名分别为robin、slave1,slave2
图1-10
3.修改Ubuntu系统内的网络配置
在系统安装成功后需要进行网络配置,主要包括3台虚拟机的互联与设置SSH免密登录。
在进入虚拟机系统后打开终端,先输入ifconfig -a命令查看当前网卡状态,如图10.-3-1所示。可以看到enpos3网卡与enp0s8网卡, enp0s3网卡是虚拟机网络设置中的网卡1,负责通过主机连接互联网;enp0s8为Host-Only网络,负责3台虚拟机组网内互通。不同机器的网卡名称可能不同,且 Host-Only 网卡默认为关闭状态。
图1-11
接下来需要配置网络启动Host-Only 网卡,通过以下指令更改配置文件:
sudo vim /etc/network/interfaces
在文件中添加如下信息:
auto enp0s8
iface enp0s8 inet static
address 192.168.56.2
netmask 255.255.255.0
注意1:如果第一次执行vim,会出现如图1-12的提示,请执行sudo apt install vim来安装vim。
图1-12
注意2:enp0s8需要替换为自己的对应的网卡名称,3台虚拟机的 address在保证前面是192.168.56的前提下IP地址不能相同。修改完成后保存文件﹐输入以下指令启动网卡:
sudo ifup enp0s8
此时如果配置成功,3台主机之间应该可以相互ping 通。
接下来配置SSH免密登录。因为Hadoop中的部分操作需要依赖SSH完成,配置SSH免密登录便于Hadoop配置与运行。首先需要在3台主机上安装SSH工具,命令如下:
sudo apt-get install openssh-server openssh-client
然后修改3台主机的hosts配置文件,命令如下:
vim /etc/hosts
接着在每台主机的该文件中加入另外两台主机的IP和主机名的对应信息﹐
127.0.0.1 localhost
192.168.56.2 hadoop-master
192.168.56.3 hadoop-slave1
192.168.56.4 hadoop-slave2
这里的主机名是安装Ubuntu系统时设置的主机名,这里使用的是hadoop-master 、 hadoop-slavel、hadoop-slave2,如图1-13所示。
图1-13
在master节点主机上配置SSH免密登录,使用以下指令创建master节点的SSH密钥。:
ssh-keygen -t rsa
注意这里一路回车就可以,如果询问是否重新已有的密钥,如图1-14A请输入y就行。
然后使用以下命令把它们分发到两个slave节点
ssh-copy-id robin@hadoop-master
ssh-copy-id slave1@hadoop-slave1
ssh-copy-id slave2@hadoop-slave2
指令中的robin,slave1,slave2为对应主机系统安装时采用的用户名,且免密登录配置完成后默认会以该用户登录对应主机。配置成功后可以使用“ssh主机名”的命令形式进行SSH免密登录。
指令中的username为对应主机系统安装时采用的用户名,且免密登录配置完成后默认会以该用户登录对应主机。配置成功后可以使用“ssh主机名”的命令形式进行SSH免密登录。
如果使用ssh登录,遇到类似的问题ssh Connection reset by 192.168.56.103 port 22
重装SSH服务成为唯一的解决方法
#卸载ssh服务
sudo apt remove --purge openssh-server -y
#参数说明
--purge #软件和配置文件也一起卸载#安装ssh服务
sudo apt install openssh-server -y
实验二 基于Hadoop的环境搭建
当前的大数据分析任务主要采用Hadoop和Spark相结合作为运行平台,其中Spark利用HDFS作为大数据分析输入源以及利用YARN作为Spark 分析任务的资源调度器。本节主要从实践的角度讲述如何结合大数据分析工具进行大数据分析,所讲解的例子既可以使用Hadoop,也可以使用Spark,因为相关的函数调用上述两种大数据系统都可以实现。为了不再增加部署Spark 的麻烦,本节主要采用Hadoop作为运行环境,下面讲述Hadoop 等的安装。
1. Java的安装
Hadoop是一个大数据分析框架,集成了分布式文件系统HDFS.分布式资源调度系统YARN以及分布式计算框架 MapReduce。Hadoop主要采用Java语言编写,运行在Java虚拟机上面。为了更好地调试以及开发,建议采用Oracle的JDK工具包,其华为镜像下载地址为;https://repo.huaweicloud.com/java/jdk/8u152-b16/jdk-8u152-linux-x64.tar.gz
或者直接使用官网下载地址:
http:/ /www.oracle.com/technetwork/java/javase/downloads/index. html
在hadoop-master主机中,完成下载后,解压JDK 到指定目录并更改环境变量。安装配置Java采用的具体命令如下:
tar - xvf jdk-8u152-linux-x64.tar.gz
sudo cp -r jdk1.8.0_152 /usr/java
这样就将Java文件安装到了/usr/java目录下,接下来修改环境变量,需要使用以下命令:
sudo vim /etc/profile
在profile文件中添加以下内容:
export JAVA_HOME=/usr/java/jdk1.8.0_152
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
保存并退出,使用以下命令使profile文件的修改生效:
source /etc/profile
输入以下命令测试Java的安装是否成功:
java - version
输出如图10-2-1所示,表示Java安装成功。
图2-1
接下来安装 Hadoop运行环境。使用wget命令,从 Hadoop 官网上下载Hadoop的软件包,这里以Hadoop-3.3.4为运行环境,具体下载目录为:
https://archive. apache.org/dist/hadoop/core/
本实验所用Hadoop-3.3.4的下载路径为:
https://archive.apache.org/dist/hadoop/core/hadoop-3.3.4/hadoop-3.3.4.tar.gz
在hadoop-master主机中,下载完成后,请执行解压命令,并复制到Hadoop目录:
su
tar -xvf hadoop-3.3.4.tar.gz
mkdir /usr/hadoop
cp -r hadoop-3.3.4 /usr/hadoop
chmod -R 777 /usr/hadoop
解压完成后配置Hadoop环境变量,与Java相同,也是编辑profile文件:
vim /etc/profile
在profile文件中添加以下内容:
export HADOOP_HOME=/usr/hadoop/hadoop-3.3.4
export HADOOP_COMMON_LIB_NATIVE_DIR =$HADO0P_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
保存并退出后使profile文件生效:
source /etc/profile
为了达到Hadoop集群环境安装,需要更改配置文件,具体需要配置HDFS集群和YARN集群信息,包括NameNode,DataNode等端口信息。集群节点配置如下:
NameNode节点: hadoop-master
DataNode节点: hadoop-master Hadoop-slave1 hadoop-slave2
ResourceManager节点 : hadoop-master
NodeManager节点 : hadoop-master
为实现Hadoop的分布式配置﹐首先在hadoop-master主机上修改Hadoop的配置信息,主要需要修改的是/usr/hadoop/etc/hadoop文件夹中的hadoop-env. sh、workers 、core-site. xml、hdfs-site.xml,mapred-site.xml,yarn-site.xml文件。
hadoop-env.sh中需要配置JAVA_HOME为绝对路径,以止启动Hadoop 找不到Java目录而报错,具体如下所示:
export JAVA_HOME=/usr/java/jdk1.8.0_152
workers文件指Hadoop的工作节点,文件修改为如下内容:
robin@hadoop-master
slave1@hadoop-slave1
slave2@hadoop-slave2
core-site.xml 修改为如下内容:
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/hadoop/tmp</value>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop-master:8020</value>
</property>
<property>
<!-- 设置data存放路径 -->
<name>hadoop.data.dir</name>
<value>/opt/data/hadoop/data</value>
</property>
</configuration>
hdfs-site.xml 文件修改为如下内容:
<configuration>
<property>
<!-- 副本数量配置 -->
<name>dfs.replication</name >
<value>2</value >
</property>
<property>
<!-- 哪台虚拟机作为namenode节点 -->
<name>dfs.namenode.http-address</name>
<value>hadoop-master:50070</value>
</property>
<property>
<!-- 哪台虚拟机作为冷备份namenode节点,用于辅助namenode -->
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop-master:50090</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/hadoop/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name >
<value>file:/usr/hadoop/tmp/dfs/data</value>
</property>
</configuration>
mapred-site.xml 修改为如下内容:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value >
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop-master:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop-master:19888</value>
</property>
</configuration>
yarn-site.xml修改为如下内容:
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<!-- 配置yarn启动的主机名,也就是说配置在哪台虚拟机上就在那台虚拟机上进行启动 -->
<name>yarn.resourcemanager.hostname</name>
<value>robin@hadoop-master</value>
</property>
<property>
<name >yarn.nodemanager.aux-services </name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name> yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.nodemanager.log-dirs</name>
<value>${yarn.log.dir}/userlogs</value >
</property>
<property>
<name>yarn.application.classpath</name>
<value>
${HADOOP_HOME}/etc/hadoop:${HADOOP_HOME}/share/hadoop/common/lib/*:${HADOOP_HOME}/share/hadoop/common/*:${HADOOP_HOME}/share/hadoop/hdfs:${HADOOP_HOME}/share/hadoop/hdfs/lib/*:${HADOOP_HOME}/share/hadoop/hdfs/*:${HADOOP_HOME}/share/hadoop/mapreduce/lib/*:${HADOOP_HOME}/share/hadoop/mapreduce/*:${HADOOP_HOME}/share/hadoop/yarn:${HADOOP_HOME}/share/hadoop/yarn/lib/*:${HADOOP_HOME}/share/hadoop/yarn/*
</value>
</property>
</configuration>
为了使hadoop-slave1和hadoop-slave2同hadoop-master主机配置的同步一致,请分别在hadoop-slave1和hadoop-slave2中,使用如下命令建好相关目录
su
mkdir /usr/java
chmod -R 777 /usr/java
mkdir /usr/hadoop
chmod -R 777 /usr/hadoop
mkdir /home/downloads
chmod -R 777 /home/downloads
在hadoop-mater中,使用scp命令进行文件的远程拷贝:
scp -r /usr/java/jdk1.8.0_152 slave1@hadoop-slave1:/usr/java
scp -r /etc/profile slave1@hadoop-slave1:/home/downloads/profile
scp -r /etc/hosts slave1@hadoop-slave1:/home/downloads/hosts
scp -r /usr/hadoop/hadoop-3.3.4 slave1@hadoop-slave1:/usr/hadoop
scp -r /usr/java/jdk1.8.0_152 slave2@hadoop-slave2:/usr/java
scp -r /etc/profile slave2@hadoop-slave2:/home/downloads/profile
scp -r /etc/hosts slave2@hadoop-slave2:/home/downloads/hosts
scp -r /usr/hadoop/hadoop-3.3.4 slave2@hadoop-slave2:/usr/hadoop
分别在hadoop-slave1和hadoop-slave2中,使用如下命令进行文件操作:
su
mv /home/downloads/profile /etc
source /etc/profile
mv /home/downloads/profile /etc
确保3台虚拟机全部配置完成后,请在hadoop-master主机执行如下指令格式化HDFS文件系统:
hdfs namenode - format
在hadoop-master主机,执行如下命令启动Hadoop 集群:
start-all.sh
执行完成后,首先使用jps查看是否启动成功,具体如图2-2所示
图2-2
接着,请通过浏览器访问http://haoop-master:50070,确保Hadoop的name node节点是否启动成功,具体如图2-3所示。
图2-3
最后,点击图2-3中的Datanodes栏,确保Hadoop的data node节点是否启动成功,具体如图2-4所示。
图2-4
如果想停止hadoop的运行,可以使用如下命令:
stop-all.sh
到此结束
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。