声明
-
本精要由珠海科技学院学生自行从课本教材和课堂笔记整理,用于珠海科技学院大数据技术期末复习,不作商业用途。
-
本精要的参考教材是由人民邮电出版社出版的厦门大学林子雨老师的《大数据技术原理与应用(第三版) 》,同时也是珠海科技学院大数据技术的课堂教材(2024—2025学年)。精要中标注的页码均为该书页码。
-
本精要只摘录课堂重点及可能的考试重点,遵循的原则是“多一个字不多,少一个字不少”,对细节部分和考纲无关内容不会过多阐述,只用于巩固复习和考前备战,如需系统学习大数据技术请参考相关书籍和课程。
-
对于本精要的超重点部分会用高亮提示,关键词部分会用加粗提示。
-
在每章节末尾附有配套习题与答案,做到了以学促练,以练督学,学练一体。亦可根据自身的需要,通过目录跳转到想复习的部分进行针对性地学习和练习。
-
更新版本:已完结。
第一章大数据概述
1.1大数据时代
(1)三次信息化浪潮、每次解决的问题、技术 P3
| 信息化浪潮 | 发生时间 | 标志 | 解决的问题 | 代表企业 |
|---|---|---|---|---|
| 第一次信息化浪潮 | 1980 年前后 | 个人计算机 | 信息处理 | Intel、AMD、IBM、苹果、微软、联想、戴尔、惠普等 |
| 第二次信息化浪潮 | 1995 年前后 | 互联网 | 信息传输 | 雅虎、谷歌、阿里巴巴、百度、腾讯等 |
| 第三次信息化浪潮 | 2010 年前后 | 大数据、云计算和物联网 | 信息爆炸 | 亚马逊、谷歌、IBM、VMware、Palantir、Hortonworks、Cloudera、阿里云等 |
(2)大数据技术支撑-三个方面 P3-P5
- 存储设备容量不断增加
- CPU 处理能力大幅提升
- 网络带宽不断增加
(3)数据产生方式变革-三个阶段 P5-P6
| 阶段 | 时间 | 内容 |
|---|---|---|
| 第一阶段:萌芽期 | 20世纪90年代∼\sim∼ 21世纪初 | 随着数据挖掘理论和数据库技术的逐步成熟,一批商业智能工具和知识管理技术开始被应用,如数据仓库、专家系统、知识管理系统等 |
| 第二阶段:成熟期 | 21世纪前10年 | Web 2.0应用迅猛发展,非结构化数据大量产生,传统处理方法难以应对,带动了大数据技术的快速突破,大数据解决方案逐渐走向成熟,形成了并行计算与分布式系统两大核心技术,谷歌的GFS和MapReduce等大数据技术受到追捧,Hadoop平台开始盛行 |
| 第三阶段:大规模应用期 | 2010年以后 | 大数据应用渗透各行各业,数据驱动决策,信息社会智能化程度大幅提高 |
1.2大数据概念-4V特点 P8-P10
大数据的 4 个“V”,或者说是大数据的 4 个特点,包含 4 个层面:数据量大(Volume)、数据类型繁多(Variety)、处理速度快(Velocity)和价值密度低(Value)。
1.3大数据的影响-5个方面的影响 P10-P14
大数据对科学研究、思维方式、社会发展、就业市场和人才培养都具有重要而深远的影响。
-
科学研究方面,大数据使人类科学研究在经历了实验科学、理论科学、计算科学 3 种范式之后,迎来了第 4 种范式—数据密集型科学;
-
在思维方式方面,大数据具有“全样而非抽样、效率而非精确、相关而非因果”三大显著特征,完全颠覆了传统的思维方式;
-
在社会发展方面,大数据决策逐渐成为一种新的决策方式,大数据应用有力促进了信息技术与各行业的深度融合,大数据开发大大推动了新技术和新应用不断涌现;
-
在就业方面,大数据的兴起使得数据科学家成为热门人才;
-
在人才培养方面,大数据的兴起将在很大程度上改变我国高校信息技术相关专业的现有教学和科研体制。
1.4大数据的应用 P15(结合第四篇的大数据应用理解)
大数据无处不在,包括制造、金融、汽车、互联网、餐饮、电信、能源、物流、城市管理、生物医学、体育和娱乐等在内的社会各个行业/领域都已经融入了大数据。
| 行业/领域 | 大数据的应用 |
|---|---|
| 制造 | 利用工业大数据提升制造业水平,包括产品故障诊断与预测、分析工艺流程、改进生产工艺、优化生产过程能耗、工业供应链分析与优化、生产计划与排程 |
| 金融 | 大数据在高频交易、社交情绪分析和信贷风险分析三大金融创新领域发挥重要作用 |
| 汽车 | 利用大数据和物联网技术实现的无人驾驶汽车,在不远的未来将走入我们的日常生活 |
| 互联网 | 借助大数据技术,可以分析客户行为,进行商品推荐和有针对性地广告投放 |
| 餐饮 | 利用大数据实现餐饮O20模式,彻底改变传统餐饮经营方式 |
| 电信 | 利用大数据技术实现客户离网分析,及时掌握客户离网倾向,出台客户挽留措施 |
| 能源 | 随着智能电网的发展,电力公司可以掌握海量的用户用电信息,利用大数据技术分析用户用电模式,可以改进电网运行,合理地设计电力需求响应系统,确保电网运行安全 |
| 物流 | 利用大数据优化物流网络,提高物流效率,降低物流成本 |
| 城市管理 | 可以利用大数据实现智能交通、环保监测、城市规划和智能安防 |
| 生物医学 | 大数据可以帮助我们实现流行病预测、智慧医疗、健康管理,还可以帮助我们解读DNA,了解更多的生命奥秘 |
| 体育和娱乐 | 大数据可以帮助我们训练球队,预测比赛结果,以及决定投拍哪种题材的影视作品 |
| 安全领域 | 政府可以利用大数据技术构建起强大的国家安全保障体系,企业可以利用大数据抵御网络攻击,警察可以借助大数据来预防犯罪 |
| 个人生活 | 大数据还可以应用于个人生活,利用与每个人相关联的“个人大数据”,分析个人生活行为习惯,为其提供更加周到的个性化服务 |
1.5大数据的关键技术 P16页表格的四个技术层面及功能
当人们谈到大数据时,往往并非仅指数据本身,而是数据和大数据技术这二者的综合。所谓大数据技术,是指伴随着大数据的采集、存储、分析和结果呈现的相关技术,是使用非传统的工具来对大量的结构化、半结构化和非结构化数据进行处理,从而获得分析和预测结果的一系列数据处理和分析技术。
| 大数据技术层面 | 功能 |
|---|---|
| 数据采集与预处理 | 利用ETL工具将分布在异构数据源中的数据,如关系数据、平面数据文件等,抽取到临时中间层后进行清洗、转换、集成,最后加载到数据仓库或数据集市中,成为联机分析处理、数据挖掘的基础;也可以利用日志采集工具(如Flume、Kafka等)把实时采集的数据作为流计算系统的输入,进行实时处理分析 |
| 数据存储和管理 | 利用分布式文件系统、数据仓库、关系数据库、NoSQL数据库、云数据库等,实现对结构化、半结构化和非结构化海量数据的存储和管理 |
| 数据处理与分析 | 利用分布式并行编程模型和计算框架,结合机器学习和数据挖掘算法,实现对海量数据的处理和分析;对分析结果进行可视化呈现,帮助人们更好地理解数据、分析数据 |
| 数据安全和隐私保护 | 在从大数据中挖掘潜在的巨大商业价值和学术价值的同时,构建数据安全体系和隐私数据保护体系,有效保护数据安全和个人隐私 |
1.6大数据计算模式 -典型模式+针对的问题/数据+代表框架 P17-P18
| 大数据计算模式 | 解决问题 | 代表产品 |
|---|---|---|
| 批处理计算 | 针对大规模数据的批量处理 | MapReduce、Spark等 |
| 流计算 | 针对流数据的实时计算 | Flink、Storm、S4、Flume、Streams、Puma、DStream、Super Mario、银河流数据处理平台等 |
| 图计算 | 针对大规模图结构数据的处理 | Pregel、GraphX、Giraph、PowerGraph、Hama、Golden Orb等 |
| 查询分析计算 | 大规模数据的存储管理和查询分析 | Dremel、Hive、Cassandra、Impala等 |
1.7大数据产业 P18-19页的表格
大数据产业是指一切与支撑大数据组织管理和价值发现相关的企业经济活动的集合。大数据产业包括 IT 基础设施层、数据源层、数据管理层、数据分析层、数据平台层和数据应用层。
| 产业层次 | 包含内容 |
|---|---|
| IT基础设施层 | 包括提供硬件、软件、网络等基础设施以及提供咨询、规划和系统集成服务的企业,比如提供数据中心解决方案的IBM、惠普和戴尔等,提供存储解决方案的EMC, 提供虚拟化管理软件的微软、思杰、SUN、Red Hat等 |
| 数据源层 | 大数据生态圈里的数据提供者,是生物(生物信息学领域的各类研究机构)大数据、交通(交通主管部门)大数据、医疗(各大医院、体检机构)大数据、政务(政府部门)大数据、电商(淘宝、天猫、苏宁云商、京东等电商)大数据、社交网络(微博、微信等)大数据、搜索引擎(百度、谷歌等)大数据等各种数据的来源 |
| 数据管理层 | 包括数据抽取、转换、存储和管理等服务的各类企业或产品,如分布式文件系统(如Hadoop的HDFS和谷歌的GFS)、ETL工具(Informatica、Datastage、Kettle等)、数据库和数据仓库 (Oracle、MySQL、SQL Server、HBase、GreenPlum等) |
| 数据分析层 | 包括提供分布式计算、数据挖掘、统计分析等服务的各类企业或产品,如分布式计算框架 MapReduce、统计分析软件SPSS和SAS、数据挖掘工具Weka、数据可视化工具Tableau、BI 工具(MicroStrategy、Cognos、BO)等 |
| 数据平台层 | 包括提供数据分享平台、数据分析平台、数据租售平台等服务的企业或产品,如阿里巴巴、谷歌、中国电信、百度等 |
| 数据应用层 | 提供智能交通、智慧医疗、智能物流、智能电网等行业应用的企业、机构或政府部门,如交通主管部门、各大医疗机构、菜鸟网络、国家电网等 |
1.8大数据与云计算、物联网
(1)云计算的概念及三种服务模式 P19-P20
- 云计算的概念
云计算实现了通过网络提供可伸缩的、廉价的分布式计算能力,用户只需要在具备网络接入条件的地方,就可以随时随地获得所需的各种 IT 资源。云计算代表了以虚拟化技术为核心、以低成本为目标的、动态可扩展的网络应用基础设施,是近年来最有代表性的网络计算技术与模式。
- 云计算的3 种服务模式
云计算包括 3 种典型的服务模式(见图 1-8),即基础设施即服务(Infrastructure as a Service,IaaS)、平台即服务(Platform as a Service,PaaS)和软件即服务(Software as a Service,SaaS)。IaaS 将基础设施(计算资源和存储)作为服务出租,PaaS 把平台作为服务出租,SaaS 把软件作为服务出租。

