2021年 全网最细大数据学习笔记(一):初识 Hadoop

一、大数据

随着近来计算机技术和互联网的发展,大数据 这个名词越来越多地进入到我们的视野中,大数据的快速发展也无时刻影响着我们的生活。

1、大数据的定义

大数据从字面来理解就是 大量的数据。日常生活离不开数据,可以说每时每刻都在产生着数据。例如,一分钟可以做些什么事呢?在日常生活中,一分钟可能连一页书都看不完。但是一分钟内产生的数据却是庞大的。据统计,在一分钟内,YouTube 用户上传 300 小时的新视频,电子邮件用户发送 2.4 亿条信息,Google 收到超过 278 万个搜索查询,Facebook 用户点赞 4166 667 次,消费者在网购上花费 272070 美元,Twitter 用户发布 347222 条推文,Instagram 用户每分钟发布 123060 张照片,Netflix 用户观看 77160 个小时的视频,微信红包的收发 1527777 个。

这些数据还在不停地增长,那么大数据究竟是什么?国际顶级权威咨询机构麦肯锡 说:“大数据指的是所涉及的数据集规模已经超过了传统数据库软件获取、存储、管理和分析的能力。这是一个被故意设计成的具有主观性的定义,并且是一个关于多大的数据集才能被认为是大数据的可变定义,即并不定义大于一个特定数字的 TB 才叫大数据。因为随着技术的不断发展,符合大数据标志的数据集容量也会增长;并且定义随不同行业也有变化,这也依赖于在一个特定行业通常使用何种软件和数据集有多大。因此,大数据在今天不同行业中的范围可以从几十 TB 到几 PB”。

从上面的定义中可以看出:

  1. 多大的数据才算大数据,这并没有一个明确的界定,且不同行业有不同的标准。
  2. 大数据不仅仅只是大,它还包含了数据集规模已经超过了传统数据库软件获取、存储、分析和管理能力这一层意思。
  3. 大数据不一定永远是大数据,大数据的标准是可变的,在 20 年前 1GB 的数据也可以叫大数据。可见,随着计算机硬件技术的发展,符合大数据标志的数据集容量也会增长。

现在所说的大数据实际上更多是从应用的层面,比如某公司搜集、整理了大量的用户行为信息,然后通过数据分析手段对这些信息进行分析从而得出对公司有利用价值的结果。比如,头条、热搜的产生,就是建立在对海量用户的阅读信息的搜集、分析之上。这就是大数据在现实中的具体体现。

2、大数据的特点

IBM 提出大数据具有 5V 特点,分别为:Volume(大量)、Velocity(高速)、Variety(多样)、Value(低价值密度)、Veracity(真实性),下面具体说明此 5V 特点。

  1. Volume:巨大的数据量,采集、存储和计算的量都非常大。大数据的起始计量单位至少是 PB(1000TB)、EB(100万TB)或ZB(10亿TB)。
    8 bit = 1 Byte 一字节
    1024 B = 1 KB (KiloByte) 千字节
    1024 KB = 1 MB (MegaByte) 兆字节
    1024 MB = 1 GB (GigaByte) 吉字节
    1024 GB = 1 TB (TeraByte) 太字节
    1024 TB = 1 PB (PetaByte) 拍字节
    1024 PB = 1 EB (ExaByte) 艾字节
    1024 EB = 1 ZB (ZetaByte) 泽字节
    1024 ZB = 1 YB (YottaByte) 尧字节
    1024 YB = 1BB(Brontobyte)珀字节
    1024 BB = 1 NB (NonaByte) 诺字节
    1024 NB = 1 DB (DoggaByte)刀字节
    
  2. Velocity:因为要保证数据的时效性,数据增长速度和处理速度必须要迅速。比如搜索引擎要求几分钟前的新闻都能够被用户查询到,个性化推荐算法尽可能要求实时完成推荐。这是大数据区别于传统数据挖掘的显著特征。
  3. Variety:种类和来源多样化。包括结构化、半结构化和非结构化数据,具体表现为网络日志、音频、视频、图片、地理位置信息等,多类型的数据对数据的处理能力提出了更高的要求。
  4. Value:数据价值密度相对较低。随着互联网以及物联网的广泛应用,信息感知无处不在,信息海量,但价值密度较低。那么如何结合业务逻辑并通过强大的机器算法来挖掘数据价值,是大数据时代最需要解决的问题。
  5. Veracity:数据的准确性和可信赖度,即为数据的质量。

3、大数据行业应用

通过上面的介绍,读者或许并不能直观地理解何为大数据,下面通过几个大数据的应用案例来更形象地了解大数据。在日常生活中,最常见的大数据应用的例子就是手机中各种社交、娱乐、购物类的 App。例如听歌类 App 有 每日推荐 版块,此版块中的歌曲就是根据用户平时听歌类型或者同一歌手演唱的歌曲而来的;使用淘宝 App,浏览商品后,主页显示或者推送的都是类似商品,如下图所示,类似的 App 有很多,可见大数据已经广泛融入了我们的日常生活中。
在这里插入图片描述
除了手机 App,大数据的应用已经渗透到各行各业中。

