一、目的

通过本课程学习,使学生系统的学习当前广泛使用的大数据Hadoop平台及其主要组件的作用及使用。本课程总共分3个实验,分别是:Hadoop伪分布式部署、环境大数据、基于HadoopWeb版云盘。实验设计难易安排合理,贴合实际应用场景,帮助学生在学习理论知识的同时,强化学生对Hadoop主要组件的认知,提高学生的实践能力,掌握相关的数据分析技术,为其他相关课程的学习提供必要的帮助并初步具备利用Hadoop技术进行数据处理与分析的能力。

二、内容

2.1 Hadoop介绍

Hadoop是一个由Apache基金会所开发的分布式系统基础架构,它允许用户在不了解分布式底层细节的情况下,开发分布式程序,并充分利用集群的威力进行高速运算和存储。以下是对Hadoop的详细介绍:

一、Hadoop的起源与发展

Hadoop起源于Apache Nutch项目,该项目始于2002年,是Apache Lucene的子项目之一。2004年,Google发表了关于MapReduce的论文后,Doug Cutting等人受到启发,开始尝试实现MapReduce计算框架,并将其与NDFS(Nutch Distributed File System)结合,用以支持Nutch引擎的主要算法。2006年2月,NDFS和MapReduce从Nutch中分离出来,成为一套完整而独立的软件,并被命名为Hadoop。到了2008年年初,Hadoop已成为Apache的顶级项目,包含众多子项目,并被广泛应用到众多互联网公司。

二、Hadoop的核心组件

Hadoop主要由三个核心组件构成:HDFS(Hadoop Distributed File System)、MapReduce和YARN(Yet Another Resource Negotiator)。

HDFS:分布式文件系统,用于存储文件,通过目录树来定位文件。具有高容错性和高吞吐量的特点,适合部署在低廉的硬件上,并提供高吞吐量来访问应用程序的数据,适合处理超大数据集的应用程序。

NameNode:存储文件元数据,如文件名、目录结构、文件属性(生成时间、副本数、文件权限)以及每个文件的数据块列表和数据库映射信息等。

DataNode:在本地文件系统存储文件块数据以及块数据的校验和,并执行数据块的读写操作。

Secondary NameNode:定期备份NameNode的元数据,并在紧急情况下辅助恢复NameNode。

MapReduce:分布式运算程序的编程框架,是用户开发“基于Hadoop的数据分析应用”的核心框架。MapReduce将计算过程分为两个阶段:Map和Reduce。Map阶段将输入数据拆分成独立的块,并交由不同的Map任务并行处理;Reduce阶段则对Map的结果进行汇总。

YARN:资源调度平台,负责为运算程序提供服务器运算资源。它管理集群内的硬件资源,如内存、CPU等,并在多个程序同时申请计算资源时提供分配和调度的规则(算法)。YARN不仅支持MapReduce程序,还理论上支持各种计算程序,如Spark、Flink等。

ResourceManager:核心管理服务,负责资源的管理和分配。

NodeManager:管理单个节点上的资源。

ApplicationMaster:负责内部任务的资源申请和分配,以及任务的监控和容错。

Container:容器,封装了任务运行所需要的资源。

三、Hadoop的特点与优势

高可靠性:Hadoop按位存储和处理数据的能力值得人们信赖。它假设计算元素和存储会失败,因此维护多个工作数据副本,确保能够针对失败的节点重新分布处理。

高扩展性:Hadoop是在可用的计算机集簇间分配数据并完成计算任务的,这些集簇可以方便地扩展到数以千计的节点中。

高效性:Hadoop能够在节点之间动态地移动数据,并保证各个节点的动态平衡,因此处理速度非常快。通过并发数据,Hadoop可以在节点之间动态并行的移动数据。

高容错性:Hadoop能够自动保存数据的多个副本,并且能够自动将失败的任务重新分配。

低成本:Hadoop是开源的,与一体机、商用数据仓库等数据集市相比,项目的软件成本会大大降低。Hadoop集群允许通过部署普通廉价的集群组成集群来处理大数据。

四、Hadoop的应用场景

Hadoop广泛应用于大数据处理领域,包括但不限于以下几个方面:

数据仓库:Hadoop可以作为数据仓库的基础架构,存储和管理海量数据。

数据挖掘:利用Hadoop的分布式计算能力,可以进行大规模的数据挖掘和分析。

日志分析:Hadoop适合处理大规模的日志数据,如Web日志、系统日志等,帮助企业进行故障排查和性能优化。