(2)物联网的概念 P23
物联网是物物相连的互联网,是互联网的延伸,它利用局部网络或互联网等通信技术把传感器、控制器、计算机、人员和物等通过新的方式连在一起,形成人与物、物与物相连,实现信息化和远程管理控制。
(3)物联网的应用形式 P25
物联网已经广泛应用于智能交通、智慧医疗、智能家居、环保监测、智能安防、智能物流、智能电网、智慧农业、智能工业等领域,对国民经济与社会发展起到了重要的推动作用
(4)大数据、云计算、物联网三者关系 P27
第一,大数据、云计算和物联网的区别。大数据侧重于对海量数据的存储、处理与分析,从海量数据中发现价值,服务于生产和生活;云计算旨在整合和优化各种 IT 资源,并通过网络以服务的方式廉价地提供给用户;物联网的发展目标是实现“物物相连”,应用创新是物联网发展的核心。
第二,大数据、云计算和物联网的联系。从整体上看,大数据、云计算和物联网这三者是相辅相成的。大数据根植于云计算,大数据分析的很多技术都来自云计算,云计算的分布式数据存储和管理系统(包括分布式文件系统和分布式数据库系统)提供了海量数据的存储和管理能力,分布式并行处理框架 MapReduce 提供了海量数据分析能力。没有这些云计算技术作为支撑,大数据分析就无从谈起。反之,大数据为云计算提供了“用武之地”,没有大数据这个“练兵场”,云计算技术再先进,也不能发挥它的应用价值。物联网的传感器源源不断产生的大量数据,构成了大数据的重要数据来源,没有物联网的飞速发展,就不会带来数据产生方式的变革,即由人工产生阶段转向自动产生阶段,大数据时代也不会这么快就到来。同时,物联网需要借助云计算和大数据技术,实现物联网大数据的存储、分析和处理。
可以说,云计算、大数据和物联网三者已经彼此渗透、相互融合,在很多应用场合都可以同时看到三者的身影。在未来,三者会继续相互促进、相互影响,更好地服务于社会生产和生活的各个领域。
习题
单选题
- 第一次信息化浪潮主要解决什么问题?(B)
A、信息传输 B、信息处理 C、信息爆炸 D、信息转换
- 下面哪个选项属于大数据技术的“数据存储和管理”技术层面的功能?(A)
A、利用分布式文件系统、数据仓库、关系数据库等实现对结构化、半结构化和非结构化海量数据的存储和管理。
B、利用分布式并行编程模型和计算框架,结合机器学习和数据挖掘算法,实现对海量数据的处理和分析
C、构建隐私数据保护体系和数据安全体系,有效保护个人隐私和数据安全
D、把实时采集的数据作为流计算系统的输入,进行实时处理分析
- 在大数据的计算模式中,流计算解决的是什么问题?(D)
A、针对大规模数据的批量处理
B、针对大规模图结构数据的处理
C、大规模数据的存储管理和查询分析
D、针对流数据的实时计算
- 大数据产业指什么?(A)
A、一切与支撑大数据组织管理和价值发现相关的企业经济活动的集合
B、提供智能交通、智慧医疗、智能物流、智能电网等行业应用的企业
C、提供数据分享平台、数据分析平台、数据租售平台等服务的企业
D、提供分布式计算、数据挖掘、统计分析等服务的各类企业
- 下列哪一个不属于大数据产业的产业链环节?(A)
A、数据循环层
B、数据源层
C、数据分析层
D、数据应用层
- 下列哪一个不属于第三次信息化浪潮中新兴的技术?(A)
A、互联网
B、云计算
C、大数据
D、物联网
- 云计算平台层(PaaS)指的是什么?(A)
A、操作系统和围绕特定应用的必需的服务
B、将基础设施(计算资源和存储)作为服务出租
C、从一个集中的系统部署软件,使之在一台本地计算机上(或从云中远程地)运行的一个模型
D、提供硬件、软件、网络等基础设施以及提供咨询、规划和系统集成服务
- 下面关于云计算数据中心的描述正确的是:(A)
A、数据中心是云计算的重要载体,为各种平台和应用提供运行支撑环境
B、数据中心就是放在企业内部的一台中心服务器
C、每个企业都需要建设一个云计算数据中心
D、数据中心不需要网络带宽的支撑
- 下列哪个不属于物联网的应用?(D)
A、智能物流
B、智能安防
C、环保监测
D、数据清洗
- 下列哪项不属于大数据的发展历程?(D)
A、成熟期
B、萌芽期
C、大规模应用期
D、迷茫期
多选题
-
第三次信息化浪潮的标志是哪些技术的兴起?(BCD)
A、个人计算机
B、物联网
C、云计算
D、大数据
-
信息科技为大数据时代提供哪些技术支撑?(ABC)
A、存储设备容量不断增加
B、网络带宽不断增加
C、CPU 处理能力大幅提升
D、数据量不断增大
-
大数据具有哪些特点?(ABCD)
A、数据的“大量化”
B、数据的“快速化”
C、数据的“多样化”
D、数据的“价值密度比较低”
-
下面哪个属于大数据的应用领域?(ABCD)
A、智能医疗研发
B、监控身体情况
C、实时掌握交通状况
D、金融交易
-
大数据的两个核心技术是什么?(AC)
A、分布式存储
B、分布式应用
C、分布式处理
D、集中式存储
-
云计算关键技术包括什么?(ABCD)
A、分布式存储
B、虚拟化
C、分布式计算
D、多租户
-
云计算的服务模式和类型主要包括哪三类?(ABC)
A、软件即服务(SaaS)
B、平台即服务(PaaS)
C、基础设施即服务(IaaS)
D、数据采集即服务(DaaS)
-
物联网主要由下列哪些部分组成的?(ABCD)
A、应用层
B、处理层
C、感知层
D、网络层
-
物联网的关键技术包括哪些?(AB)
A、识别和感知技术
B、网络与通信技术
C、数据挖掘与融合技术
D、信息处理一体化技术
-
大数据对社会发展的影响有哪些?(ABC)
A、大数据成为一种新的决策方式
B、大数据应用促进信息技术与各行业的深度融合
C、大数据开发推动新技术和新应用的不断涌现
D、大数据对社会发展没有产生积极影响
简答题
- 试述信息技术发展史上的3次信息化浪潮及其具体内容。
第一次信息化浪潮 1980年前后个人计算机开始普及,计算机走入企业和千家万户。代表企业:Intel,AMD,IBM,苹果,微软,联想,戴尔,惠普等。
第二次信息化浪潮 1995年前后进入互联网时代。代表企业:雅虎,谷歌阿里巴巴,百度,腾讯。
第三次信息浪潮 2010年前后,云计算大数据,物联网快速发展,即将涌现一批新的市场标杆企业。
- 试述数据产生方式经历的几个阶段。
经历了三个阶段:
运营式系统阶段 数据伴随一定的运营活动而产生并记录在数据库。
用户原创内容阶段 Web2.0时代。
感知式系统阶段 物联网中的设备每时每刻自动产生大量数据。
- 试述大数据的4个基本特征。
数据量大(Volume)
据类型繁多(Variety)
处理速度快(Velocity)
价值密度低(Value)
- 试述大数据时代的“数据爆炸”特性。
大数据摩尔定律:人类社会产生的数据一直都在以每年50%的速度增长,即每两年就增加一倍。
- 科学研究经历了那四个阶段?
实验 比萨斜塔实验
理论 采用各种数学,几何,物理等理论,构建问题模型和解决方案。例如:牛一,牛二,牛三定律。
计算 设计算法并编写相应程序输入计算机运行。
数据 以数据为中心,从数据中发现问题解决问题。
- 试述大数据对思维方式的重要影响。
全样而非抽样
效率而非精确
相关而非因果
- 大数据决策与传统的基于数据仓库的决策有什么区别?
数据仓库以关系数据库为基础,在数据类型和数据量方面存在较大限制。
大数据决策面向类型繁多的,非结构化的海量数据进行决策分析。
- 举例说明大数据的具体应用。
汽车行业 大数据和物联网技术 无人汽车
互联网行业 分析客户行为,进行商品推介和有针对性的广告投放。
城市管理 智能交通 环保检测 城市规划和智能安防
生物医学 流行病预测 智慧医疗 健康管理 解读DNA
个人生活 分析个人生活行为习惯,提供周到的个性化服务
- 举例说明大数据的关键技术
数据采集
数据存储和管理
数据处理分析
数据安全与隐私保护
- 大数据产业包含哪些层面?
IT基础设施层
数据源层
数据管理层
数据分析层
数据平台层
数据应用层
- 定义并解释一下术语:云计算,物联网。
云计算实现了通过网络提供可伸缩的廉价的分布式计算力,用户只需要在具备网络接入条件的地方,就可以随时随地获得所需的各种IT资源。
物联网: 物物相连的互联网,利用局部网络或者互联网等通信技术把传感器,控制器,机器,人员和物等通过新的方式连在一起,形成人与物,物与物相连,实现信息化和远程管理控制。
- 详细阐述大数据,云计算和物联网三者之间的区别和联系。
大数据、云计算和物联网的区别
大数据侧重于海量数据的存储、处理与分析,从海量数据中发现价值,服务于生产和生活;云计算本质上旨在整合和优化各种IT资源,并通过网络以服务的方式廉价提供给用户;
物联网的发展目标是实现物物相连,应用创新是物联网发展的核心。
大数据、云计算和物联网的联系
从整体上看,大数据、云计算和物联网这三者是相辅相成的。大数据根植于云计算,大数据分析的很多技术都来自于云计算,云计算的分布式和数据存储和管理系统(包括分布式文件系统和分布式数据库系统)提供了海量数据的存储和管理能力,分布式并行处理框架MapReduce提供了海量数据分析能力,没有这些云计算技术作为支撑,大数据分析就无从谈起。反之,大数据为云计算提供了“用武之地”,没有大数据这个“练兵场”,云计算技术再先进,也不能发挥它的应用价值。
物联网的传感器源源不断产生的大量数据,构成了大数据的重要来源,没有物联网的飞速发展,就不会带来数据产生方式的变革,即由人工产生阶段向自动产生阶段,大数据时代也不会这么快就到来。同时,物联网需要借助于云计算和大数据技术、实现物联网大数据的存储、分析和处理。
云计算、大数据和物联网,三者会继续相互促进、相互影响,更好地服务于社会生产和生活的各个领域。
第二章大数据处理架构Hadoop
2.1 Hadoop概述
(1)Hadoop的特征 P30
Hadoop 是一个能够对大量数据进行分布式处理的软件框架,并且是以一种可靠、高效、可伸缩的方式进行处理的,它具有以下几个方面的特性。
-
高可靠性。采用冗余数据存储方式,即使一个副本发生故障,其他副本也可以保证正常对外提供服务。
-
高效性。作为并行分布式计算平台,Hadoop 采用分布式存储和分布式处理两大核心技术,能够高效地处理 PB 级数据。
-
高可扩展性。Hadoop 的设计目标是可以高效稳定地运行在廉价的计算机集群上,可以扩展到数以千计的计算机节点上。
-
高容错性。采用冗余数据存储方式,自动保存数据的多个副本,并且能够自动将失败的任务进行重新分配。
-
成本低。Hadoop 采用廉价的计算机集群,成本比较低,普通用户也很容易用自己的 PC搭建 Hadoop 运行环境。
-
运行在 Linux 操作系统上。Hadoop 是基于 Java 开发的,可以较好地运行在 Linux 操作系统上。
-
支持多种编程语言。Hadoop 上的应用程序也可以使用其他语言编写,如 C++。
(2)Hadoop集群遵从主从结构的理解(结合hadoop各个组件的主从结构理解)
Hadoop集群的主从结构是分布式计算系统的一个核心概念,它主要包括以下几个关键组件,每个组件都有明确的主从角色分工:
HDFS(Hadoop Distributed File System)
-
NameNode(主节点):
- NameNode 是HDFS的主节点,负责管理文件系统的元数据(如文件的路径、块的位置等)。它知道所有的文件和块的分布信息。
- NameNode 不存储实际的数据,而是存储文件目录结构和文件块的位置信息。
-
DataNode(从节点):
- DataNode 是HDFS的从节点,负责存储实际的数据块。
- DataNode 定期向 NameNode 发送心跳信号和块报告,确保 NameNode 知道每个 DataNode 的状态以及数据块的情况。
YARN(Yet Another Resource Negotiator)
-
ResourceManager(主节点):
- ResourceManager 是YARN的主节点,负责管理集群资源和调度应用程序的执行。
- ResourceManager 接收来自客户端的应用程序提交请求,并分配合适的资源容器(Container)来执行任务。
-
NodeManager(从节点):
- NodeManager 是YARN的从节点,负责管理每个节点上的资源(CPU、内存等)和容器的生命周期。
- NodeManager 向 ResourceManager 报告资源使用情况,并负责启动、监控和终止容器。
MapReduce
-
JobTracker(主节点,在YARN之前使用):
- JobTracker 是旧版 Hadoop 中 MapReduce 的主节点,负责任务调度和监控。
- JobTracker 将 Map 和 Reduce 任务分配给集群中的 TaskTracker。
-
TaskTracker(从节点,在YARN之前使用):
- TaskTracker 是旧版 Hadoop 中的从节点,负责执行分配给它的 Map 和 Reduce 任务。
- TaskTracker 定期向 JobTracker 报告任务执行状态。
在 YARN 引入后,MapReduce 作业的调度和资源管理被 ResourceManager 和 NodeManager 接管。
Hadoop集群的工作流程:
-
数据存储:
- 客户端将数据写入 HDFS,数据被分块并分布存储在不同的 DataNode 上。
- NameNode 记录这些数据块的元数据。
-
作业提交:
- 客户端提交 MapReduce 作业给 ResourceManager。
- ResourceManager 根据资源情况分配 Container 并启动 ApplicationMaster(应用主进程)。
-
任务执行:
- ApplicationMaster 协调作业的执行,向 ResourceManager 请求更多的资源。
- NodeManager 在分配的 Container 内执行 Map 和 Reduce 任务,处理数据并产生结果。
-
结果汇总:
- Map 任务处理后,将中间结果存储在本地,Reduce 任务读取这些中间结果并进行汇总计算,最终生成结果存储在 HDFS 中。
通过这种主从结构,Hadoop 能够高效地管理和处理大规模的数据集,实现分布式存储和并行计算。
2.2 Hadoop生态系统
(1)生态系统10个组件的定义(需要明确知道它们都是定义为什么。比如HDFS是分布式文件系统、HBase是列式数据库… P32-P34)
- HDFS
Hadoop 分布式文件系统是 Hadoop 项目的两大核心之一,是针对谷歌文件系统的开源实现。HDFS 具有处理超大数据、流式处理、可以运行在廉价商用服务器上等优点。HDFS 在设计之初就是要运行在廉价的大型服务器集群上,因此在设计上就把硬件故障作为一种常态来考虑,实现在部分硬件发生故障的情况下仍然能够保证文件系统的整体可用性和可靠性。HDFS 放宽了一部分可移植操作系统接口(Portable Operating System Interface,POSIX)约束,从而实现以流的形式访问文件系统中的数据。HDFS 在访问应用程序数据时,可以具有很高的吞吐率,因此对于超大数据集的应用程序而言,选择 HDFS 作为底层数据存储系统是较好的选择。
- HBase
HBase 是一个提供高可靠性、高性能、可伸缩、实时读写、分布式的列式数据库,一般采用HDFS 作为其底层数据存储系统。HBase 是针对谷歌 BigTable 的开源实现,二者都采用了相同的数据模型,具有强大的非结构化数据存储能力。HBase 与传统关系数据库的一个重要区别是,前者采用基于列的存储,后者采用基于行的存储。HBase 具有良好的横向扩展能力,可以通过不断增加廉价的商用服务器来提高存储能力。
- MapReduce
Hadoop MapReduce 是针对谷歌 MapReduce 的开源实现。MapReduce 是一种编程模型,用于大规模数据集(大于 1 TB)的并行运算,它将复杂的、运行于大规模集群上的并行计算过程高度地抽象为两个函数—Map 和 Reduce,并且允许用户在不了解分布式系统底层细节的情况下开发并行应用程序,并将其运行于廉价的计算机集群上,完成海量数据的处理。通俗地说,MapReduce 的核心思想就是“分而治之”,它把输入的数据集切分为若干独立的数据块,分发给一个主节点管理下的各个分节点来共同并行完成;最后,通过整合各个节点的中间结果得到最终结果。
- Hive
Hive 是一个基于 Hadoop 的数据仓库工具,可以用于对 Hadoop 文件中的数据集进行数据整理、特殊查询和分析存储。Hive 的学习门槛较低,因为它提供了类似于关系数据库 SQL 的查询语言—HiveQL,可以通过 HiveQL 语句快速实现简单的 MapReduce 任务,Hive 自身可以将HiveQL 语句转换为 MapReduce 任务运行,而不必开发专门的 MapReduce 应用,因而十分适合数据仓库的统计分析。
- Pig
Pig 是一种数据流语言和运行环境,适合于使用 Hadoop 和 MapReduce 平台来查询大型半结构化数据集。虽然编写 MapReduce 应用程序不是十分复杂,但毕竟也是需要一定的开发经验的。Pig 的出现大大简化了 Hadoop 常见的工作任务,它在 MapReduce 的基础上创建了更简单抽象的过程语言,为 Hadoop 应用程序提供了一种更加接近结构查询语言的接口。Pig 是一种相对简单的语言,它可以执行语句,因此当我们需要从大型数据集中搜索满足某个给定搜索条件的记录时,采用 Pig 要比 MapReduce 具有明显的优势,前者只需要编写一个简单的脚本在集群中自动并行处理与分发,后者则需要编写一个单独的 MapReduce 应用程序。
- Mahout
Mahout 是 Apache 软件基金会旗下的一个开源项目,提供一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序。Mahout 包含许多实现,如聚类、分类、推荐过滤、频繁子项挖掘等。此外,通过使用 Apache Hadoop 库,Mahout 可以有效地扩展到云中。
- ZooKeeper
ZooKeeper 是针对谷歌 Chubby 的一个开源实现,是高效和可靠的协同工作系统,提供分布式锁之类的基本服务(如统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等),用于构建分布式应用,减轻分布式应用程序所承担的协调任务。ZooKeeper 使用 Java 编写,很容易编程接入,它使用了一个和文件树结构相似的数据模型,可以使用 Java 或者 C 来进行编程接入。
- Flume
Flume 是 Cloudera 提供的一个高可用的、高可靠的、分布式的海量日志采集、聚合和传输的系统。Flume 支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume 提供对数据进行简单处理并写到各种数据接收方的能力。
- Sqoop
Sqoop 是 SQL-to-Hadoop 的缩写,主要用来在 Hadoop 和关系数据库之间交换数据,可以改进数据的互操作性。通过 Sqoop 可以方便地将数据从 MySQL、Oracle、PostgreSQL 等关系数据库中导入 Hadoop(可以导入 HDFS、HBase 或 Hive),或者将数据从 Hadoop 导出到关系数据库,使传统关系数据库和 Hadoop 之间的数据迁移变得非常方便。Sqoop 主要通过 Java 数据库连接(Java DataBase Connectivity,JDBC)和关系数据库进行交互,理论上,支持 JDBC 的关系数据库都可以使 Sqoop 和 Hadoop 进行数据交互。Sqoop 是专门为大数据集设计的,支持增量更新,可以将新记录添加到最近一次导出的数据源上,或者指定上次修改的时间戳。
- Ambari
Apache Ambari 是一种基于 Web 的工具,支持 Apache Hadoop 集群的安装、部署、配置和管理。Ambari 目前已支持大多数 Hadoop 组件,包括 HDFS、MapReduce、Hive、Pig、HBase、ZooKeeper、Sqoop 等。
2.3 Hadoop的安装与使用
(1)Hadoop的三种安装模式 单机模式、伪分布模式、分布式模式
单机模式:在采用单机模式时,Hadoop 只在一台机器上运行,存储采用本地文件系统,没有采用分布式文件系统 HDFS。
分布式安装:在分布式安装时,Hadoop 存储采用分布式文件系统 HDFS,而且,HDFS 的名称节点和数据节点位于集群的不同机器上。
伪分布式安装:伪分布式安装是指在一台机器上模拟一个小的集群,但是集群中只有一个节点。在采用伪分布式模式时,Hadoop 的存储采用分布式文件系统 HDFS,但是,HDFS的名称节点和数据节点都在同一台机器上。
需要说明的是,在一台机器上也是可以实现完全分布式安装的(而不是伪分布式)。只要在一台机器上安装多个 Linux 虚拟机,使每个 Linux 虚拟机成为一个节点,就可以实现 Hadoop 的完全分布式安装。
习题
单选题
-
下列哪个不属于Hadoop的特性?(A)
A、成本高
B、高可靠性
C、高容错性
D、运行在 Linux 平台上
-
Hadoop框架中最核心的设计是什么?(A)
A、为海量数据提供存储的HDFS和对数据进行计算的MapReduce
B、提供整个HDFS文件系统的NameSpace(命名空间)管理、块管理等所有服务
C、Hadoop不仅可以运行在企业内部的集群中,也可以运行在云计算环境中
D、Hadoop被视为事实上的大数据处理标准
-
在一个基本的Hadoop集群中,DataNode主要负责什么?(D)
A、负责执行由JobTracker指派的任务
B、协调数据计算任务
C、负责协调集群中的数据存储
D、存储被拆分的数据块
-
Hadoop最初是由谁创建的?(B)
A、Lucene
B、Doug Cutting
C、Apache
D、MapReduce
-
下列哪一个不属于Hadoop的大数据层的功能?(C)
A、数据挖掘
B、离线分析
C、实时计算
D、BI分析
-
在一个基本的Hadoop集群中,SecondaryNameNode主要负责什么?(A)
A、帮助 NameNode 收集文件系统运行的状态信息
B、负责执行由 JobTracker 指派的任务
C、协调数据计算任务
D、负责协调集群中的数据存储
-
下面哪一项不是Hadoop的特性?(B)
A、可扩展性高
B、只支持少数几种编程语言
C、成本低
D、能在linux上运行
-
在Hadoop项目结构中,HDFS指的是什么?(A)
A、分布式文件系统
B、分布式并行编程模型
C、资源管理和调度器
D、Hadoop上的数据仓库
-
在Hadoop项目结构中,MapReduce指的是什么?(A)
A、分布式并行编程模型
B、流计算框架
C、Hadoop上的工作流管理系统
D、提供分布式协调一致性服务
-
下面哪个不是Hadoop1.0的组件:(C)
A、HDFS
B、MapReduce
C、YARN
D、NameNode 和 DataNode
多选题
-
Hadoop的特性包括哪些?(ABCD)
A、高可扩展性
B、支持多种编程语言
C、成本低
D、运行在Linux平台上
-
下面哪个是Hadoop2.0的组件?(AD)
A、ResourceManager
B、JobTracker
C、TaskTracker
D、NodeManager
-
一个基本的Hadoop集群中的节点主要包括什么?(ABCD)
A、DataNode:存储被拆分的数据块
B、JobTracker:协调数据计算任务
C、TaskTracker:负责执行由JobTracker指派的任务
D、SecondaryNameNode:帮助NameNode收集文件系统运行的状态信息
-
下列关于Hadoop的描述,哪些是正确的?(ABCD)
A、为用户提供了系统底层细节透明的分布式基础架构
B、具有很好的跨平台特性
C、可以部署在廉价的计算机集群中
D、曾经被公认为行业大数据标准开源软件
-
Hadoop集群的整体性能主要受到什么因素影响?(ABCD)
A、CPU性能
B、内存
C、网络
D、存储容量
-
下列关于Hadoop的描述,哪些是错误的?(AB)
A、只能支持一种编程语言
B、具有较差的跨平台特性
C、可以部署在廉价的计算机集群中
D、曾经被公认为行业大数据标准开源软件
-
下列哪些项不属于Hadoop的特性?(AB)
A、较低可扩展性
B、只支持java语言
C、成本低
D、运行在Linux平台上
简答题
- 试述Hadoop和谷歌的MapReduce、GFS等技术之间的关系。
Hadoop是Apache软件基金会旗下的一-个开源分布式计算平台,为用户提供了系统底层细节透明的分布式基础架构。
① Hadoop 的核心是分布式文件系统( Hadoop Ditributed File System,HDFS )和MapReduce。
② HDFS是对谷歌文件系统( Google File System, GFS )的开源实现,是面向普通硬件环境的分布式文件系统,具有较高的读写速度、很好的容错性和可伸缩性,支持大规模数据的分布式存储,其冗余数据存储的方式很好地保证了数据的安全性。
③ MapReduce 是针对谷歌MapReduce的开源实现,允许用户在不了解分布式系统底层细节的情况下开发并行应用程序,采用MapReduce 来整合分布式文件系统上的数据,可保证分析和处理数据的高效性。
- 试述Hadoop具有哪些特性。
Hadoop是一个能够对大量数据进行分布式处理的软件框架,并且是以一种可靠、高效、可伸缩的方式进行处理的,它具有以下几个方面的特性。
① 高可靠性。采用冗余数据存储方式,即使一个副本发生故障, 其他副本也可以保证正常对外提供服务。
② 高效性。 作为并行分布式计算平台,Hadoop采用分布式存储和分布式处理两大核心技术,能够高效地处理PB级数据。
③ 高可扩展性。 Hadoop的设计目标是可以高效稳定地运行在廉价的计算机集群上,可以扩展到数以千计的计算机节点。
④ 高容错性。 采用冗余数据存储方式,自动保存数据的多个副本,并且能够自动将失败的任务进行重新分配。
⑤ 成本低。 Hadoop采用廉价的计算机集群,成本比较低,普通用户也很容易用自己的PC搭建Hadoop运行环境。
⑥ 运行在 Linux平台上。Hadoop是基于Java语言开发的,可以较好地运行在Linux平台上。
⑦ 支持多种编程语言。 Hadoop 上的应用程序也可以使用其他语言编写,如C++。
- 试述Hadoop在各个领域的应用情况。
互联网领域是Hadoop应用的主要阵地。
① 雅虎将Hadoop主要用于支持广告系统与网页搜索。
② Facebook主要将Hadoop平台用于日志处理、推荐系统和数据仓库等方面。
③ 淘宝Hadoop集群服务于阿里巴巴集团各部门,数据来源于各部门产品的线上数据库( Oracle、MySQL)备份、系统日志以及爬虫数据,每天在Hadoop集群运行各种MapReduce任务,如数据魔方、量子统计、推荐系统、排行榜等。
④ 百度选择Hadoop主要用于日志的存储和统计、网页数据的分析和挖掘、商业分析、在线数据反馈、网页聚类等。
- 试述Hadoop的项目结构以及每个部分的具体功能。