(1) 医疗大数据。除了较早前就开始利用大数据的互联网公司,医疗行业是让大数据分析最先发扬光大的传统行业之一。Seton Healthcare 是采用 IBM 最新沃森技术医疗保健内容分析预测的首个客户。该技术允许企业找到大量病人相关的临床医疗信息,通过大数据处理,更好地分析病人的信息。在加拿大多伦多的一家医院,针对早产婴儿,每秒钟有超过 3000 次的数据读取。通过这些数据分析,医院能够提前知道哪些早产儿出现问题并且有针对性地采取措施,避免早产婴儿夭折。同时大数据让更多的创业者更方便地开发产品,比如通过社交网络来收集数据的健康类 App。也许未来数年后,它们搜集的数据能让医生给你的诊断变得更为精确,比方说不是通用的 成人每日三次,一次一片,而是检测到你的血液中药剂已经代谢完成会自动提醒你再次服药,等等。

(2) 金融大数据。大数据在金融行业应用范围较广,典型的案例有花旗银行利用 IBM 沃森电脑为财富管理客户推荐产品;美国银行利用客户点击数据集为客户提供特色服务,如设定竞争的信用额度;招商银行利用客户刷卡、存取款、电子银行转账、微信评论等行为数据进行分析,每周给客户发送针对性广告信息,里面有顾客可能感兴趣的产品和优惠信息。大数据在金融行业的应用可以总结为以下五个方面:

扫描二维码关注公众号,回复: 13134311 查看本文章
  • 精准营销:依据客户消费习惯、地理位置、消费时间进行推荐。
  • 风险管控:依据客户消费和现金流提供信用评级或融资支持,利用客户社交行为记录实施信用卡反欺诈。
  • 决策支持:利用决策树技术进抵押贷款管理,利用数据分析报告实施产业信贷风险控制。
  • 效率提升:利用金融行业全局数据了解业务运营薄弱点,利用大数据技术加快内部数据处理速度。
  • 产品设计:利用大数据计算技术为财富客户推荐产品,利用客户行为数据设计满足客户需求的金融产品。

(3) 交通大数据。目前,交通的大数据应用主要在两个方面,一方面可以利用大数据传感器数据来了解车辆通行密度,合理进行道路规划包括单行线路规划;另一方面可以利用大数据来实现即时信号灯调度,提高已有线路运行能力。科学的安排信号灯是一个复杂的系统工程,必须利用大数据计算平台才能计算出一个较为合理的方案。科学的信号灯安排将会提高 30% 左右已有道路的通行能力。在美国,政府依据某一路段的交通事故信息来增设信号灯,使交通事故率降低了 50% 以上。依靠大数据将会提高航班管理的效率,航空公司利用大数据可以提高上座率,降低运行成本。铁路利用大数据可以有效安排客运和货运列车,提高效率、降低成本。

(4) 教育大数据。在课堂上,数据不仅可以帮助改善教育教学,在重大教育决策制定和教育改革方面,大数据更有用武之地。美国利用数据来诊断处在辍学危险期的学生、探索教育开支与学生学习成绩提升的关系、探索学生缺课与成绩的关系。比如美国某州公立中小学的数据分析显示,在语文成绩上,教师高考分数和学生成绩呈现显著的正相关。也就是说,教师的高考成绩与他们现在所教语文课上的学生学习成绩有很明显的关系;教师的高考成绩越好,学生的语文成绩也越好。这个关系让我们进一步探讨其背后真正的原因。其实,教师高考成绩高低在某种程度上是教师的某个特点在起作用,而正是这个特点对教好学生起着至关重要的作用,因此教师的高考分数可以作为挑选教师的一个指标。如果有了充分的数据,便可以发掘更多的教师特征和学生成绩之间的关系,从而为挑选教师提供更好的参考。

大数据还可以帮助家长和教师甄别出孩子的学习差距,提供有效的学习方法。比如,美国的麦格劳·希尔教育出版集团就开发出了一种预测评估工具,帮助学生评估他们已有的知识和达标测验所需程度的差距,进而指出学生有待提高的地方。评估工具可以让教师跟踪学生学习情况,从而找到学生的学习特点和方法。有些学生适合按部就班,有些则更适合图式信息和整合信息的非线性学习。这些都可以通过大数据搜集和分析很快识别出来,从而为教育教学提供坚实的依据。

(5) 商业大数据。全球零售业的巨头沃尔玛也通过大数据获益。公司在对消费者购物行为进行分析时发现,男性顾客在购买婴儿尿片时,常常会顺便搭配几瓶啤酒来犒劳自己,于是推出了将啤酒和尿布捆绑销售的促销手段。如今,这一 啤酒+尿布 的数据分析成果也成了大数据技术应用的经典案例。

大家可以百度一下 买披萨的故事,深入了解大数据。

基于大数据应用的行业实例数不胜数,并且都为各个行业带来了可观的效益,甚至改善了人们的生活水平。随着大数据的应用越来越广泛,应用的行业也越来越多,我们每日都可以看到大数据的一些新颖的应用,从而帮助人们从中获取到真正有用的价值。

4、Hadoop 与大数据

大数据目前分为四大块:大数据技术、大数据工程、大数据科学和大数据应用。其中云计算是属于大数据技术的范畴,是一种通过 Internet 以服务的方式提供动态可伸缩的虚拟化的资源的计算模式。它利用由大量计算节点构成的可动态调整的虚拟化计算资源,通过并行化和分布式计算技术,实现业务质量的可控的大数据处理的计算技术。

