Centos7环境 – Hadoop单机模式部署

正文开始@Assassin

在这里插入图片描述

接上一篇博客 点我跳转到虚拟机搭建,配置好虚拟机环境后进行hadoop单机模式的部署,我的云计算课程中只要求了简单的单机模式部署,如果有精力的话,应该会把伪分布式部署也简单地记录一下

1. Hadoop介绍:

Apache Hadoop 项目为可靠,可扩展的分布式计算开发开源软件;Hadoop软件库是一个计算框架,可以使用简单的编程模型以集群的方式对大型数据集进行分布式处理;

Apache Hadoop 软件库是一个框架,它允许使用简单的编程模型跨计算机集群分布式处理大型数据集。它旨在从单个服务器扩展到数千台机器,每台机器都提供本地计算和存储。库本身不是依靠硬件来提供高可用性,而是设计用于检测和处理应用层的故障,因此在计算机集群之上提供高可用性服务,每台计算机都可能容易出现故障。

2. Hadoop发展史及生态圈:

时间线具体事件
2006年2月成为一套完整而独立的软件,并被命名为Hadoop
2008年1月Hadoop成为Apache顶级项目
2009年7月MapReduce和HDFS成为Hadoop的独立子项目
2010年5月Avro脱离Hadoop项目,成为Apache顶级项目
2010年5月HBase脱离Hadoop项目,成为Apache顶级项目
2010年9月Hive脱离Hadoop项目,成为Apache顶级项目
2010年9月Pig脱离Hadoop项目,成为Apache顶级项目
2011年1月Hadoop 1.0.0 版本发布
2012年10月Impala加入Hadoop生态圈
2013年10月Hadoop 2.0.0 版本发布
2014年2月Spark成为Apache顶级项目
2017年12月Hadoop 3.0.0 版本发布
2020年7月Hadoop 3.3.0 版本发布

3. Hadoop核心功能及优势:

  • Hadoop Common:支持其他 Hadoop 模块的通用实用程序
  • Hadoop 分布式文件系统 (HDFS):一种分布式文件系统,可提供对应用程序数据的高吞吐量访问;是Hadoop生态系统中的核心项目之一,也是分布式计算中数据存储管理的基础
  • Hadoop YARN:作业调度和集群资源管理的框架;可以为上层应用提供统一的资源管理和调度,为集群的资源利用率、统一管理、数据共享等方面提供了便利
  • Hadoop MapReduce:基于 YARN 的系统,用于并行处理大型数据集;Map阶段处理后形成键值对形式的中间结果;Reduce对中间结果相同的 " 键 " 对应的 " 值 " 进行处理,得到最终结果
特点具体含义
扩容能力 (Scalable)顾名思义hadoop作为分布式存储和计算的框架平台是在计算机集群内分配数据并行完成计算任务,而集群可以随时扩展到成百上千个节点上
低成本 (Economical)Hadoop通过普通且廉价的机器组成服务器集群来分发以及处理数据,以至于成本很低
高效率 (Efficient)Hadoop可以在节点之间动态并行的移动数据,速度非常之快
可靠性 (Rellable)能自动维护数据的多份复制,并且可以在任务失败后能自动的重新部署(redeploy)计算任务,所以说Hadoop的按位存储和处理数据的能力值得信赖
高容错性 (High fault tolerance)Hadoop能够自动保存数据的多个副本,并且能够自动将失败的任务重新分配

4. 部署方式介绍:

  • ① 单机模式(standalone mode):
    单机模式是最简单(默认)的安装模式,因为Hadoop本身是基于Java编写的,所以只要配置好Java的环境变量就可以运行了;在这种部署方式中我们不需要修改任何的配置文件,也不需要启动任何的服务,只需要解压缩、配置环境变量即可。虽然配置很简单,所以说能做的事情也是很少的,因为没有各种守护进程,所以分布式数据存储以及资源调度等等服务都是不能使用的,但是我们可以很方便的测试MapReduce程序

  • ② 伪分布模式(Pseudo-Distributed mode):
    伪分布模式是学习阶段最常用的模式,可以将进程都运行在同一台机器上。在这种模式下,可以模拟全分布模式下的运行状态,基本上可以完成全分布模式下的所有操作,伪分布模式是全分布模式的一个特例

  • ③ 全分布模式(cluster mode):
    在全分布模式下,会在配置文件中体现出主节点与分节点,可以指定哪些机器上运行哪些服务以达到的成本与效率的平衡。在企业中主要采用的都是全分布式模式,节点从数十个到上百个不等。在学习阶段,如果个人PC的性能足够强劲,也可以使用多台虚拟机代替