各部分具体功能:
① Common。Common为Hadoop其他子项目提供支持的常用工具,主要包括文件系统、RPC(Remote Procedure Call)和串行化库。
② Avro。Avro Avro是Hadoop的一一个子项目,也是Apache中的一个独立项目。Avro是一个用于数据序列化的系统,提供了丰富的数据结构类型、快速可压缩的二进制数据格式、存储持久性数据的文件集、远程调用( Remote Procedure Call, RPC )的功能和简单的动态语言集成功能。Avro 可以将数据结构或对象转化成便于存储和传输的格式,节约数据存储空间和网络传输带宽, Hadoop的其他子项目(如HBase和Hive )的客户端与服务端之间的数据传输都采用了Avro。
③ HDFS。HDFS是针对GFS的开源实现。具有处理强大数据、流式处理、可以运行在廉价的商用服务器上等优点。
④ HBase。HBase是针对谷歌的BigTable的开源实现。一般采用HDFS作为其底层数据存储,基于列的存储,具有强大的非结构化数据存储能力。具有良好的横向扩展能力。
⑤ MapReduce。MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。允许用户在不了解分布式系统底层细节的情况下开发并行应用程序,并将其运行于廉价计算机集群上,完成海量数据的处理。
⑥ Zookeeper。Zookeeper是针对谷歌Chubby的-一个开源实现,是高效和可靠的协同工作系统,提供分布式锁之类的基本服务( 如统一命名服务、 状态同步服务、集群管理、分布式应用配置项的管理等),用于构建分布式应用,减轻分布式应用程序所承担的协调任务。
⑦ Hive。Hive是一个基于Hadoop的数据仓库工具,可以用于对Hadoop文件中的数据集进行数据整理、特殊查询和分析存储,十分适合数据仓库的统计分析。
⑧ Pig。Pig是一种数据流语言和运行环境,适合于使用Hadoop和MapReduce平台来查询大型半结构化数据集。Pig大大简化了Hadoop常见的工作任务,它在MapReduce的基础上创建了更简单的过程语言抽象,为Hadoop应用程序提供了一种更加接近结构化查询语言(SQL)的接口。
⑨ Sqoop。Sqoop可以改进数据的互操作性,主要用来在Hadoop 和关系数据库之间交换数据。通过Sqoop,可以方便地将数据从MySQL、Oracle 、PostgreSQL 等关系数据库中导人Hadoop (可以导人HDFS、HBase或Hive),或者将数据从Hadoop导出到关系数据库,使得传统关系数据库和Hadoop之间的数据迁移变得非常方便。
⑩ Chukwa。Chukwa是一个开源的、用于监控大型分布式系统的数据收集系统,可以将各种类型的数据收集成适合Hadoop处理的文件,并保存在HDFS中供Hadoop进行各种MapReduce操作。
- 路径JAVA_ HOME是在哪一个配置文件中进行设置的?
在安装Hadoop的文件夹下的“conf”目录下配置。
- 所有节点的HDFS路径是通过fs.default.name来设置的,请问它是在哪个配置文件中设置的?
在安装目录下的HDFS core-site.xml 配置文件中配置。
fs.default.name是文件系统的名字。通常是NameNode的hostname与port, 需要在每一个需要访问集群的机器上指定,包括集群中的节点
- 试列举单机模式和伪分布模式的异同点。
相同点:运行机器数相同。单机模式与伪分布式都是在一台单机上运行。
不同点:
① 运行模式不同:单机模式是Hadoop的默认模式,即在一台单机上运行,没有分布式文件系统,直接读写本地操作系统的文件系统。伪分布模式但用不同的Java进程模仿分布式运行中的各类结点。
② 启动进程不同:单机模式下,Hadoop不会启动NameNode、DataNode、JobTracker、TaskTracker等守护进程,Map()和Reduce()任务作为同一个进程的不同部分来执行的。伪分布式模式下,Hadoop启动NameNode、DataNode、JobTracker、TaskTracker这些守护进程都在同一台机器上运行,是相互独立的Java进程。
③ 配置文件处理方式不同:单机模式下,不对配置文件进行修改。伪分布式模式下,修改3个配置文件:core-site.xml(Hadoop集群的特性,作用于全部进程及客户端)、hdfs-site.xml(配置HDFS集群的工作属性)、mapred-site.xml(配置MapReduce集群的属性)。
④ 节点交互不同:单机模式因为不需要与其他节点交互,单机模式就不使用HDFS,也不加载任何Hadoop的守护进程。该模式主要用于开发调试MapReduce程序的应用逻辑。伪分布模式在单机模式之上增加了代码调试功能,允许你检查内存使用情况,HDFS输入输出,以及其他的守护进程交互。
- Hadoop伪分布式运行启动后所具有的进程都有哪些?
Hadoop伪分布式运行启动后所具有的进程有:NameNode、DataNode、JobTracker、TaskTracker。
- 如果具备集群实验条件,请尝试按照Hadoop官方文档搭建全分布式的Hadoop集群环境。
略。
第三章分布式文件系统HDFS
3.1分布式文件系统
(1)分布式文件系统结构 P46
相对于传统的本地文件系统而言,分布式文件系统(Distributed File System)是一种通过网络实现文件在多台主机上进行分布式存储的文件系统。分布式文件系统的设计一般采用“客户机/服务器”(Client/Server)模式,客户端以特定的通信协议通过网络与服务器建立连接,提出文件访问请求,客户端和服务器可以通过设置访问权来限制请求方对底层数据存储块的访问。
目前,已得到广泛应用的分布式文件系统主要包括 GFS 和 HDFS 等,后者是针对前者的开源实现。
(2)Client、NameNode和DataNode的理解 P47
在我们所熟悉的Windows、Linux等操作系统中,文件系统一般会把磁盘空间划分为每512Byte一组,称为“磁盘块”,它是文件系统进行读写操作的最小单位,文件系统的块(Block)通常是磁盘块的整数倍,即每次读写的数据量必须是磁盘块大小的整数倍。
与普通文件系统类似,分布式文件系统也采用了块的概念,文件被分成若干个块进行存储,块是数据读写的基本单元,只不过分布式文件系统的块要比操作系统中的块大很多。比如 HDFS默认的一个块的大小是 64 MB。与普通文件不同的是,在分布式文件系统中,如果一个文件小于一个数据块的大小,它并不占用整个数据块的存储空间。
分布式文件系统在物理结构上是由计算机集群中的多个节点构成的,如图 3-2 所示。这些节点分为两类:一类叫“主节点”(Master Node),或者被称为“名称节点”(NameNode);另一类叫“从节点”(Slave Node),或者被称为“数据节点”(DataNode)。名称节点负责文件和目录的创建、删除和重命名等,同时管理着数据节点和文件块的映射关系,因此客户端只有访问名称节点才能找到请求的文件块所在的位置,进而到相应位置读取所需文件块。数据节点负责数据的存储和读取,在存储时,由名称节点分配存储位置,然后由客户端把数据直接写入相应数据节点;在读取时,客户端从名称节点获得数据节点和文件块的映射关系,然后就可以到相应位置访问文件块。数据节点也要根据名称节点的命令创建、删除和复制数据块。