那么这种计算模式如何实现呢,Hadoop 的来临解决了这个问题。作为云计算技术中的佼佼者,Hadoop 以其低成本和高效率的特性赢得了市场的认可,下图显示了云计算、大数据和 Hadoop 的关系。
在这里插入图片描述
Hadoop 是用一种可靠、高效、可扩展的方式存储、管理大数据。Hadoop 及其生态圈为管理、挖掘大数据提供了一套成熟可靠的解决方案。从功能上说,Hadooop 可以称作一个 大数据管理和分析平台

Hadoop 是一个开源的大数据分析软件,或者说编程模式。它是通过分布式的方式处理大数据的,因为开源的原因现在很多企业都在运用 hadoop 的技术来解决一些大数据的问题,在数据仓库方面 hadoop 是非常强大的。但在数据集市以及实时的分析展现层面上,hadoop 也有着明显的不足。

5、其他大数据处理平台

大数据技术正渗透到各行各业。作为数据分布式处理系统的典型代表,Hadoop 已成为该领域的主要核心。但 Hadoop 并不等于大数据,它只是一个成功的分布式系统,用于处理离线数据。大数据领域中还有许多其他类型的处理系统。除了 Hadoop 之外,Storm 和 Apache Spark 也是优秀的大数据处理平台,下面分别介绍。

(1) Storm。在介绍 Storm 之前,首先介绍一下什么是流式数据。在现实生活中,很多数据都属于流式数据,即计算的输入并不是一个文件,而是源源不断的数据流,如网上实时交易所产生的数据。用户需要对这些数据进行分析,否则数据的价值会随着时间的流逝而消失。Storm 是一个成熟的分布式流计算平台,擅长流处理或者复杂事件处理。Storm 有以下几个关键特性:

  1. 使用场景广泛。
  2. 具备良好的伸缩性。
  3. 保证数据无丢失。
  4. 异常健壮。
  5. 具备良好的容错性。
  6. 支持多语言编程。

需要注意的是,Storm 采用的计算模型不是 MapReduce,同时 MapReduce 也已经被证明不适合做流处理。另外,Storm 运行在 YARN 之上,从这个角度来说,它属于 Hadoop 组件。

(2) Apache Spark。Apache Spark 是一个基于内存计算的开源的集群计算系统,目的是让数据分析更加快速。Spark 非常小巧玲珑,由加州伯克利大学 AMP 实验室的 Matei 为主的小团队所开发。使用的语言是 Scala,项目核心部分的代码只有 63 个 Scala 文件,非常短小精悍。

Spark是一种与 Hadoop 相似的开源集群计算环境,但是两者之间还存在一些不同之处,这些不同之处使 Spark 在负载方面表现得更加优越,换句话说,Spark 启用了内存分布数据集,除了能够提供交互式查询外,它还可以优化迭代工作负载。

Spark 还引进了名为弹性分布式数据集(RDD)的抽象。RDD 是分布在一组节点中的只读对象集合。这些集合是弹性的,如果数据集一部分丢失,则可以对它们进行重建。RDD 的计算速度在特定场景下大幅度领先 MapReduce。Spark 的主要优势包括以下几个方面:

  1. 提供了一套支持 DAG 的分布式并行计算的编程框架,减少多次计算之间中间结果写到 HDFS 的开销。
  2. 提供 Cache 极致来支持需要反复迭代计算或者多次数据共享,减少数据读取的 I/O 开销。
  3. 使用多线程池模型来减少任务启动开销,减少 Shuffle 过程中不必要的 Sort 操作以及减少磁盘 I/O 操作。
  4. 广泛的数据集操作类型。

目前 Spark 的发展势头十分迅猛,围绕 Spark 的生态圈已初具规模,如下图所示:
在这里插入图片描述
其中 Spark SQL 为支持 SQL 的结构化查询工具,Spark Streaming 为 Spark 的流计算框架,MLlib 集成了主流机器学习算法,GraphX 则是 Spark 的图计算框架。

Spark 具有很强的适应性,能够读取 HDFS、S3、HBase 等为持久层读写原生数据,能够以 Mesos、YARN 和自身携带的 Standalone 作为资源管理器调度 job,来完成 Spark 应用程序的计算。

与 Hadoop 类似,Spark 支持单节点集群或多节点集群。对于多节点操作,Spark 依赖于 Mesos 集群管理器。Mesos 为分布式应用程序的资源共享和隔离提供了一个有效平台。该设置允许 Spark 与 Hadoop 共存于节点的一个共享池中。

官方资料介绍 Spark 可以将 Hadoop 集群中的应用在内存中的运行速度提升 100 倍,甚至能够将应用在磁盘上的运行速度提升 10 倍。

6、大数据人才