机器学习:Hadoop可以支持大规模的机器学习任务,如分类、聚类、回归等。

五、Hadoop的生态系统

Hadoop的生态系统非常庞大,包含了众多与之相关的技术和工具。这些技术和工具与Hadoop相互配合,共同构成了一个完整的大数据处理平台。常见的Hadoop生态系统组件包括:

Hive:基于Hadoop的数据仓库工具,提供了类似SQL的查询语言(HiveQL),方便用户进行数据查询和分析。

HBase:基于Hadoop的分布式、面向列的存储系统,适合处理实时读写和随机访问的场景。

ZooKeeper:为分布式应用提供一致性服务的开源组件,用于维护配置信息、命名、提供分布式同步和组服务等。

Pig:一个用于分析大规模数据集的脚本和查询语言,简化了复杂的数据处理任务。

Sqoop:用于在Hadoop和关系型数据库之间传输数据的工具。

综上所述,Hadoop是一个功能强大、灵活且可扩展的分布式系统基础架构,广泛应用于大数据处理领域。通过不断学习和实践Hadoop及相关技术,我们可以更好地应对大数据时代的挑战和机遇。

2.2 实验步骤

2.2.1 Hadoop伪分布式部署

1. Hadoop介绍

Apache Hadoop是一个允许在集群服务器上使用简单的编程模型对大数据集进行分布式处理的框架。Hadoop能够从单台服务器扩展到数以千计的服务器,每台服务器都有本地的计算和存储资源。Hadoop的高可用性并不依赖硬件,其代码库自身就能在应用层侦测并处理硬件故障,因此能基于服务器集群提供高可用性的服务。

Hadoop生态系统包括HDFS(Hadoop分布式文件系统)、MapReduce、HBase、Zookeeper、Pig、Hive和Sqoop等组件。其中,HDFS是Hadoop生态圈的基本组成部分,MapReduce是Hadoop的主要执行框架。

2. Hadoop伪分布式安装

本次实训采用了Hadoop 2.7.3版本,在Ubuntu 16系统上进行伪分布式部署。伪分布式模式在单节点上同时启动NameNode、DataNode、JobTracker、TaskTracker、Secondary NameNode等5个进程,模拟分布式运行的各个节点。

安装步骤如下:在/app下创建hadoop目录,下载并解压hadoop安装包。



2-2-1


2-2-2
设置IP地址与机器名的映射,设置信息:配置主机名对应的IP地址(如在ubuntu用户下,需要使用sudo命令)sudo vim /etc/hosts

设置:<IP地址> <主机名> 例如:10.2.94.8 4d50238365ba  hadoop


2-2-3
使用ping命令验证设置是否成功

设置操作系统环境

本实验环境已经安装java



2-2-4

无密码验证配置

  1. 开启ssh服务

sudo /etc/init.d/ssh restart

2-2-5

生成密钥对

2-2-6

切换到~/.ssh目录并加入授权

2-2-7

验证ssh连接

ssh localhost(hadoop)无需密码登录

2-2-8

将安装目录

hadoop-2.7.3.改名为hadoop

                                                                         2-2-9

在hadoop安装目录下创建子目录

2-2-10

设置环境变量,配置hadoop-env.sh、core-site.xml、hdfs-site.xml和mapred-site.xml等文件。

使用source命令编译

2-2-11


2-2-12

具体配置内容如下:

core-site.xml:配置Hadoop文件系统的临时目录和NameNode的URI。


hdfs-site.xml:配置NameNode的URI及NameNode和DataNode的存放位置,设置文件块的数据备份个数。


2-2-13

2-2-14


2-2-15

2-2-16

格式化NameNode,启动Hadoop,使用jps检验各后台进程是否成功启动。

2-2-17

3. 测试与验证

运行一个wordcount实例来进一步熟悉Hadoop。当前目录下创建文件并上传文件到HDFS的、adir目录下,内容如下

2-2-18


利用自带jar包实现wordcount功能

2-2-19

2-2-20

2.3环境大数据

Hadoop的运行环境需要大数据的支持。在大数据环境下,Hadoop能够处理PB级别的数据,并提供高吞吐量的数据访问和处理能力。本次实训使用的Ubuntu 16系统提供了稳定而高效的操作环境,而Hadoop 2.7.3版本则具备强大的数据处理能力。

在大数据环境下,Hadoop的优势主要体现在以下几个方面:

分布式存储:Hadoop利用HDFS将数据分布在多个节点上,实现了数据的冗余存储和高可用性。