计算机集群中的节点可能发生故障,因此为了保证数据的完整性,分布式文件系统通常采用多副本存储。文件块会被复制为多个副本,存储在不同的节点上,而且存储同一文件块的不同副本的各个节点会分布在不同的机架上。这样,在单个节点出现故障时,就可以快速调用副本重启单个节点上的计算过程,而不用重启整个计算过程,整个机架出现故障时也不会丢失所有文件块。文件块的大小和副本个数通常可以由用户指定。
分布式文件系统是针对大规模数据存储而设计的,主要用于处理大规模文件,如 TB 级文件。处理规模过小的文件不仅无法充分发挥其优势,而且会严重影响系统的扩展和性能。
3.2 HDFS简介
(1)HDFS的目标和局限性 P49
HDFS 开源实现了 GFS 的基本思想。HDFS 原来是 Apache Nutch 搜索引擎的一部分,后来独立出来作为一个 Apache 子项目,并和 MapReduce 一起成为 Hadoop 的核心组成部分。HDFS 支持流数据读取和处理超大规模文件,并能够运行在由廉价的普通机器组成的集群上,这主要得益于HDFS 在设计之初就充分考虑了实际应用环境的特点,那就是,**硬件出错在普通服务器集群中是一种常态,而不是异常。**因此,HDFS 在设计上采取了多种机制保证在硬件出错的环境中实现数据的完整性。
总体而言,HDFS 要实现以下目标
-
兼容廉价的硬件设备。在成百上千台廉价服务器中存储数据,常会出现节点失效的情况,因此 HDFS 设计了快速检测硬件故障和进行自动恢复的机制,可以实现持续监视、错误检查、容错处理和自动恢复,从而在硬件出错的情况下也能实现数据的完整性。
-
流数据读写。普通文件系统主要用于随机读写以及与用户进行交互,HDFS 则是为了满足批量数据处理的要求而设计的,因此为了提高数据吞吐率,HDFS 放松了一些 POSIX 的要求,从而能够以流式方式来访问文件系统数据。
-
大数据集。HDFS 中的文件通常可以达到 GB 甚至 TB 级别,一个数百台机器组成的集群可以支持千万级别这样的文件。
-
简单的文件模型。HDFS 采用了“一次写入、多次读取”的简单文件模型,文件一旦完成写入,关闭后就无法再次写入,只能被读取。
-
强大的跨平台兼容性。HDFS 是采用 Java 语言实现的,具有很好的跨平台兼容性,支持Java 虚拟机(Java Virtual Machine,JVM)的机器都可以运行 HDFS。
HDFS 特殊的设计,在实现上述优良特性的同时,也使自身具有一些应用局限性。
-
不适合低延迟数据访问。HDFS 主要是面向大规模数据批量处理而设计的,采用流式数据读取,具有很高的数据吞吐率,但是,这也意味着较高的延迟。因此,HDFS 不适合用在需要较低延迟(如数十毫秒)的应用场合。对于低延时要求的应用程序而言,HBase 是一个更好的选择。
-
无法高效存储大量小文件。小文件是指文件大小小于一个块的文件。HDFS 无法高效存储和处理大量小文件,过多小文件会给系统扩展性和性能带来诸多问题。首先,HDFS 采用名称节点来管理文件系统的元数据,这些元数据被保存在内存中,从而使客户端可以快速获取文件实际存储位置。通常,每个文件、目录和块大约占 150Byte,如果有 1000 万个文件,每个文件对应一个块,那么,名称节点至少要消耗 3 GB 的内存来保存这些元数据信息。很显然,这时元数据检索的效率就比较低了,需要花费较多的时间找到一个文件的实际存储位置。而且,如果继续扩展到数十亿个文件,名称节点保存元数据所需要的内存空间就会大大增加,以现有的硬件水平,是无法在内存中保存如此大量的元数据的。其次,用 MapReduce 处理大量小文件时,会产生过多的Map 任务,进程管理开销会大大增加,因此处理大量小文件的速度远远低于处理同等规模的大文件的速度。再次,访问大量小文件的速度远远低于访问几个大文件的速度,因为访问大量小文件,需要不断从一个数据节点跳到另一个数据节点,严重影响性能。
-
不支持多用户写入及任意修改文件。HDFS 只允许一个文件有一个写入者,不允许多个用户对同一个文件执行写操作,而且只允许对文件执行追加操作,不能执行随机写操作。
3.3 HDFS相关概念※
(1)块 :概念、存储单位、默认大小 P50
在传统的文件系统中,为了提高磁盘读写效率,一般以数据块为单位,而不是以字节为单位。比如机械式硬盘(磁盘的一种)包含了磁头和转动部件,在读取数据时有一个寻道的过程,通过转动盘片和移动磁头的位置,找到数据在机械式硬盘中的存储位置,才能进行读写。在 I/O 开销中,机械式硬盘的寻址时间是最耗时的部分,一旦找到第一条记录,剩下的顺序读取效率是非常高的。因此,以块为单位读写数据,可以把磁盘寻道时间分摊到大量数据中。
HDFS 也同样采用了块的概念,默认的一个块大小是 64 MB。在 HDFS 中的文件会被拆分成多个块,每个块作为独立的单元进行存储。我们所熟悉的普通文件系统的块一般只有几千字节,
可以看出,HDFS 在块的大小的设计上明显要大于普通文件系统。HDFS 这么做,是为了最小化寻址开销。HDFS 寻址开销不仅包括磁盘寻道开销,还包括数据块的定位开销。当客户端需要访问一个文件时,首先从名称节点获得组成这个文件的数据块的位置列表,然后根据位置列表获取实际存储各个数据块的数据节点的位置,最后数据节点根据数据块信息在本地 Linux 文件系统中找到对应的文件,并把数据返回给客户端。设计一个比较大的块,可以把上述寻址开销分摊到较多的数据中,降低了单位数据的寻址开销。因此,HDFS 在文件块大小设置上要远远大于普通文件系统,以期在处理大规模文件时能够获得更好的性能。当然,块的大小也不宜设置过大,因为通常 MapReduce 中的 Map 任务一次只处理一个块中的数据,如果启动的任务太少,就会降低作业并行处理速度。
HDFS 采用抽象的块概念可以带来以下几个明显的好处。
- 支持大规模文件存储。文件以块为单位进行存储,一个大规模文件可以被拆分成若干个文
件块,不同的文件块可以被分发到不同的节点上,因此一个文件的大小不会受到单个节点的存储
容量的限制,可以远远大于网络中任意节点的存储容量。
- 简化系统设计。首先,HDFS 采用块概念大大简化了存储管理,因为文件块大小是固定的,
这样就可以很容易计算出一个节点可以存储多少文件块;其次,这方便了元数据的管理,元数据
不需要和文件块一起存储,可以由其他系统负责管理元数据。
- 适合数据备份。每个文件块都可以冗余存储到多个节点上,大大提高了系统的容错性和可
用性。
(2)名称节点:功能、两大核心数据结构功能及存储位置 P50-P51
在 HDFS 中,名称节点负责管理分布式文件系统的命名空间(Namespace),保存了两个核心的数据结构(见图 3-3),即 FsImage 和 EditLog。FsImage 用于维护文件系统树以及文件树中所有的文件和文件夹的元数据,操作日志文件 EditLog 中记录了所有针对文件的创建、删除、重命名等操作。名称节点记录了每个文件中各个块所在的数据节点的位置信息,但是并不持久化地存储这些信息,而是在系统每次启动时扫描所有数据节点并重构,得到这些信息。名称节点在启动时,会将 FsImage 的内容加载到内存当中,然后执行 EditLog 文件中的各项操作,使内存中的元数据保持最新。这个操作完成以后,就会创建一个新的 FsImage 文件和一个空的 EditLog 文件。名称节点启动成功并进入正常运行状态以后,HDFS 中的更新操作都会被写入 EditLog,而不是直接被写入 FsImage。这是因为对于分布式文件系统而言,FsImage 文件通常都很庞大(一般都是 GB 级别以上),如果所有的更新操作都直接在 FsImage 文件中进行,那么系统的运行速度会变得非常缓慢。相对而言,EditLog 通常都要远远小于 FsImage,更新操作写入EditLog 是非常高效的。名称节点在启动的过程中处于“安全模式”,只能对外提供读操作,无法提供写操作。启动过程结束后,系统就会退出安全模式,进入正常运行状态,对外提供读写操作。