大数据行业越来越受欢迎,同时对大数据人才的能力和要求也日益增加,大数据都有哪些岗位?学习大数据需要具备哪些能力?下面一一为大家介绍。大数据从业者的岗位包括以下方面:

  1. 首席数据官。首席数据官(Chief Data Officer,简称 CDO)和数据科学家(或称数据分析师)是企业所需的大数据人才的典型代表。CDO 主要是负责根据企业的业务需求、选择数据库以及数据抽取、转换和分析等工具,进行相关的数据挖掘、数据处理和分析,并且根据数据分析的结果战略性地对企业未来的业务发展和运营提供相应的建议和意见。通过 CDO 加强数据管控,可提高对业务风险的控制水平,是企业应对经济、金融危机的重要措施。

    一位合格的 CDO 须具备五种能力:统计学、数学的能力;洞悉网络产业和发展趋势的能力;IT 设备和技术选型的能力;商业运营的能力;管理和沟通的能力。他们不仅要关注系统架构中所承载的内容,更要担任企业决策和数据分析汇整的枢纽;要熟悉面向服务的架构(SOA)、商业智能(BI)、大规模数据集成系统、数据存储交换机制,以及数据库、可扩展标记语言(XML)、电子数据交换(EDI)等系统架构;要深入了解企业的业务状况和所处的产业背景,清楚地了解组织的数据源、大小和结构等,才可将数据资料与业务状态联合起来分析,并提出相对应的市场和产品策略。

  2. 数据科学家(数据分析师)。数据科学家是指能采用科学方法、运用数据挖掘工具对复杂多量的数字、符号、文字、网址、音频或视频等信息进行数字化重现与认识,并能寻找新的数据洞察的工程师或专家。一个优秀的数据科学家需要具备的素质有:数据采集、数学算法、数学软件、数据分析、预测分析、市场应用、决策分析等。

    数据科学家应当能够熟练使用统计工具。为了提高工作效率,数据科学家要熟练使用一种或多种分析工具。Excel 是当前最为流行的小规模数据处理工具,SAS 工具也在广泛应用。而以 Hadoop 为代表的数据管理工具,也越来越广泛地应用于数据业务中。

  3. 大数据开发工程师。大数据开发工程师应具备:良好的数学背景、很强的计算机编程能力,除此之外,还应具有特定应用领域或行业的知识。大数据开发工程师这个角色很重要的一点是,不能脱离市场,因为大数据只有和特定领域的应用结合起来才能产生价值。不能只懂数据,还要有商业头脑,不论对零售、医药、游戏还是旅游等行业,都能对其中某些领域有良好的裂解,最好与企业的业务方向一致。

    对于一名优秀的大数据开发工程师,除了上面列出三点能力要求外,还有一个非常重要的要求,即必须深入理解大数据系统架构,各个组件的基本原理,实现机制甚至其中涉及的算法等。只有这样,他们才能构建一个强大且稳定的分布式集群系统,并充分利用其分布式存储和并行计算能力来处理大数据。

    对大多数企业来说,因为 Hadoop 开源且高效,所以形成了以 Hadoop 为核心的大数据生态系统。那么大数据开发工程师,就必须深入理解以 Hadoop 为核心的大数据生态系统的系统构架,原理及开发应用,并具有充分的优化经验,才能利用 Hadoop 处理大规模数据,甚至在 Hadoop 平台上开发特定应用的新组件。当然,大数据开发工程师还需要具有大数据采集、大数据预处理、大数据存储与管理、分析挖掘与展现应用等大数据相关技术。

  4. 大数据运维工程师。企业除了大数据分析人才、开发人才外,还需要有数据采集、管理、运维方面的人才。由于大数据系统是一个非常复杂的系统,大数据运维工程师应掌握非常多的内容:熟悉 Java、Python、Shell 等语言;熟悉 Hadoop 工作原理,对 HDFS、MapReduce 运行过程有深入理解,有 MapReduce 开发经验,熟悉数据仓库体系构架,熟悉数据建模;熟悉至少一种数据库,如 MySQL、Oracle、SQL Server,熟练使用 SQL 语言,懂 SQL 调优;熟悉大数据生态圈及其他技术,如 HBase、Storm、Spark、Impala 等技术。

二、什么是 Hadoop

1、Hadoop 简介

Hadoop 是 Apache 软件基金会 旗下的一个 开源分布式计算平台。以分布式文件系统 HDFS(Hadoop Distributed File System) 和 MapReduce(Google MapReduce 的开源实现) 为核心的 Hadoop,为用户提供了系统底层透明的分布式基础构架。

HDFS 的高容错性、高伸缩性、高性能等优点允许用户将 Hadoop 部署在廉价的硬件上,形成分布式系统,它负责数据的分布式存储和备份,文件写入后只能读取,不能修改;MapReduce 分布式编程模型允许用户在不了解分布式系统底层细节的情况下开发并行应用程序,包括 Map(映射)和 Reduce(规约)两个过程。

用户可以利用 Hadoop 轻松地组织计算机资源,从而搭建自己的分布式计算平台,并且可以充分利用集群的计算和存储能力,完成海量数据的处理。

简而言之,Hadoop 是适合大数据的分布式存储和计算的平台。狭义上来说,hadoop 就是单独指代 hadoop 这个软件;广义上来说,hadoop 指代大数据的一个生态圈,包括很多其他的软件。从上面的 Hadoop 介绍可以总结出 Hadoop 具有如下几个概念。

  1. Hadoop 是一个框架。
  2. Hadoop 适合处理大规模数据。
  3. Hadoop 被部署在一个集群上。

2、Hadoop 的发展历史

Hadoop 的发展距今不足 20 年,不能算是一个有丰厚底蕴或是新兴的技术,但是为大数据做出的贡献是巨大的。下面介绍 Hadoop 的发展历史。

(1)Hadoop 的起源

Hadoop 最早起源于 Lucene 的子项目 Nutch。Nutch 的设计目标是构建一个大型的全网搜索引擎,包括网页抓取、索引、查询等功能,但随着抓取网页数量的增加,遇到了严重的可扩展性问题——如何解决数十亿网页的存储和索引问题。2003年、2004年谷歌发表的三篇论文为该问题提供了可行的解决方案:

1、分布式文件系统(GFS),可用于处理海量网页的存储。
2、分布式计算框架(MapReduce),可用于处理海量网页的索引计算问题。
3、分布式数据存储系统(BigTable),用来处理海量的数据的一种非关系型的数据库。

谷歌虽然没有将其核心技术开源,但是这三篇论文已经向开源社区的 大牛们 指明了方向,一位大牛:Doug Cutting,使用 Java 语言对 Google 的云计算核心技术(主要是 GFS 和 MapReduce )做了开源的实现,使 Nutch 性能飙升。随后 Yahoo 招聘 Doug Cutting 继续完善 Hadoop 项目。2005年,Hadoop 作为 Lucene 的子项目 Nutch 的一部分正式引入 Apache 基金会。2006年2月被分离出来,成为一套完整独立的软件,起名为 Hadoop。到2008年1月,Hadoop 成为 Apache 顶级项目(同年,cloudera 公司成立,全球知名企业级数据管理和数据分析平台提供商),迎来了它的快速发展期。

Hadoop 的成长过程为:Lucene ⇒ Nutch ⇒ Hadoop
Hadoop的核心组件的演变关系:
GFS–>HDFS
Google MapReduce–>Hadoop MapReduce
BigTable–>HBase

(2)Hadoop的发展历程。Hadoop 的发展历程如下图所示:
在这里插入图片描述
接下来看一下 Hadoop 的发行版,什么叫发行版呢?举一个大家接触比较多的例子,目前手机操作系统有两大阵营,一个是苹果的 IOS,还有一个是谷歌的 Android。IOS 是闭源的,也就不存在多个发行版了,如果你基于 IOS 改造一下,弄一个新的手机系统出来,会被苹果告破产的。所以 IOS 是没有其它发行版的,只有官方这一个版本。

Android 是开源的,所以基于这个系统,很多手机厂商都会对它进行封装改造,因为这些手机厂商会感觉原生的 Android 系统的界面看起来比较 low,或者某一些功能不太适合中国人的使用习惯,所以他们就会进行改造,例如国内的魅族、小米、锤子这些手机厂商都基于 Android 打造了自己的手机操作系统,那这些就是 Android 系统的一些发行版。

那针对 Hadoop 也是一样的,目前 Hadoop 已经演变为大数据的代名词,形成了一套完善的大数据生态系统,并且 Hadoop 是 Apache 开源的,它的开源协议决定了任何人都可以对其进行修改,并作为开源或者商业版进行发布/销售。

所以目前 Hadoop 发行版非常的多,有华为发行版、Intel 发行版、Cloudera 发行版 CDH、Hortonworks 发行版 HDP,这些发行版都是基于 Apache Hadoop 衍生出来的。在这里我们挑几个重点的分析一下:

首先是官方原生版本:Apache Hadoop。Apache 是一个 IT 领域的公益组织,类似于红十字会,Apache 这个组织里面的软件都是开源的,大家可以随便使用,随便修改,后续博主博文中的学习笔记 99% 的大数据技术框架都是 Apache 开源的,所以在这里我们会学习原生的 Hadoop,只要掌握了原生 Hadoop 使用,后期想要操作其它发行版的 Hadoop 也是很简单的,其它发行版都是会兼容原生 Hadoop 的,这一点读者不用担心。 原生 Hadoop 的缺点是没有技术支持,遇到问题需要自己解决,或者通过官网的社区提问,但是回复一般比较慢,也不保证能解决问题, 还有一点就是原生 Hadoop 搭建集群的时候比较麻烦,需要修改很多配置文件,如果集群机器过多的话,针对运维人员的压力是比较大的,这块等后面读者自己在搭建集群的时候大家就可以感受到了。

那接着往下面看 Cloudera Hadoop(CDH)。注意了,CDH 是一个商业版本,它对官方版本做了一些优化,提供收费技术支持,提供界面操作,方便集群运维管理 CDH 目前在企业中使用的还是比较多的,虽然 CDH 是收费的,但是 CDH 中的一些基本功能是不收费的,可以一直使用,高级功能是需要收费才能使用的,如果不想付费,也能凑合着使用。

还有一个比较常用的是 HortonWorks(HDP)。它呢,是开源的,也提供的有界面操作,方便运维管理,一般互联网公司偏向于使用这个。注意了,再爆一个料,最新消息,目前 HDP 已经被 CDH 收购,都是属于一个公司的产品,后期 HDP 是否会合并到 CDH 中,还不得而知,具体还要看这个公司的运营策略了。

最终的建议:建议在实际工作中搭建大数据平台时选择 CDH 或者 HDP,方便运维管理,要不然,管理上千台机器的原生 Hadoop 集群,运维同学是会哭的。注意了,学习过程中我们使用原生 Hadoop,在最后博主会说一下 CDH 和 HDP 的使用。

