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环境配置:
[ninghai@centos ~]$ rpm -qa | grep jdk
[ninghai@centos ~]$ rpm -qa | grep java
将查询出来的文件删除,如果没有历史版本则进行下一步
[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 指令查看一下传输完成后的文件列表:
[ninghai@centos ~]$ tar -zvxf jdk-8u251-linux-x64.tar.gz
这里以普通用户进行配置,root 用户使用 vim /etc/profile
[ninghai@centos ~]$ vim ~/.bash_profile
在 ~/.bash_profile 文件中追加如下信息:
JAVA_HOME=/home/ninghai/jdk1.8.0_251
PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
export JAVA_HOME
由于配置的jdk主要是为了让hadoop能够正常调用,所以 CLASSPATH 的部分在此省略~~
使其如下图所示: 还是把 root 的相关配置也简单记录一下:
JAVA_HOME=/opt/jdk1.8.0_251
PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
export JAVA_HOME
export PATH
最后刷新一下环境变量:
[ninghai@centos ~]$ source ~/.bash_profile
使用如下命令行进行测试:
[ninghai@centos ~]$ java -version
可以发现该命令没有报错,且对应的信息为 java version " 1.8.0_251 ",意味着操作成功:
6.2 hadoop环境配置:
[ninghai@centos ~]$ tar -zxvf hadoop-2.10.1.tar.gz
依旧是以普通用户为例,这里就不再演示 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~
|