数据节点(DataNode)是分布式文件系统 HDFS 的工作节点,负责数据的存储和读取,会根据客户端或者名称节点的调度来进行数据的存储和检索,并且向名称节点定期发送自己所存储的块的列表信息。每个数据节点中的数据会被保存在各自节点的本地 Linux 文件系统中。
(3)第二名称节点:解决的问题、冷备份、运行原理 P51
在名称节点运行期间,HDFS 会不断产生更新操作,这些更新操作直接被写入 EditLog 文件,因此 EditLog 文件也会逐渐变大。在名称节点运行期间,不断变大的 EditLog 文件通常对于系统性能不会产生显著影响,但是当名称节点重启时,需要将 FsImage 加载到内存中,然后逐条执行EditLog 中的记录,使 FsImage 保持最新。可想而知,如果 EditLog 很大,就会导致整个过程变得非常缓慢,使名称节点在启动过程中长期处于“安全模式”,无法正常对外提供写操作,影响用户的使用。
为了有效解决 EditLog 逐渐变大带来的问题,HDFS 在设计中采用了第二名称节点(Secondary NameNode)。第二名称节点是 HDFS 架构的一个重要组成部分,具有两个方面的功能:首先,它可以完成 EditLog 与 FsImage 的合并操作,减小 EditLog 文件大小,缩短名称节点重启时间;其次,它可以作为名称节点的“检查点”,保存名称节点中的元数据信息。具体如下。
(1)EditLog 与 FsImage 的合并操作。每隔一段时间,第二名称节点会和名称节点通信,请求其停止使用 EditLog 文件(这里假设这个时刻为 t1),如图 3-4 所示,暂时将新到达的写操作添加到一个新的文件 EditLog.new 中。然后,第二名称节点把名称节点中的 FsImage 文件和 EditLog文件拉回本地,再加载到内存中;对二者执行合并操作,即在内存中逐条执行 EditLog 中的操作,使 FsImage 保持最新。合并结束后,第二名称节点会把合并后得到的最新的 FsImage.ckpt 文件发送到名称节点。名称节点收到后,会用最新的 FsImage.ckpt 文件去替换旧的 FsImage 文件,同时用 EditLog.new 文件去替换 EditLog 文件(这里假设这个时刻为 t2),从而减小了 EditLog 文件的大小。
(2)作为名称节点的“检查点”。从上面的合并过程可以看出,第二名称节点会定期和名称节点通信,从名称节点获取 FsImage 文件和 EditLog 文件,执行合并操作得到新的 FsImage.ckpt 文件。从这个角度来讲,第二名称节点相当于为名称节点设置了一个“检查点”,周期性地备份名称节点中的元数据信息,当名称节点发生故障时,就可以用第二名称节点中记录的元数据信息进行系统恢复。但是,在第二名称节点上合并操作得到的新的 FsImage 文件是合并操作发生时(即 t1时刻)HDFS 记录的元数据信息,并没有包含 t1时刻和 t2时刻期间发生的更新操作。如果名称节点在 t1时刻和 t2时刻期间发生故障,系统就会丢失部分元数据信息,在 HDFS 的设计中,也并不支持把系统直接切换到第二名称节点。因此从这个角度来讲,第二名称节点只是起到了名称节点的“检查点”作用,并不能起到“热备份”作用。即使有了第二名称节点的存在,当名称节点发生故障时,系统还是有可能会丢失部分元数据信息的。