目前 Hadoop 经历了三个大的版本
在这里插入图片描述
从 1.x 到 2.x 再到 3.x。每一个大版本的升级都带来了一些质的提升,下面我们先从架构层面分析一下这三大版本的变更:
在这里插入图片描述
从 Hadoop1.x 升级到 Hadoop2.x,架构发生了比较大的变化,这里面的 HDFS 是分布式存储,MapRecue 是分布式计算,咱们前面说了 Hadoop 解决了分布式存储和分布式计算的问题,对应的就是这两个模块。在 Hadoop2.x 的架构中,多了一个模块 YARN,这个是一个负责资源管理的模块,那在 Hadoop1.x 中就不需要进行资源管理吗?也是需要的,只不过是在 Hadoop1.x 中,分布式计算和资源管理都是 MapReduce 负责的,从 Hadoop2.x 开始把资源管理单独拆分出来了,拆分出来的好处就是,YARN 变成了一个公共的资源管理平台,在它上面不仅仅可以跑 MapReduce 程序,还可以跑很多其他的程序,只要你的程序满足 YARN 的规则即可。Hadoop 的这一步棋走的是最好的,这样自己摇身一变就变成了一个公共的平台,由于它起步早,占有的市场份额也多,后期其它新兴起的计算框架一般都会支持在 YARN 上面运行,这样 Hadoop 就保证了自己的地位。后面学习笔记中的Spark、Flink 等计算框架都是支持在 YARN 上面执行的,并且在实际工作中也都是在 YARN 上面执行。Hadoop3.x 的架构并没有发生什么变化,但是它在其他细节方面做了很多优化。在这里我挑几个常见点说一下:

  1. 最低 Java 版本要求从 Java7 变为 Java8
  2. 在 Hadoop 3.x 中,HDFS 支持纠删码,纠删码是一种比副本存储更节省存储空间的数据持久化存储方法,使用这种方法,相同容错的情况下可以比之前节省一半的存储空间。详细介绍在这里: https://hadoop.apache.org/docs/r3.0.0/hadoop-project-dist/hadoop-hdfs/HDFSErasureCoding.html
  3. Hadoop 2.x 中的 HDFS 最多支持两个 NameNode,一主一备,而 Hadoop3.x 中的 HDFS 支持多个 NameNode,一主多备,详细介绍在这里: https://hadoop.apache.org/docs/r3.0.0/hadoop-project-dist/hadoop-hdfs/HDFSErasureCoding.html
  4. MapReduce 任务级本地优化,MapReduce 添加了映射输出收集器的本地化实现的支持。对于密集型的洗牌操作(shuffle-intensive)jobs,可以带来 30% 的性能提升,详细介绍在这里: https://issues.apache.org/jira/browse/MAPREDUCE-2841
  5. 修改了多重服务的默认端口,Hadoop 2.x 中一些服务的端口和 Hadoop3 中是不一样的

总结: Hadoop 3.x 和 2.x 之间的主要区别在于新版本提供了更好的优化和可用性。详细的优化点也可以参考官网内容: https://hadoop.apache.org/docs/r3.0.0/index.html

(3)Hadoop 的名字起源。Hadoop 名字不是一个缩写的单词,而是一个人为造出来的词。是以 Hadoop 之父 Doug Cutting 儿子的毛绒玩具象命名的。所以 Hadoop 的标志为一头小象,如下图所示:
在这里插入图片描述
所以我们需要不断努力地学习,等以后我们也达到这种高度的时候,在实现一个框架的时候用自己的名字来命名那就很炫酷了。

3、Hadoop 的特点

Hadoop 是一个能够让用户轻松架构和使用的分布式计算平台。用户可以轻松地在 Hadoop 上开发和运行处理海量数据的应用程序。它主要有以下几个优点:

  1. 高可靠性。数据存储不仅有多个备份,而且集群设置在不同机器上,可以防止一个节点宕机而造成的机器损坏。
  2. 高扩展性。Hadoop 是在可用的计算机集群间分配数据并完成计算任务。为集群添加新的节点并不复杂,所以集群可以很容易进行节点的扩展,扩大集群。
  3. 高效性。Hadoop 能够在节点之间动态地移动数据,在数据所在节点进行并发处理,并保证各个节点的动态平衡,因此处理速度非常快。
  4. 高容错性。Hadoop 的分布式文件系统 HDFS 在存储文件时会在多个节点或多台机器上存储文件的备份副本,当读取该文档出错或某一台机器宕机了,系统会调用其他节点上的备份文件,保存程序顺利运行。如果启动的任务失败,Hadoop 会重新运行该任务或启用其他任务来完成这个任务没有完成的部分。
  5. 低成本。Hadoop 是开源的,不需要支付任何费用即可下载安装使用,节省了购买软件的成本。此外,Hadoop 依赖于社区服务,因此它的成本比较低,任何人都可以使用。
  6. 可构建在廉价机器上。Hadoop 对机器的配置要求不高,大部分普通商用服务器就可以满足要求。

三、Hadoop 核心

在上面介绍过,以 Hadoop 为中心形成了一个生态圈,如下图所示:
在这里插入图片描述

1、分布式文件系统——HDFS

1、HDFS 架构及简介