5. hadoop及jdk下载:

5.1 hadoop安装包下载:

在搜索引擎中直接搜索hadoop即可,注意二级域名是apache.org
在这里插入图片描述

进入到 Apache Hadoop 官方下载页面:Apache Hadoop Download
在这里插入图片描述
现在基本上使用的是开源社区版,目前的主流版本为2.x.x和3.x.x,这里就选用稳定性较好的 2.10.1 进行下载;页面中有 Source download 和 Binary download 两种,其中Source为源码,Binary为我们所需要的软件包,点击对应版本的Binary进入下载界面:
在这里插入图片描述
这里直接放出 2.10.1 Binary 版本的下载链接:hadoop 2.10.1下载链接

hadoop安装包下载完成:
在这里插入图片描述

5.2 jdk安装包下载:

在配置Hadoop前,需要先配置好JDK,在安装应先检查之前是否安装过jdk历史版本,如果安装过jdk,需卸载历史版本;接下来需下载jdk,在搜索引擎中搜索jdk:注意二级域名是 apache.com
在这里插入图片描述
现在企业中主流的jdk版本是 jdk1.8,所以这里我自然选择 jdk1.8 进行下载,jdk1.8下载链接
进入界面后根据列表的信息选择所需要的版本,32位系统对应x86,64位系统对应x64:这里选择 x64 Compressed Archive
在这里插入图片描述
点击右侧的下载链接,然后勾选接受网络许可协议就可以下载了:
在这里插入图片描述
这里还得配合oracle的账号来进行下载:
在这里插入图片描述
等不及的小伙伴可以通过百度网盘的链接进行下载:
jdk1.8-linux
提取码:1pva

jdk下载完成,一切准备就绪了~~
在这里插入图片描述

6. 安装及环境配置:

我的电脑不是很好,开虚拟机内存占用太大了,所以使用 xshell 连接虚拟机,接下来的操作全都在 xshell 中进行:

xshell ssh 远程连接虚拟机成功
在这里插入图片描述

6.1 jdk环境配置:

  • ① 查询jdk历史版本:
[ninghai@centos ~]$ rpm -qa | grep jdk
[ninghai@centos ~]$ rpm -qa | grep java

在这里插入图片描述
将查询出来的文件删除,如果没有历史版本则进行下一步

  • ② 卸载历史版本(root或者sudo):
[ninghai@centos ~]$ sudo rpm -e --nodeps java-1.8.0-openjdk-1.8.0.262.b10-1.el7.x86_64
[ninghai@centos ~]$ sudo rpm -e --nodeps javapackages-tools-3.4.1-11.el7.noarch
[ninghai@centos ~]$ sudo rpm -e --nodeps python-javapackages-3.4.1-11.el7.noarch
[ninghai@centos ~]$ sudo rpm -e --nodeps tzdata-java-2020a-1.el7.noarch
[ninghai@centos ~]$ sudo rpm -e --nodeps java-1.8.0-openjdk-headless-1.8.0.262.b10-1.el7.x86_64
[ninghai@centos ~]$ sudo rpm -e --nodeps copy-jdk-configs-3.3-10.el7_5.noarch
[ninghai@centos ~]$ sudo rpm -e --nodeps java-1.8.0-openjdk-1.8.0.262.b10-1.el7.x86_64

卸载完成后执行以下指令,若出现如下结果则说明卸载历史版本成功:

[ninghai@centos ~]$ rpm -qa | grep jdk
[ninghai@centos ~]$ rpm -qa | grep java
[ninghai@centos ~]$ java -version

在这里插入图片描述

  • ③ 将文件传输到虚拟机中:

使用lrzsz工具或者xftp进行文件传输
在这里插入图片描述考虑到文件较大,这里改为使用xftp进行文件传输,速率较快:
在这里插入图片描述
ls -l 指令查看一下传输完成后的文件列表:
在这里插入图片描述

  • ④ 解压缩jdk安装包:
[ninghai@centos ~]$ tar -zvxf jdk-8u251-linux-x64.tar.gz

在这里插入图片描述

  • ⑤ 配置环境变量:

注:配置环境变量有两种方式,一种是直接配置系统环境变量,也就是全局环境变量;另一种是配置用户环境变量,也就是本地用户环境变量;系统环境变量在 /etc/profile中进行配置,该配置可作用于全局,无论哪个用户都可以正常使用;用户环境变量在 ~/.bash_profile中进行配置,该配置只可作用于当前用户,其他用户不可正常使用;部署hadoop各模式时要确保jdk环境与hadoop配置环境要作用于同一用户,也就是说java -versionhadoop version需同时在一个用户下起作用,所以说这里我比较推荐jdk配置用系统变量(全局变量),hadoop的配置使用本地用户变量(本地局部变量),这样既不用考虑用户作用域的问题,也隔离了可以使用hadoop的用户,也就是保证hadoop由专有的用户来管理(工作中基本上采用这种模式)

本文中为了跟实验报告保持一致,均采用了配置当前用户 ~/.bash_profile的方法,故也不存在作用域的问题,(jdk和hadoop的配置都在当前用户)
如果在工作中部署hadoop可能会新建hadoop用户来操作,这时候就得考虑作用域是否一致的问题了!!


这里以当前普通用户进行配置 (jdk配置只在当前ninghai用户生效),root 用户使用 vim /etc/profile可以进行全局配置

[ninghai@centos ~]$ vim ~/.bash_profile

在这里插入图片描述
在 ~/.bash_profile 文件中追加如下信息:

JAVA_HOME=/home/ninghai/jdk1.8.0_251 #这里填自己jdk的解压路径
PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin

export JAVA_HOME

由于配置的jdk主要是为了让hadoop能够正常调用,所以 CLASSPATH 的部分在此省略~~

使其如下图所示:
在这里插入图片描述
最后刷新一下环境变量:

[ninghai@centos ~]$ source ~/.bash_profile

使用如下命令行进行测试:

[ninghai@centos ~]$ java -version

可以发现该命令没有报错,且对应的信息为 java version " 1.8.0_251 ",意味着操作成功:
在这里插入图片描述
还是把 root 的相关配置也简单记录一下:vim /etc/profile
系统环境变量中JAVA_HOME的路径一般选择放在 PATH路径中,建议选择 /opt
在这里插入图片描述

# 在文件结尾添加以下内容
# 注:JAVA_HOME填的是jdk的安装路径,不一定跟我的一样
JAVA_HOME=/opt/jdk1.8.0_251 #jdk解压目录
PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin #拼接原有PATH,同时添加jdk的bin及jre/bin

#执行export导出,提升为全局
export JAVA_HOME
export PATH

配置完成后用 root 用户测试 jdk 同样适用,上述两种方法可任选一种进行配置;
在这里插入图片描述

6.2 hadoop环境配置:

  • ① 解压缩hadoop安装包:
[ninghai@centos ~]$ tar -zxvf hadoop-2.10.1.tar.gz 

在这里插入图片描述

  • ② 配置hadoop环境变量:

注:配置环境变量有两种方式,一种是直接配置系统环境变量,也就是全局环境变量;另一种是配置用户环境变量,也就是本地用户环境变量;系统环境变量在 /etc/profile中进行配置,该配置可作用于全局,无论哪个用户都可以正常使用;用户环境变量在 ~/.bash_profile中进行配置,该配置只可作用于当前用户,其他用户不可正常使用;部署hadoop各模式时要确保jdk环境与hadoop配置环境要作用于同一用户,也就是说java -versionhadoop version需同时在一个用户下起作用,所以说这里我比较推荐jdk配置用系统变量(全局变量),hadoop的配置使用本地用户变量(本地局部变量),这样既不用考虑用户作用域的问题,也隔离了可以使用hadoop的用户,也就是保证hadoop由专有的用户来管理(工作中基本上采用这种模式)

本文中为了跟实验报告保持一致,均采用了配置当前用户 ~/.bash_profile的方法,故也不存在作用域的问题,(jdk和hadoop的配置都在当前用户)
如果在工作中部署hadoop可能会新建hadoop用户来操作,这时候就得考虑作用域是否一致的问题了!!