3.4 HDFS体系结构
(1)HDFS 局限性 P54
HDFS 只设置唯一一个名称节点,这样做虽然大大简化了系统设计,但也带来了一些明显的局限性,具体如下。
-
命名空间的限制。名称节点是保存在内存中的,因此名称节点能够容纳对象(文件、块)的个数会受到内存空间大小的限制。
-
性能的瓶颈。整个分布式文件系统的吞吐量受限于单个名称节点的吞吐量。
-
隔离问题。由于集群中只有一个名称节点,只有一个命名空间,因此无法对不同应用程序进行隔离。
-
集群的可用性。一旦这个唯一的名称节点发生故障,会导致整个集群变得不可用。
3.5 HDFS存储原理※
(1)冗余存储的方式和优点 P55
作为一个分布式文件系统,为了保证系统的容错性和可用性,HDFS 采用了多副本方式对数据进行冗余存储,通常一个数据块的多个副本会被分布到不同的数据节点上。如图 3-6 所示,数据块 1 被分别存放到数据节点 A 和 C 上,数据块 2 被存放在数据节点 A 和 B 上等。

这种多副本方式具有以下 3 个优点。
-
加快数据传输速度。当多个客户端需要同时访问同一个文件时,可以让各个客户端分别从不同的数据块副本中读取数据,这就大大加快了数据传输速度。
-
容易检查数据错误。HDFS 的数据节点之间通过网络传输数据,采用多个副本可以很容易判断数据传输是否出错。
-
保证数据的可靠性。即使某个数据节点出现故障失效,也不会造成数据丢失。
(2)数据存储策略 P55-P56
数据存取策略包括数据存放、数据读取和数据复制等方面,它在很大程度上会影响到整个分布式文件系统的读写性能,是分布式文件系统的核心内容。
数据存放
为了提高数据的可靠性与系统的可用性,以及充分利用网络带宽,HDFS 采用了以机架(Rack)为基础的数据存放策略。一个 HDFS 集群通常包含多个机架,不同机架之间的数据通信需要经过交换机或者路由器,同一个机架中不同机器之间的通信则不需要经过交换机和路由器,这意味着同一个机架中不同机器之间的通信要比不同机架之间机器的通信带宽大。
HDFS 默认每个数据节点都在不同的机架上,这种方法会存在一个缺点,那就是写入数据的时候不能充分利用同一机架内部机器之间的带宽。但是,与这个缺点相比,这种方法也带来了更多很显著的优点:首先,可以获得很高的数据可靠性,即使一个机架发生故障,位于其他机架上的数据副本仍然是可用的;其次,可以在多个机架上并行读取数据,大大提高数据读取速度;最后,可以更容易地实现系统内部负载均衡和错误处理。
HDFS 默认的冗余复制因子是 3,每一个文件块会被同时保存到 3 个地方,其中,有两个副本放在同一个机架的不同机器上面,第 3 个副本放在不同机架的机器上面,这样既可以保证机架发生异常时的数据恢复,也可以提高数据读写性能。一般而言,HDFS 副本的放置策略如下(见图 3-7)。