HDFS(Hadoop Distributed File System)是 Hadoop 项目的核心子项目,主要负责集群数据的存储与读取,HDFS 是一个主/从(Master/Slave) 体系结构的分布式文件系统。HDFS 支持传统的层次型文件组织结构,用户或者应用程序可以创建目录,然后将文件保存在这些目录中。文件系统名字空间的层次结构和大多数现有的文件系统类似,可以通过文件路径对文件执行创建、读取、更新和删除操作。但是由于分布式存储的性质,它又和传统的文件系统有明显的区别。HDFS 的基本架构如下图所示:
在这里插入图片描述
HDFS 文件系统主要包括一个 NameNode、一个 Secondary NameNode 和多个 DataNode,其中 NameNode、Secondary NameNode 运行在 Master 节点,DataNode 运行在 Slave 节点上。下面分别介绍。

  1. 元数据。元数据不是具体的文件内容,它有三类重要信息:第一类是文件和目录自身的属性信息,例如文件名、目录名、父目录信息、文件大小、创建时间和修改时间等;第二类记录文件内容存储的相关信息,例如文件分块情况、副本个数、每个副本所在的DataNode信息等;第三类用来记录HDFS中所有DataNode的信息,用于DataNode管理。
  2. NameNode。NameNode 用于存储元数据以及处理客户端发出的请求。在 NameNode 中存放元数据的文件是 fsimage 文件。在系统运行期间,所有对元数据的操作都保存在内存中,并被持久化到另一个文件 edits 中。当 NameNode 启动的时候,fsimage 会被加载到内存,然后对内存里的数据执行 edits 所记录的操作,以确保内存所保留的数据处于最新的状态。fsimage与edits数据保存的过程如下图所示:
    在这里插入图片描述
  3. Secondary NameNode。Secondary NameNode 用于备份 NameNode 的数据,周期性将 edits 文件合并到 fsimage 文件并在本地备份,将新的 fsimage 文件存储到 NameNode,取代原来的 fsimage,删除 edits 文件,创建一个新的 edits 继续存储文件修改状态。Secondary NameNode 的工作过程如下图所示:
    在这里插入图片描述
  4. DataNode。DataNode 是真正存储数据的地方。在 DataNode 中,文件以数据块的形式进行存储。当文件传到 HDFS 端时以 128MB 的数据块将文件进行切割,将每个数据块存到不同的或相同的 DataNode 并且备份副本,一般默认 3 个,NameNode 会负责记录文件的分块信息,确保在读取该文件时可以找到并整合所有块。
  5. 数据块。文件在上传到 HDFS 时根据系统默认文件块大小把文件分成一个个数据块,Hadoop 2.x 开始默认 128MB 为一个数据块,比如要存储大小为 129MB 的文件时,则被分成两个数据块来存储。数据块会被存储到各个节点,每个数据块都会备份副本。

2、HDFS分布式原理

分布式系统会划分成多个子系统或模块,各自运行在不同的机器上,子系统或模块之间通过网络通信进行协作,实现最终的整体功能。利用多个节点共同协作完成一项或多项具体业务功能的系统就是分布式系统。

那什么是分布式文件系统呢?分布式文件系统是分布式系统的一个子集,其解决的问题就是数据存储。也就是说,分布式文件系统是横跨在多台计算机上的存储系统,存储在分布式文件系统上的数据自动分布在不同的节点上。

而 HDFS 作为一个分布式文件系统,主要体现在以下三个方面。

HDFS 并不是单机文件系统,它是分布在多个集群节点上的文件系统。节点之间通过网络通信进行协作,提供多个节点的文件信息,让每个用户都可以看到文件系统的文件,让多机器上的多用户分享文件和存储空间。

文件存储时被分布在多个节点上,需注意数据存储不是以文件为单位进行存储的,而是将一个文件分成一个或多个数据块存储。而数据块在存储时并不是都存储在一个节点上,而是被分布存储在各个节点中,并且数据块会在其他节点存储副本。

数据从多个节点读取。读取一个文件时,从多个节点中找到该文件的数据块,分布读取所有数据块,直到最后一个数据块读取完毕。

3、HDFS特点

首先介绍 HDFS 的优点。

  1. 高容错性。HDFS上传的数据自动保存多个副本,可以通过增加副本的数据来增加它的容错性。如果某一个副本丢失,HDFS 会复制其他机器上的副本,而我们不必关注它的实现。
  2. 适合大数据的处理。HDFS 能够处理 GB、TB 甚至 PB 级别的数据,规模达百万,数量非常大。(1PB=1024TB、1TB=1014GB)
  3. 流式数据访问。HDFS 以流式数据访问模式来存储超大文件,一次写入,多次读取,即文件一旦写入,则不能修改,只能增加。这样可以保持数据的一致性。

除此之外,HDFS 有以下的缺点。

  1. 不适合低延迟数据访问。如果要处理一些用户要求时间比较短的低延迟应用请求,则 HDFS 不适合,因为 HDFS 是为了处理大型数据集分析任务而设计的,目的是为达到高的数据吞吐量,但这是以高延迟作为代价来换取的。
  2. 无法高效存储大量小文件。因为 NameNode 会把文件系统的元数据放置在内存中,所以文件系统所能容纳的文件数目是由 NameNode 的内存大小来决定的,即每存入一个文件都会在 NameNode 中写入文件信息。如果写入大多小文件的话,NameNode 内存会被占满而无法写入文件信息。而与多个小文件大小相同的单一文件只会写入一次文件信息到内存中,所以更适合大文件存储。
  3. 不支持多用户写入及任意修改文件。在 HDFS 的一个文件中只有一个写入者,而且写操作只能在文件末尾完成,即只能执行追加操作。目前 HDFS 还不支持多个用户对同一文件的写操作,以及在文件任意位置进行修改。

2、分布式计算框架——MapReduce

(1)MapReduce 简介

MapReduce 是 Hadoop 核心计算框架,适用于大规模数据集(大于1TB)并行运算的编程模型,包括 Map(映射)和 Reduce(规约) 两部分。

当启动一个 MapReduce 任务时,Map 端会读取 HDFS 上的数据,将数据映射成所需要的键值对类型并传到 Reduce 端。Reduce 端接收 Map 端传过来的键值对类型的数据,根据不同键进行分组,对每一组键相同的数据进行处理,得到新的键值对并输出到 HDFS,这就是 MapReduce 的核心思想。