并行处理:Hadoop的MapReduce框架能够将大数据处理任务分解为多个小任务,在多个节点上并行执行,提高了处理效率。

高扩展性:Hadoop能够轻松地从单台服务器扩展到数千台服务器,满足了大数据处理对计算资源和存储资源的需求。

学会进行递归MapReduce,实验要求,要求实验结束时,每位学生均已在服务器上运,行从北京2016年1月到6月这半年间的历史天,气和空气质量数据文件中分析出的环境统计结,果,包含月平均气温、空气质量分布情况等,实验原理,近年来,由于雾霾问题的持续发酵,越来越多,的人开始关注城市相关的环境数据,包括空气,质量数据、天气数据等等。,如果每小时记录一次城市的天气实况和空气质,量实况信息,则每个城市每天都会产生24条环,境数据,全国所有2500多个城市如果均如此,进行记录,那每天产生的数据量将达到6万多,条,每年则会产生2190万条记录,已经可以,称得上环境大数据,对于这些原始监测数据,我们可以根据时间的,维度来进行统计,从而得出与该城市相关的日,度及月度平均气温、空气质量优良及污染天数,等等,从而为研究空气污染物扩散条件提供有,力的数据支持。,本实验中选取了北京2016年1月到6月这半年,间的每小时天气和空气质量数据(未取到数据,的字段填充“N/A"),利用MapReduce来统计月度平均气温和半年内空气质量为优、良、轻度污染、重度

染、和严重污染的天数

2-3-1

打开terminal,在家目录下,下载并查看环境数据文件beijing.txt

2-3-2

2-3-3

将数据文件上传到HDFS


编写月平均气温统计程序

2-3-4

2-3-5

在Eclipse上新建MapReduce项目,命名为TmpStat,在src目录下新建文件 TmpStat.java,并键入代码。

2-3-6

2-3-7

使用Eclipse软件将AqiStatDaily项目导出成Jar文件,指定主类为AqiStatDaily, 命名为aqistatdaily.jar,并保存在家目录下。

2-3-8

2-3-9

2-3-10

2-3-11

查看各空气质量天数统计结果

在家目录下执行aqistat.jar,指定输出目录为/aqioutput,reducer数量为1。

2-3-12

新建Mapreduce项目,使用Eclipse软件将AqiStat项目导出成Jar文件,指定主类 为AqiStatDaily,命名为aqistatDaily.jar,并保存至家目录下。

2-3-13

2-3-14

查看统计结果文件

2-3-15

结果文件被分成了3个部分,依次查看可看到每天的空气质量统计结果数据

将每日空气质量统计结果保存到aqidaily.txt

2-3-16

2-3-17

2-3-18

家目录执行aqistat.jar指定输出目录为/aqioutput,reducer数量为1

2-3-19

2.4基于Hadoop的Web版的云盘

本次实训基于Hadoop构建了一个Web版的云盘系统。该系统利用Hadoop的分布式存储和并行处理能力,实现了文件的上传、下载、删除和查看等功能。

实训步骤如下:

在Hadoop集群上搭建Web服务器,并配置Tomcat等应用服务器。

开发Web前端页面,实现文件的上传、下载、删除和查看等功能。

开发后端处理程序,将文件存储在HDFS上,并处理文件的访问请求。

配置Hadoop的相关参数,确保云盘系统的稳定运行。

打开桌面terminal,在家目录下,下载项目,并解压缩

2-4-1

2-4-2

检查是否再次启动hadoop

2-4-3

打开idea导入项目clouddisk

2-4-4

选择clouddisk项目的pom.xml加载

2-4-5

修改application.properties文件下的iplocalhost

8020

2-4-6

修改hadoop用户为ubuntu,共五处。

2-4-7

右键运行

2-4-8

看到如下截图访问页面localhost:9090

2-4-9

2-4-10

三、结果

(一) Hadoop伪分布式部署

在Hadoop启动后,通过jps命令检查NameNode、DataNode等进程是否成功启动。同时,通过浏览器访问localhost:50070和localhost:50030查看Hadoop的状态。

3-1-1

3-1-2

(二) 环境大数据

运行aqistat.jar。查看统计结果。

3-2-1

查看各空气质量状况天数统计结果

3-2-2

3-2-3

(三) 基于HadoopWeb版的云盘

上传

3-3-1

3-3-2

3-3-3

删除

3-3-4

重命名

3-3-5

查询

3-3-6

四、遇到问题及解决办法

(一)进程namenode丢失

问题描述:
NamenodeHadoop分布式文件系统(HDFS)中的核心组件,负责管理文件系统的命名空间以及客户端对文件的访问。如果namenode进程丢失,可能导致HDFS无法正常工作。

解决办法:

  1. 检查namenode状态:首先,使用Hadoop的命令行工具检查namenode的状态,确认是否确实丢失。
  2. 修改yarn.xml:虽然namenode的丢失与yarn.xml的直接关联不大,但确保YARN配置正确有助于整体系统的稳定运行。检查yarn.xml中的相关配置,如ResourceManager的地址、NodeManager的配置等。
  3. 重启YARN:使用start-yarn.sh脚本重启YARN服务,确保YARN集群正常运行。
  4. 重启DFS:使用start-dfs.sh脚本重启HDFS服务,包括namenode和datanode等组件。
  5. 检查日志:如果问题依旧存在,检查namenode和YARN的日志文件,查找可能的错误信息或异常。

(二)wordcount程序 目录错误

问题描述:
Wordcount是Hadoop中的一个经典示例程序,用于统计文本文件中每个单词的出现次数。如果程序运行时出现目录错误,可能是因为输入或输出目录的路径不正确。

解决办法:

  1. 检查路径:确保输入和输出目录的路径正确无误,且符合Hadoop的文件系统规范。
  2. 上传文件:如果输入文件不在Hadoop的文件系统中,使用Hadoop的文件系统命令(如hdfs dfs -put)将文件上传到指定的输入目录。
  3. 修改权限:确保Hadoop用户对输入和输出目录有足够的权限。

(三)idea,java环境错误

问题描述:
在使用IntelliJ IDEA等IDE进行Java开发时,可能会遇到Java环境配置错误的问题,导致项目无法编译或运行。

解决办法:

  1. 检查JDK版本:确保IDEA中配置的JDK版本与项目所需的JDK版本一致。可以在IDEA的“File”->“Project Structure”->“Project”中查看和修改JDK版本。
  2. 配置环境变量:确保系统的环境变量(如JAVA_HOME)正确指向JDK的安装目录。
  3. 检查依赖:如果项目使用了外部库或框架,确保这些依赖已经正确添加到项目的构建路径中。
  4. 清理和重建项目:在IDEA中尝试清理并重建项目,以解决可能的编译错误。
  5. 查看错误日志:如果问题依旧存在,查看IDEA的错误日志或控制台输出,查找可能的错误信息。

五、总结或体会

在宝贵的实习期间,我不仅实现了技术能力上的飞跃,积累了宝贵的实际工作经验,更深刻地领悟到了团队精神的无价之宝。以下是我对这段实习经历的深刻总结与反思:

技术能力的全面跃升:通过亲身参与项目开发的每一个环节,我深入掌握了Hadoop集群的构建、运维及优化精髓,精通了Java编程的实践应用,并独立攻克了多项技术难关。这些实战经验无疑为我的职业生涯铺设了坚实的基石。

团队协作的深刻感悟:实习过程中,我深切体会到团队协作所带来的巨大能量。与团队成员间的默契配合与高效沟通,不仅极大提升了工作效率,更让我在交流中学到了诸多新知。在团队中,我学会了尊重差异、倾听意见,并能在团队愿景的引领下,充分发挥个人优势。这种团队精神不仅让我更加珍视团队合作的每一次机会,更为我日后的职业发展积累了宝贵的财富。

问题解决能力的显著提升:面对各类实际问题,我学会了如何条理清晰地分析问题、高效地搜集相关资料,并独立提出解决方案。这种能力不仅让我的工作效率倍增,更赋予了我面对未来挑战的坚定信心。

职业规划的清晰勾勒:实习经历让我对自己的职业道路有了更为明确的认识。我意识到,在技术领域仍有诸多待发掘的潜力与提升空间,并为此制定了详尽的学习与发展计划,旨在逐步实现个人职业目标。

团队精神的深度体验:在团队的温暖怀抱中,我深刻体会到,每个人的独特才能与优势都是团队成功的关键。只有充分激发每个成员的潜能,才能共同推动团队向着既定目标稳步前行。同时,团队精神也教会了我如何在压力之下保持冷静与理性,与团队成员携手并肩,共克时艰,共享成功的喜悦。

综上所述,这段实习经历无疑是我人生旅途中一段不可或缺的宝贵财富。它不仅让我在技术与经验上实现了双重飞跃,更让我深刻领悟到了团队精神的力量与价值。展望未来,我将继续秉承团队精神,不断精进自我,为实现个人职业梦想而不懈奋斗。

 

 

2-2-20

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