随着近来计算机技术和互联网的发展,大数据
这个名词越来越多地进入到我们的视野中,大数据的快速发展也无时刻影响着我们的生活。
大数据从字面来理解就是 大量的数据
。日常生活离不开数据,可以说每时每刻都在产生着数据。例如,一分钟可以做些什么事呢?在日常生活中,一分钟可能连一页书都看不完。但是一分钟内产生的数据却是庞大的。据统计,在一分钟内,YouTube 用户上传 300 小时的新视频,电子邮件用户发送 2.4 亿条信息,Google 收到超过 278 万个搜索查询,Facebook 用户点赞 4166 667 次,消费者在网购上花费 272070 美元,Twitter 用户发布 347222 条推文,Instagram 用户每分钟发布 123060 张照片,Netflix 用户观看 77160 个小时的视频,微信红包的收发 1527777 个。
这些数据还在不停地增长,那么大数据究竟是什么?国际顶级权威咨询机构麦肯锡 说:“大数据指的是所涉及的数据集规模已经超过了传统数据库软件获取、存储、管理和分析的能力。这是一个被故意设计成的具有主观性的定义,并且是一个关于多大的数据集才能被认为是大数据的可变定义,即并不定义大于一个特定数字的 TB 才叫大数据。因为随着技术的不断发展,符合大数据标志的数据集容量也会增长;并且定义随不同行业也有变化,这也依赖于在一个特定行业通常使用何种软件和数据集有多大。因此,大数据在今天不同行业中的范围可以从几十 TB 到几 PB”。
从上面的定义中可以看出:
现在所说的大数据实际上更多是从应用的层面,比如某公司搜集、整理了大量的用户行为信息,然后通过数据分析手段对这些信息进行分析从而得出对公司有利用价值的结果。比如,头条、热搜的产生,就是建立在对海量用户的阅读信息的搜集、分析之上。这就是大数据在现实中的具体体现。
IBM 提出大数据具有 5V 特点,分别为:Volume(大量)、Velocity(高速)、Variety(多样)、Value(低价值密度)、Veracity(真实性),下面具体说明此 5V 特点。
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)刀字节
通过上面的介绍,读者或许并不能直观地理解何为大数据,下面通过几个大数据的应用案例来更形象地了解大数据。在日常生活中,最常见的大数据应用的例子就是手机中各种社交、娱乐、购物类的 App。例如听歌类 App 有 每日推荐
版块,此版块中的歌曲就是根据用户平时听歌类型或者同一歌手演唱的歌曲而来的;使用淘宝 App,浏览商品后,主页显示或者推送的都是类似商品,如下图所示,类似的 App 有很多,可见大数据已经广泛融入了我们的日常生活中。
除了手机 App,大数据的应用已经渗透到各行各业中。
(1) 医疗大数据。除了较早前就开始利用大数据的互联网公司,医疗行业是让大数据分析最先发扬光大的传统行业之一。Seton Healthcare 是采用 IBM 最新沃森技术医疗保健内容分析预测的首个客户。该技术允许企业找到大量病人相关的临床医疗信息,通过大数据处理,更好地分析病人的信息。在加拿大多伦多的一家医院,针对早产婴儿,每秒钟有超过 3000 次的数据读取。通过这些数据分析,医院能够提前知道哪些早产儿出现问题并且有针对性地采取措施,避免早产婴儿夭折。同时大数据让更多的创业者更方便地开发产品,比如通过社交网络来收集数据的健康类 App。也许未来数年后,它们搜集的数据能让医生给你的诊断变得更为精确,比方说不是通用的 成人每日三次,一次一片
,而是检测到你的血液中药剂已经代谢完成会自动提醒你再次服药,等等。
(2) 金融大数据。大数据在金融行业应用范围较广,典型的案例有花旗银行利用 IBM 沃森电脑为财富管理客户推荐产品;美国银行利用客户点击数据集为客户提供特色服务,如设定竞争的信用额度;招商银行利用客户刷卡、存取款、电子银行转账、微信评论等行为数据进行分析,每周给客户发送针对性广告信息,里面有顾客可能感兴趣的产品和优惠信息。大数据在金融行业的应用可以总结为以下五个方面:
(3) 交通大数据。目前,交通的大数据应用主要在两个方面,一方面可以利用大数据传感器数据来了解车辆通行密度,合理进行道路规划包括单行线路规划;另一方面可以利用大数据来实现即时信号灯调度,提高已有线路运行能力。科学的安排信号灯是一个复杂的系统工程,必须利用大数据计算平台才能计算出一个较为合理的方案。科学的信号灯安排将会提高 30% 左右已有道路的通行能力。在美国,政府依据某一路段的交通事故信息来增设信号灯,使交通事故率降低了 50% 以上。依靠大数据将会提高航班管理的效率,航空公司利用大数据可以提高上座率,降低运行成本。铁路利用大数据可以有效安排客运和货运列车,提高效率、降低成本。
(4) 教育大数据。在课堂上,数据不仅可以帮助改善教育教学,在重大教育决策制定和教育改革方面,大数据更有用武之地。美国利用数据来诊断处在辍学危险期的学生、探索教育开支与学生学习成绩提升的关系、探索学生缺课与成绩的关系。比如美国某州公立中小学的数据分析显示,在语文成绩上,教师高考分数和学生成绩呈现显著的正相关。也就是说,教师的高考成绩与他们现在所教语文课上的学生学习成绩有很明显的关系;教师的高考成绩越好,学生的语文成绩也越好。这个关系让我们进一步探讨其背后真正的原因。其实,教师高考成绩高低在某种程度上是教师的某个特点在起作用,而正是这个特点对教好学生起着至关重要的作用,因此教师的高考分数可以作为挑选教师的一个指标。如果有了充分的数据,便可以发掘更多的教师特征和学生成绩之间的关系,从而为挑选教师提供更好的参考。
大数据还可以帮助家长和教师甄别出孩子的学习差距,提供有效的学习方法。比如,美国的麦格劳·希尔教育出版集团就开发出了一种预测评估工具,帮助学生评估他们已有的知识和达标测验所需程度的差距,进而指出学生有待提高的地方。评估工具可以让教师跟踪学生学习情况,从而找到学生的学习特点和方法。有些学生适合按部就班,有些则更适合图式信息和整合信息的非线性学习。这些都可以通过大数据搜集和分析很快识别出来,从而为教育教学提供坚实的依据。
(5) 商业大数据。全球零售业的巨头沃尔玛也通过大数据获益。公司在对消费者购物行为进行分析时发现,男性顾客在购买婴儿尿片时,常常会顺便搭配几瓶啤酒来犒劳自己,于是推出了将啤酒和尿布捆绑销售的促销手段。如今,这一 啤酒+尿布
的数据分析成果也成了大数据技术应用的经典案例。
大家可以百度一下 买披萨的故事,深入了解大数据。
基于大数据应用的行业实例数不胜数,并且都为各个行业带来了可观的效益,甚至改善了人们的生活水平。随着大数据的应用越来越广泛,应用的行业也越来越多,我们每日都可以看到大数据的一些新颖的应用,从而帮助人们从中获取到真正有用的价值。
大数据目前分为四大块:大数据技术、大数据工程、大数据科学和大数据应用。其中云计算是属于大数据技术的范畴,是一种通过 Internet 以服务的方式提供动态可伸缩的虚拟化的资源的计算模式。它利用由大量计算节点构成的可动态调整的虚拟化计算资源,通过并行化和分布式计算技术,实现业务质量的可控的大数据处理的计算技术。
那么这种计算模式如何实现呢,Hadoop 的来临解决了这个问题。作为云计算技术中的佼佼者,Hadoop 以其低成本和高效率的特性赢得了市场的认可,下图显示了云计算、大数据和 Hadoop 的关系。
Hadoop 是用一种可靠、高效、可扩展的方式存储、管理大数据。Hadoop 及其生态圈为管理、挖掘大数据提供了一套成熟可靠的解决方案。从功能上说,Hadooop 可以称作一个 大数据管理和分析平台
。
Hadoop 是一个开源的大数据分析软件,或者说编程模式。它是通过分布式的方式处理大数据的,因为开源的原因现在很多企业都在运用 hadoop 的技术来解决一些大数据的问题,在数据仓库方面 hadoop 是非常强大的。但在数据集市以及实时的分析展现层面上,hadoop 也有着明显的不足。
大数据技术正渗透到各行各业。作为数据分布式处理系统的典型代表,Hadoop 已成为该领域的主要核心。但 Hadoop 并不等于大数据,它只是一个成功的分布式系统,用于处理离线数据。大数据领域中还有许多其他类型的处理系统。除了 Hadoop 之外,Storm 和 Apache Spark 也是优秀的大数据处理平台,下面分别介绍。
(1) Storm。在介绍 Storm 之前,首先介绍一下什么是流式数据。在现实生活中,很多数据都属于流式数据,即计算的输入并不是一个文件,而是源源不断的数据流,如网上实时交易所产生的数据。用户需要对这些数据进行分析,否则数据的价值会随着时间的流逝而消失。Storm 是一个成熟的分布式流计算平台,擅长流处理或者复杂事件处理。Storm 有以下几个关键特性:
需要注意的是,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 的主要优势包括以下几个方面:
目前 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 倍。
大数据行业越来越受欢迎,同时对大数据人才的能力和要求也日益增加,大数据都有哪些岗位?学习大数据需要具备哪些能力?下面一一为大家介绍。大数据从业者的岗位包括以下方面:
首席数据官。首席数据官(Chief Data Officer,简称 CDO)和数据科学家(或称数据分析师)是企业所需的大数据人才的典型代表。CDO 主要是负责根据企业的业务需求、选择数据库以及数据抽取、转换和分析等工具,进行相关的数据挖掘、数据处理和分析,并且根据数据分析的结果战略性地对企业未来的业务发展和运营提供相应的建议和意见。通过 CDO 加强数据管控,可提高对业务风险的控制水平,是企业应对经济、金融危机的重要措施。
一位合格的 CDO 须具备五种能力:统计学、数学的能力;洞悉网络产业和发展趋势的能力;IT 设备和技术选型的能力;商业运营的能力;管理和沟通的能力。他们不仅要关注系统架构中所承载的内容,更要担任企业决策和数据分析汇整的枢纽;要熟悉面向服务的架构(SOA)、商业智能(BI)、大规模数据集成系统、数据存储交换机制,以及数据库、可扩展标记语言(XML)、电子数据交换(EDI)等系统架构;要深入了解企业的业务状况和所处的产业背景,清楚地了解组织的数据源、大小和结构等,才可将数据资料与业务状态联合起来分析,并提出相对应的市场和产品策略。
数据科学家(数据分析师)。数据科学家是指能采用科学方法、运用数据挖掘工具对复杂多量的数字、符号、文字、网址、音频或视频等信息进行数字化重现与认识,并能寻找新的数据洞察的工程师或专家。一个优秀的数据科学家需要具备的素质有:数据采集、数学算法、数学软件、数据分析、预测分析、市场应用、决策分析等。
数据科学家应当能够熟练使用统计工具。为了提高工作效率,数据科学家要熟练使用一种或多种分析工具。Excel 是当前最为流行的小规模数据处理工具,SAS 工具也在广泛应用。而以 Hadoop 为代表的数据管理工具,也越来越广泛地应用于数据业务中。
大数据开发工程师。大数据开发工程师应具备:良好的数学背景、很强的计算机编程能力,除此之外,还应具有特定应用领域或行业的知识。大数据开发工程师这个角色很重要的一点是,不能脱离市场,因为大数据只有和特定领域的应用结合起来才能产生价值。不能只懂数据,还要有商业头脑,不论对零售、医药、游戏还是旅游等行业,都能对其中某些领域有良好的裂解,最好与企业的业务方向一致。
对于一名优秀的大数据开发工程师,除了上面列出三点能力要求外,还有一个非常重要的要求,即必须深入理解大数据系统架构,各个组件的基本原理,实现机制甚至其中涉及的算法等。只有这样,他们才能构建一个强大且稳定的分布式集群系统,并充分利用其分布式存储和并行计算能力来处理大数据。
对大多数企业来说,因为 Hadoop 开源且高效,所以形成了以 Hadoop 为核心的大数据生态系统。那么大数据开发工程师,就必须深入理解以 Hadoop 为核心的大数据生态系统的系统构架,原理及开发应用,并具有充分的优化经验,才能利用 Hadoop 处理大规模数据,甚至在 Hadoop 平台上开发特定应用的新组件。当然,大数据开发工程师还需要具有大数据采集、大数据预处理、大数据存储与管理、分析挖掘与展现应用等大数据相关技术。
大数据运维工程师。企业除了大数据分析人才、开发人才外,还需要有数据采集、管理、运维方面的人才。由于大数据系统是一个非常复杂的系统,大数据运维工程师应掌握非常多的内容:熟悉 Java、Python、Shell 等语言;熟悉 Hadoop 工作原理,对 HDFS、MapReduce 运行过程有深入理解,有 MapReduce 开发经验,熟悉数据仓库体系构架,熟悉数据建模;熟悉至少一种数据库,如 MySQL、Oracle、SQL Server,熟练使用 SQL 语言,懂 SQL 调优;熟悉大数据生态圈及其他技术,如 HBase、Storm、Spark、Impala 等技术。
Hadoop 是 Apache 软件基金会
旗下的一个 开源分布式计算平台
。以分布式文件系统 HDFS(Hadoop Distributed File System) 和 MapReduce(Google MapReduce 的开源实现) 为核心的 Hadoop,为用户提供了系统底层透明的分布式基础构架。
HDFS 的高容错性、高伸缩性、高性能等优点允许用户将 Hadoop 部署在廉价的硬件上,形成分布式系统,它负责数据的分布式存储和备份,文件写入后只能读取,不能修改;MapReduce 分布式编程模型允许用户在不了解分布式系统底层细节的情况下开发并行应用程序,包括 Map(映射)和 Reduce(规约)两个过程。
用户可以利用 Hadoop 轻松地组织计算机资源,从而搭建自己的分布式计算平台,并且可以充分利用集群的计算和存储能力,完成海量数据的处理。
简而言之,Hadoop 是适合大数据的分布式存储和计算的平台。狭义上来说,hadoop 就是单独指代 hadoop 这个软件;广义上来说,hadoop 指代大数据的一个生态圈,包括很多其他的软件。从上面的 Hadoop 介绍可以总结出 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 的架构并没有发生什么变化,但是它在其他细节方面做了很多优化。在这里我挑几个常见点说一下:
总结: Hadoop 3.x 和 2.x 之间的主要区别在于新版本提供了更好的优化和可用性。详细的优化点也可以参考官网内容: https://hadoop.apache.org/docs/r3.0.0/index.html
(3)Hadoop 的名字起源。Hadoop 名字不是一个缩写的单词,而是一个人为造出来的词。是以 Hadoop 之父 Doug Cutting 儿子的毛绒玩具象命名的。所以 Hadoop 的标志为一头小象,如下图所示:
所以我们需要不断努力地学习,等以后我们也达到这种高度的时候,在实现一个框架的时候用自己的名字来命名那就很炫酷了。
Hadoop 是一个能够让用户轻松架构和使用的分布式计算平台。用户可以轻松地在 Hadoop 上开发和运行处理海量数据的应用程序。它主要有以下几个优点:
在上面介绍过,以 Hadoop 为中心形成了一个生态圈,如下图所示:
1、HDFS 架构及简介
HDFS(Hadoop Distributed File System)是 Hadoop 项目的核心子项目,主要负责集群数据的存储与读取,HDFS 是一个主/从(Master/Slave) 体系结构的分布式文件系统。HDFS 支持传统的层次型文件组织结构,用户或者应用程序可以创建目录,然后将文件保存在这些目录中。文件系统名字空间的层次结构和大多数现有的文件系统类似,可以通过文件路径对文件执行创建、读取、更新和删除操作。但是由于分布式存储的性质,它又和传统的文件系统有明显的区别。HDFS 的基本架构如下图所示:
HDFS 文件系统主要包括一个 NameNode、一个 Secondary NameNode 和多个 DataNode,其中 NameNode、Secondary NameNode 运行在 Master 节点,DataNode 运行在 Slave 节点上。下面分别介绍。
2、HDFS分布式原理
分布式系统会划分成多个子系统或模块,各自运行在不同的机器上,子系统或模块之间通过网络通信进行协作,实现最终的整体功能。利用多个节点共同协作完成一项或多项具体业务功能的系统就是分布式系统。
那什么是分布式文件系统呢?分布式文件系统是分布式系统的一个子集,其解决的问题就是数据存储。也就是说,分布式文件系统是横跨在多台计算机上的存储系统,存储在分布式文件系统上的数据自动分布在不同的节点上。
而 HDFS 作为一个分布式文件系统,主要体现在以下三个方面。
HDFS 并不是单机文件系统,它是分布在多个集群节点上的文件系统。节点之间通过网络通信进行协作,提供多个节点的文件信息,让每个用户都可以看到文件系统的文件,让多机器上的多用户分享文件和存储空间。
文件存储时被分布在多个节点上,需注意数据存储不是以文件为单位进行存储的,而是将一个文件分成一个或多个数据块存储。而数据块在存储时并不是都存储在一个节点上,而是被分布存储在各个节点中,并且数据块会在其他节点存储副本。
数据从多个节点读取。读取一个文件时,从多个节点中找到该文件的数据块,分布读取所有数据块,直到最后一个数据块读取完毕。
3、HDFS特点
首先介绍 HDFS 的优点。
除此之外,HDFS 有以下的缺点。
(1)MapReduce 简介
MapReduce 是 Hadoop 核心计算框架,适用于大规模数据集(大于1TB)并行运算的编程模型,包括 Map(映射)和 Reduce(规约) 两部分。
当启动一个 MapReduce 任务时,Map 端会读取 HDFS 上的数据,将数据映射成所需要的键值对类型并传到 Reduce 端。Reduce 端接收 Map 端传过来的键值对类型的数据,根据不同键进行分组,对每一组键相同的数据进行处理,得到新的键值对并输出到 HDFS,这就是 MapReduce 的核心思想。
(2)MapReduce工作原理
MapReduce 作业执行流程如下图所示:
一个完整的 MapReduce 过程包含数据的输入与分片、Map 阶段数据处理、Reduce 阶段数据处理、数据输出等阶段,下面分别介绍。
读取输入数据。MapReduce 过程中的数据是从 HDFS 分布式文件系统中读取的。文件在上传到 HDFS 时,一般按照 128MB 分成了几个数据块,所以在运行 MapReduce 程序时,每个数据块都会生成一个 Map,但是也可以通过重新设置文件分片大小调整 Map 的个数,在运行 MapReduce 时会根据所设置的分片大小对文件重新分割(Split),一个分片大小的数据块就会对应一个Map。
Map 阶段。程序有一个或多个 Map,由默认存储或分片个数决定。针对 Map 阶段,数据以键值对的形式读入,键的值一般为每行首字符与文件最初始位置的偏移量,即中间所隔字符个数,值为这一行的数据记录。根据需求对键值对进行处理,映射成新的键值对,将新的键值对传到 Reduce 端。
Shuffle/Sort 阶段:此阶段是指从 Map 输出开始,传送 Map 输出到 Reduce 作为输入的过程。该过程会将同一个 Map 中输出的键相同的数据先进行一步整合,减少传输的数据量,并且在整合后将数据按照键排序。
Reduce 阶段:Reduce 任务也可以有多个,按照 Map 阶段设置的数据分区确定,一个分区数据被一个 Reduce 处理。针对每一个 Reduce 任务,Reduce 会接收到不同 Map 任务传来的数据,并且每个 Map 传来的数据都是有序的。一个 Reduce 任务中的每一次处理都是针对所有键相同的数据,对数据进行规约,以新的键值对输出到 HDFS。
根据上述内容分析,MapReduce 的本质可以用一张图完整地表现出来,如下图所示:
MapReduce 的本质就是把一组键值对 洗牌
,把键值对排序,同时把相同的键值整合,最后经过 Reduce 阶段,把整合后的键值对组进行逻辑处理,输出新的键值对
(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 的框架图如下图所示:
从上图中可以看出:
除了上面介绍的 Hadoop 三大核心组件之外,Hadoop 生态圈中还有许多组件,这些组件各有特点,共同为 Hadoop 的相关工程服务。由于大部分组建的 LOGO 选用了动物图形,因此 Hadoop 的生态系统就像是一群动物在狂欢,如下图所示:
下面介绍 Hadoop 的常用组件,为了方便理解以下按照功能进行了分类,并且把较为流行的排在了前面介绍,如下表所示:
Hadoop 是一个开源的高效云计算基础架构平台,其不仅仅在云计算领域用途广泛,还可以支撑搜索引擎服务,作为搜索引擎底层的基础架构系统,同时在海量数据处理、数据挖掘、机器学习、科学计算等领域都越来越受到青睐。
在国外,Hadoop 的应用十分广泛,例如 Yahoo、Facebook、Adobe、IBM等等。例如,Yahoo 是 Hadoop 的最大支持者。Yahoo 的 Hadoop 应用主要包括:广告分析系统、用户行为分析、Web 搜索、反垃圾邮件系统等。Facebook 使用 Hadoop 存储内部日志与多维数据,并以此作为报告、分析和机器学习的数据源。Adobe 主要使用 Hadoop 及 HBase,用于支撑社会服务计算,以及结构化的数据存储和处理。
而国内,互联网公司是 Hadoop 在国内的主要使用力量,有以下公司:阿里巴巴、百度、腾讯、网易、金山、华为、中国移动等。阿里巴巴、腾讯都是国内最先使用 Hadoop 的公司。
中科研究所举办过几次 Hadoop 技术大会,加速了 Hadoop 在国内的发展。