-
如果是在集群内发起写操作请求,则把第 1 个副本放置在发起写操作请求的数据节点上,实现就近写入数据。如果是在集群外发起写操作请求,则从集群内部挑选一台磁盘空间较为充足、CPU 不太忙的数据节点,作为第 1 个副本的存放地。
-
第 2 个副本会被放置在与第 1 个副本不同的机架的数据节点上。
-
第 3 个副本会被放置在与第 1 个副本相同的机架的其他节点上。
-
如果还有更多的副本,则继续从集群中随机选择数据节点进行存放。
数据读取
HDFS 提供了一个 API 可以确定一个数据节点所属的机架 ID,客户端也可以调用 API 获取自己所属的机架 ID。当客户端读取数据时,从名称节点获得数据块不同副本的存放位置列表,列表中包含了副本所在的数据节点,可以调用 API 来确定客户端和这些数据节点所属的机架 ID。当发现某个数据块副本对应的机架 ID 和客户端对应的机架 ID 相同时,就优先选择该副本读取数据,如果没有发现,就随机选择一个副本读取数据。
数据复制
HDFS 的数据复制采用了流水线复制的策略,大大提高了数据复制过程的效率。当客户端要往 HDFS 中写入一个文件时,这个文件会首先被写入本地,并被切分成若干个块,每个块的大小是由 HDFS 的设定值来决定的。每个块都向 HDFS 集群中的名称节点发起写请求,名称节点会根据系统中各个数据节点的使用情况,选择一个数据节点列表返回给客户端,然后客户端就把数据首先写入列表中的第 1 个数据节点,同时把列表传给第 1 个数据节点,当第 1 个数据节点接收到4 KB 数据的时候,写入本地,并且向列表中的第 2 个数据节点发起连接请求,把自己已经接收到的 4 KB 数据和列表传给第 2 个数据节点。当第 2 个数据节点接收到 4 KB 数据的时候,写入本地,并且向列表中的第 3 个数据节点发起连接请求,依此类推,列表中的多个数据节点形成一条数据复制的流水线。最后,当文件写完的时候,数据复制也同时完成。
3.6 HDFS数据读写过程※ 理解如何读和如何写 P57-P58
在介绍 HDFS 的数据读写过程之前,需要简单介绍一下相关的类。FileSystem 是一个通用文件系统的抽象基类,可以被分布式文件系统继承,所有可能使用 Hadoop 文件系统的代码都要使用到这个类。Hadoop 为 FileSystem 这个抽象类提供了多种具体的实现,DistributedFileSystem 就是 FileSystem 在 HDFS 中的实现。FileSystem 的 open()方法返回的是一个输入流 FSDataInputStream对象,在 HDFS 中具体的输入流就是 DFSInputStream;FileSystem 中的 create()方法返回的是一个输出流 FSDataOutputStream 对象,在 HDFS 中具体的输出流就是 DFSOutputStream。
读数据的过程
客户端连续调用 open()、read()、close()读取数据时,HDFS 内部的执行过程如下(见图 3-8)。

-
客户端通过 FileSystem.open()打开文件,相应地,在 HDFS 中 DistributedFileSystem 具体实现了 FileSystem。因此,调用 open()方法后,DistributedFileSystem 会创建输入流 FSData InputStream,对于HDFS 而言,具体的输入流就是 DFSInputStream。
-
在 DFSInputStream 的构造函数中,输入流通过 ClientProtocal.getBlockLocations()远程调用名称节点,获得文件开始部分数据块的保存位置。对于该数据块,名称节点返回保存该数据块的所有数据节点的地址,同时根据距离客户端的远近对数据节点进行排序;然后,DistributedFileSystem 会利用 DFSInputStream 来实例化 FSDataInputStream,并返回给客户端,同时返回数据块的数据节点地址。
-
获得输入流 FSDataInputStream 后,客户端调用 read()方法开始读取数据。输入流根据前面的排序结果,选择距离客户端最近的数据节点建立连接并读取数据。
-
数据从该数据节点读到客户端;当该数据块读取完毕时,FSDataInputStream 关闭和该数据节点的连接。
-
输入流通过 getBlockLocations()方法查找下一个数据块(如果客户端缓存中已经包含了该数据块的位置信息,就不需要调用该方法)。
写数据的过程
客户端向 HDFS 写数据是一个复杂的过程,这里介绍一下在不发生任何异常的情况下,客户端连续调用 create()、write()和 close()时,HDFS 内部的执行过程(见图 3-9)。