一般来说,工作中部署hadoop时会新建一个hadoop用户来进行操作,这样会显得更规范,这里由于是简单的单机模式就不再新建hadoop用户了;(为了跟我的实验报告保持一致 [doge]

所以依旧是以当前普通用户为例,这里就不再演示 root 用户了,跟jdk的配置大同小异;在此进入 ~/.bash_profile 文件:
在这里插入图片描述
在其中添加如下信息:

HADOOP_HOME=/home/ninghai/hadoop-2.10.1
PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

export HADOOP_HOME 

使其信息如下图所示:
在这里插入图片描述
最后刷新一下环境变量:

[ninghai@centos ~]$ source ~/.bash_profile

使用如下命令行进行测试:

[ninghai@centos hadoop-2.10.1]$ hadoop version

可以发现该命令没有报错,且对应的信息为 Hadoop 2.10.1,意味着操作成功:
在这里插入图片描述
至此hadoop单机模式部署就算基本完成了,接下来对MapReduce的一些经典案例进行测试~~

7. 测试MapReduce案例:

7.1 测试grep案例:

到这里便可以执行一些例子来感受下 Hadoop 的运行;Hadoop 附带了丰富的例子,包括 wordcount,terasort,join,grep,pi 等;

在此选择运行 grep 例子 (云计算实验报告选择的就是这个 ,将 input 文件夹中的所有文件作为输入,筛选当中符合正则表达式 dfs[a-z.]+ 的单词并统计出现的次数,最后输出结果到 output 文件夹中;

创建 input 文件夹,将 etc/hadoop 目录下的 .xml 文件全部拷贝到 input 文件夹下:

[ninghai@centos hadoop-2.10.1]$ mkdir input
[ninghai@centos hadoop-2.10.1]$ cp etc/hadoop/*xml input

使用 hadoop-mapreduce-examples-2.10.1.jar 来运行 grep:

[ninghai@centos hadoop-2.10.1]$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.10.1.jar grep input output 'dfs[a-z.]+'

在这里插入图片描述
ls -l 查看输出的结果:可以看到生成了 output 文件夹,文件夹中包含两个文件,一个标志状态的文件 _SUCCESS,内无任何内容,success表示成功;另一个是输出结果文件 part-r-00000;进入到 output 文件夹中查看 part-r-00000 中的运行结果:
在这里插入图片描述

7.2 测试WordCount案例:

切换路径到 /home/ninghai/hadoop-2.10.1/share/hadoop/mapreduce目录下:

[ninghai@centos ~]$ cd /home/ninghai/hadoop-2.10.1/share/hadoop/mapreduce

在 mapreduce 下创建一个测试文件 data.txt:

good better best
never let it rest
till good is better
and better best

good good study
day day up
today is a good day

在这里插入图片描述

使用 hadoop jar 命令来运行一个jar包,在jar包中可能存在多个可执行的类,目前需要运行的是其中的 wordcount;运行时需要两个参数:

  • 输入路径:数据源文件或目录
  • 输出路径:一个还不存在的目录,会自动创建

输入路径就是刚刚创建的data.txt,而输出路径必须是一个不存在路径,每次执行完成后会自动创建该目录,并生成一些结果文件:

[ninghai@centos mapreduce]$ hadoop jar hadoop-mapreduce-examples-2.10.1.jar wordcount data.txt output

在这里插入图片描述
ls -l 查看生成的 output 目录:
在这里插入图片描述
cd 进入 output 文件夹 ,ls -l :
在这里插入图片描述
包含一个标志状态的文件 _SUCCESS,success表示成功,里面没有任何内容;另一个part-r-00000包含统计的结果,各单词出现的次数:
在这里插入图片描述


异常解决: 执行上述命令时可能出报错,如果在运行过程中出现UnknownHostException: bogon: 未知的名称或服务 异常,可以通过在 /etc/hosts 文件中添加本机映射解决;如:本机主机名为centos,则修改内容如下(使用root用户或者sudo操作):
在这里插入图片描述


7.3 测试pi案例:

切换路径到 /home/ninghai/hadoop-2.10.1/share/hadoop/mapreduce目录下:

[ninghai@centos ~]$ cd /home/ninghai/hadoop-2.10.1/share/hadoop/mapreduce

使用 hadoop-mapreduce-examples-2.10.1.jar 计算圆周率,执行如下命令:

[ninghai@centos mapreduce]$ hadoop jar hadoop-mapreduce-examples-2.10.1.jar pi 10 100000000

其中 pi 后面的10是运行10次map任务,100000000是每个map任务投掷次数,所以总投掷次数是 10 * 100000000 = 1000000000,总投掷次数越多,计算出来的 pi 值越准确

执行结果如下:
在这里插入图片描述
测试over~

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