(2)MapReduce工作原理

MapReduce 作业执行流程如下图所示:
在这里插入图片描述
一个完整的 MapReduce 过程包含数据的输入与分片、Map 阶段数据处理、Reduce 阶段数据处理、数据输出等阶段,下面分别介绍。

  1. 读取输入数据。MapReduce 过程中的数据是从 HDFS 分布式文件系统中读取的。文件在上传到 HDFS 时,一般按照 128MB 分成了几个数据块,所以在运行 MapReduce 程序时,每个数据块都会生成一个 Map,但是也可以通过重新设置文件分片大小调整 Map 的个数,在运行 MapReduce 时会根据所设置的分片大小对文件重新分割(Split),一个分片大小的数据块就会对应一个Map。

  2. Map 阶段。程序有一个或多个 Map,由默认存储或分片个数决定。针对 Map 阶段,数据以键值对的形式读入,键的值一般为每行首字符与文件最初始位置的偏移量,即中间所隔字符个数,值为这一行的数据记录。根据需求对键值对进行处理,映射成新的键值对,将新的键值对传到 Reduce 端。

  3. Shuffle/Sort 阶段:此阶段是指从 Map 输出开始,传送 Map 输出到 Reduce 作为输入的过程。该过程会将同一个 Map 中输出的键相同的数据先进行一步整合,减少传输的数据量,并且在整合后将数据按照键排序。

  4. Reduce 阶段:Reduce 任务也可以有多个,按照 Map 阶段设置的数据分区确定,一个分区数据被一个 Reduce 处理。针对每一个 Reduce 任务,Reduce 会接收到不同 Map 任务传来的数据,并且每个 Map 传来的数据都是有序的。一个 Reduce 任务中的每一次处理都是针对所有键相同的数据,对数据进行规约,以新的键值对输出到 HDFS。

根据上述内容分析,MapReduce 的本质可以用一张图完整地表现出来,如下图所示:
在这里插入图片描述
MapReduce 的本质就是把一组键值对 <K1,V1> 经过 Map 阶段映射成新的键值对 <K2,V2>,接着经过 Shuffle/Sort 阶段进行排序和 洗牌,把键值对排序,同时把相同的键值整合,最后经过 Reduce 阶段,把整合后的键值对组进行逻辑处理,输出新的键值对 <K3,V3>。

3、集群资源管理器——YARN

(1)YARN 简介

Hadoop 的 MapReduce 架构称为 YARN(Yet Another Resource Negotiator,另一种资源协调者),是效率更高的资源管理核心。

(2)YARN 的基本构架

YARN 主要包含三大模块:Resource Manager(RM)、Node Manager(NM)、Application Master(AM)。其中,Resource Manager 负责所有资源的监控、分配和管理;Application Master 负责每一个具体应用程序的调度和协调;Node Manager 负责每一个节点的维护。对于所有的 applications,RM 拥有绝对的控制权和对资源的分配权。而每个 AM 则会和 RM 协商资源,同时和 Node Manager 通信来执行和监控 task。YARN 的框架图如下图所示:
在这里插入图片描述
从上图中可以看出:

  1. 在 Client 客户端,用户会向 Resource Manager 请求执行运算(或执行任务)。
  2. 在 NameNode 会有 Resource Manager 统筹管理运算的请求。
  3. 在其他的 DataNode 会有 Node Manager 负责运行,以及监督每一个任务(task),并且向 Resource Manager 汇报状态。

四、Hadoop 常用组件

除了上面介绍的 Hadoop 三大核心组件之外,Hadoop 生态圈中还有许多组件,这些组件各有特点,共同为 Hadoop 的相关工程服务。由于大部分组建的 LOGO 选用了动物图形,因此 Hadoop 的生态系统就像是一群动物在狂欢,如下图所示:
在这里插入图片描述
下面介绍 Hadoop 的常用组件,为了方便理解以下按照功能进行了分类,并且把较为流行的排在了前面介绍,如下表所示:
在这里插入图片描述

五、Hadoop 在国内外的应用情况

Hadoop 是一个开源的高效云计算基础架构平台,其不仅仅在云计算领域用途广泛,还可以支撑搜索引擎服务,作为搜索引擎底层的基础架构系统,同时在海量数据处理、数据挖掘、机器学习、科学计算等领域都越来越受到青睐。

在国外,Hadoop 的应用十分广泛,例如 Yahoo、Facebook、Adobe、IBM等等。例如,Yahoo 是 Hadoop 的最大支持者。Yahoo 的 Hadoop 应用主要包括:广告分析系统、用户行为分析、Web 搜索、反垃圾邮件系统等。Facebook 使用 Hadoop 存储内部日志与多维数据,并以此作为报告、分析和机器学习的数据源。Adobe 主要使用 Hadoop 及 HBase,用于支撑社会服务计算,以及结构化的数据存储和处理。

而国内,互联网公司是 Hadoop 在国内的主要使用力量,有以下公司:阿里巴巴、百度、腾讯、网易、金山、华为、中国移动等。阿里巴巴、腾讯都是国内最先使用 Hadoop 的公司。

中科研究所举办过几次 Hadoop 技术大会,加速了 Hadoop 在国内的发展。

猜你喜欢

转载自blog.csdn.net/xw1680/article/details/115426714