-
客户端通过 FileSystem.create()创建文件,相应地,在 HDFS 中 Distributed FileSystem 具体实现了 FileSystem。因此,调用 create ()方法后,DistributedFileSystem 会创建输出流 FSDataOutputStream,对于 HDFS 而言,具体的输出流就是 DFSOutputStream。
-
然后,DistributedFileSystem 通过 RPC 远程调用名称节点,在文件系统的命名空间中创建一个新的文件。名称节点会执行一些检查,比如文件是否已经存在,客户端是否有权限创建文件等。检查通过之后,名称节点会构造一个新文件,并添加文件信息。远程方法调用结束后,DistributedFileSystem会利用 DFSOutputStream 来实例化 FSDataOutputStream,并返回给客户端,客户端使用这个输出流写入数据。
-
获得输出流 FSDataOutputStream 以后,客户端调用输出流的 write()方法向 HDFS 中对应的文件写入数据。
-
客户端向输出流 FSDataOutputStream 中写入的数据会首先被分成一个个的分包,这些分包被放入 DFSOutputStream 对象的内部队列。输出流 FSDataOutputStream 会向名称节点申请保存文件和副本数据块的若干个数据节点,这些数据节点形成一个数据流管道。队列中的分包最后被打包成数据包,发往数据流管道中的第 1 个数据节点,第 1 个数据节点将数据包发送给第 2 个数据节点,第 2 个数据节点将数据包发送给第 3 个数据节点,这样,数据包会流经管道上的各个数据节点(即 3.5.2 节介绍的流水线复制策略)。
-
因为各个数据节点位于不同的机器上,数据需要通过网络发送。因此,为了保证所有数据节点的数据都是准确的,接收到数据的数据节点要向发送者发送“确认包”(ACK Packet)。确认包沿着数据流管道逆流而上,从数据流管道依次经过各个数据节点并最终发往客户端,当客户端收到应答时,它将对应的分包从内部队列移除。不断执行(3)~(5)步,直到数据全部写完。
-
客户端调用 close()方法关闭输出流,此时开始,客户端不会再向输出流中写入数据,所以,当 DFSOutputStream 对象内部队列中的分包都收到应答以后,就可以使用 ClientProtocol. complete()方法通知名称节点关闭文件,完成一次正常的写文件过程。
3.7 HDFS编程实践
(1)HDFS Shell的基本操作 P59-P60 -同时复习头歌平台HDFS操作命令
在 Linux 终端窗口,我们可以利用 Shell 命令对 Hadoop 进行操作。利用这些命令可以完成HDFS 中文档的上传、下载、复制、查看文件信息、格式化名称节点等操作。关于 HDFS 的 Shell命令有一个统一的格式:
hadoop command [genericOptions] [commandOptions]
HDFS 有很多命令,其中 fs 命令可以说是 HDFS 最常用的命令,利用 fs 命令可以查看 HDFS的目录结构、上传和下载数据、创建文件等。该命令的用法如下:
hadoop fs [genericOptions] [commandOptions]
具体如下。
-
hadoop fs -ls <path>。显示指定的文件的详细信息。 -
hadoop fs -ls -R <path>。ls 命令的递归版本。 -
hadoop fs -cat <path>。将指定的文件的内容输出到标准输出(stdout)。 -
hadoop fs -chgrp [-R] group <path>。将指定的文件所属的组改为 group,使用-R 对 指定的文件夹内的文件进行递归操作。这个命令只适用于超级用户。 -
hadoop fs -chown [-R] [owner] [: [group]] <path>。改变指定的文件所有者,-R 用于递归改变文件夹内的文件所有者。这个命令只适用于超级用户。 -
hadoop fs -chmod [-R] <mode> <path>。将指定的文件的权限更改为。这个命令只适用于超级用户和文件所有者。 -
hadoop fs -tail [-f] <path>。将指定的文件最后 1KB 的内容输出到标准输出(stdout)上,-f 选项用于持续检测新添加到文件中的内容。 -
hadoop fs -stat [format] <path>。以指定的格式返回指定的文件的相关信息。当不指定 format 的时候,返回文件 的创建日期。 -
hadoop fs -touchz <path>。创建一个指定的空文件。 -
hadoop fs -mkdir [-p] <paths>。创建指定的一个或多个文件夹,-p 选项用于递归创建子文件夹。 -
hadoop fs -copyFromLocal <localsrc> <dst>。将本地源文件复制到路径指定的文件或文件夹中。 -
hadoop fs -copyToLocal [-ignorecrc] [-crc] <target> <localdst>。将目标文件复制到本地文件或文件夹中,可用-ignorecrc 选项复制 CRC 校验失败的文件,使用-crc 选项复制文件以及 CRC 信息。 -
hadoop fs -cp <src> <dst>。将文件从源路径复制到目标路径。 -
hadoop fs -du <path>。显示指定的文件或文件夹中所有文件的大小。 -
hadoop fs -expunge。清空回收站,请参考 HDFS 官方文档以获取更多关于回收站特性的信息。 -
hadoop fs -get [-ignorecrc] [-crc] <src> <localdst>。复制指定的文件到本地文件系统指定的文件或文件夹,可用-ignorecrc 选项复制 CRC 校验失败的文件,使用-crc 选项复制文件以及 CRC 信息。 -
hadoop fs -getmerge [-nl] <src> <localdst>。对指定的源目录中的所有文件进行合并,写入指定的本地文件。-nl 是可选的,用于指定在每个文件结尾添加一个换行符。 -
hadoop fs -put <localsrc> <dst>。从本地文件系统中复制指定的单个或多个源文件到指定的目标文件系统中,也支持从标准输入(stdin)中读取输入并写入目标文件系统。 -
hadoop fs -moveFromLocal <localsrc> <dst>。与 put 命令功能相同,但是文件上传结束后会从本地文件系统中删除指定的文件。 -
hadoop fs -mv <src> <dest>。将文件从源路径移动到目标路径。 -
hadoop fs -rm <path>。删除指定的文件,只删除非空目录和文件。 -
hadoop fs -rm -r <path>。删除指定的文件夹及其下的所有文件,-r 选项表示递归删除子目录。 -
hadoop fs -setrep [-R] <path>。改变指定的文件的副本系数,-R 选项用于递归改变目录下所有文件的副本系数。 -
hadoop fs -test -[ezd] <path>。检查指定的文件或文件夹的相关信息。不同选项的作用如下。 -
-e 检查文件是否存在,如果存在则返回 0,否则返回 1。
-
-z 检查文件是否是 0 字节,如果是则返回 0,否则返回 1。
-
-d 如果路径是个目录,则返回 1,否则返回 0。
-
-
hadoop fs -text <path>。将指定的文件输出为文本格式,文件的格式也允许是 zip 和TextRecordInputStream 等。
习题
单选题
-
分布式文件系统指的是什么?(A)
A、把文件分布存储到多个计算机节点上,成千上万的计算机节点构成计算机集群
B、用于在 Hadoop 与传统数据库之间进行数据传递
C、一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统
D、一种高吞吐量的分布式发布订阅消息系统,可以处理消费者规模的网站中的所有动作流数据
-
下面哪一项不属于计算机集群中的节点?(B)
A、主节点(Master Node)
B、源节点(SourceNode)
C、名称结点(NameNode)
D、从节点(Slave Node)
-
在HDFS中,默认一个块多大?(A)
A、64MB
B、32KB
C、128KB
D、16KB
-
下列哪一项不属于HDFS采用抽象的块概念带来的好处?(C)
A、简化系统设计
B、支持大规模文件存储
C、强大的跨平台兼容性
D、适合数据备份
-
在HDFS中,NameNode的主要功能是什么?(D)
A、维护了block id 到datanode本地文件的映射关系
B、存储文件内容
C、文件内存保存在磁盘中
D、存储元数据
-
下面对FsImage的描述,哪个是错误的?(D)
A、FsImage文件没有记录每个块存储在哪个数据节点
B、FsImage文件包含文件系统中所有目录和文件inode的序列化形式
C、FsImage用于维护文件系统树以及文件树中所有的文件和文件夹的元数据
D、FsImage文件记录了每个块具体被存储在哪个数据节点
-
下面对SecondaryNameNode第二名称节点的描述,哪个是错误的?(A)
A、SecondaryNameNode一般是并行运行在多台机器上
B、它是用来保存名称节点中对HDFS元数据信息的备份,并减少名称节点重启的时间
C、SecondaryNameNode通过HTTP GET方式从NameNode上获取到FsImage和EditLog文件,并下载到本地的相应目录下
D、SecondaryNameNode是HDFS架构中的一个组成部分
-
HDFS采用了什么模型?(B)
A、分层模

5799

被折叠的 条评论
为什么被折叠?



