《Spark大数据分析:核心概念、技术及实践》一 第1章 大数据技术一览

简介:

 本节书摘来自华章出版社《Spark大数据分析:核心概念、技术及实践》一书中的第1章,第1.1节,作者[美] 穆罕默德·古勒(Mohammed Guller),更多章节内容可以访问云栖社区“华章计算机”公众号查看。


第1章

大数据技术一览

我们正处在大数据时代。数据不仅是任何组织的命脉,而且在指数级增长。今天所产生的数据比过去几年所产生的数据大好几个数量级。挑战在于如何从数据中获取商业价值。这就是大数据相关技术想要解决的问题。因此,大数据已成为过去几年最热门的技术趋势之一。一些非常活跃的开源项目都与大数据有关,而且这类项目的数量在迅速增长。聚焦在大数据方向的创业公司在近年来呈爆发式增长。很多知名公司在大数据技术方面投入了大笔资金。

尽管“大数据”这个词很火,但是它的定义是比较模糊的。人们从不同方面来定义“大数据”。一种定义与数据容量相关,另一种则与数据的丰富度有关。有些人把大数据定义为传统标准下“过于大”的数据,而另一些人则把大数据定义为捕捉了所描绘实体更多细节的数据。前者的例子之一就是超过数拍字节(PB)或太字节(TB)大小的数据集,如果这样的数据存储在传统的关系数据库(RDBMS)表中,将会有数十亿行。后者的一个例子是有极宽行的数据集,这样的数据存储在RDBMS中,将会有数千列。另一种流行的大数据定义是由3个V(volume、velocity和variety,即容量、速度和多样性)所表征的数据。我刚才讨论了容量。速度指的是数据以极快的速率产生,多样性则指的是数据可以是非结构化、半结构化或多结构的。

标准的关系数据库无法轻易处理大数据。这些数据库的核心技术在数十年前所设计,当时极少有组织拥有拍字节级甚至太字节级的数据。现在对一些组织来说,每天产生数太字节的数据也很正常。数据的容量和产生速度都呈爆发式增长。因此,迫切需要新的技术:能快速处理和分析大规模数据。

其他推动大数据技术的因素包括:可扩展性、高可用性和低成本下的容错性。长期以来,处理和分析大数据集的技术被广泛研究并以专有商业产品的形式被使用。例如,MPP(大规模并行处理)数据库已经诞生有段时间了。MPP数据库使用一种“无共享”架构,数据在集群的各个节点进行存储和处理。每一个节点有自己的CPU、内存和硬盘,节点之间通过网络互联来通信。数据分割在集群的各个节点,而节点之间不存在竞争,所以每个节点可以并行处理数据。这种数据库的例子包括Teradata、Netezza、Greenplum、ParAccel和Vertica。Teradata发明于20世纪70年代末,在20世纪90年代前,它就能够处理太字节级别的数据了。但是,专有的MPP数据库非常昂贵,不是所有人能负担得起的。

本章介绍一些开源的大数据相关技术。本章涉及的技术看起来好像随意挑选的,实际上它们由共同的主题而连接:它们和Spark一起使用,或者Spark可以取代其中一些技术。当你开始使用Spark时,你可能会涉及这些技术。而且,熟悉这些技术会帮你更好地理解Spark(这将在第3章介绍)。

1.1 Hadoop

Hadoop是最早流行的开源大数据技术之一。这是一个可扩展、可容错的系统,用来处理跨越集群(包含多台商用服务器)的大数据集。它利用跨集群的可用资源,为大规模数据处理提供了一个简单的编程框架。Hadoop受启发于Google发明的一个系统(用来给它的搜索产品创建反向索引)。Jeffrey Dean和Sanjay Ghemawat在2004年发表的论文中描述了这个他们为Google而创造的系统。第一篇的标题为“MapReduce:大集群上简化的数据处理”,参见research.google.com/archive/mapreduce.html;第二篇的标题为“Google文件系统”,参见research.google.com/archive/gfs.html。受启发于这些论文,Doug Cutting和Mike Cafarella开发了一个开源的实现,就是后来的Hadoop。

很多组织都用Hadoop替换掉昂贵的商业产品来处理大数据集。一个原因就是成本。Hadoop是开源的,并可以运行在商用硬件的集群上。可以通过增加廉价的服务器来轻松地扩展。Hadoop提供了高可用性和容错性,所以你不需要购买昂贵的硬件。另外,它对于特定类型的数据处理任务非常合适,比如对于大规模数据的批处理和ETL(Extract、transform、load,提取、转换、加载)。

Hadoop基于几个重要的概念。第一,使用商用服务器集群来同时存储和处理大量数据比使用高端的强劲服务器更便宜。换句话说,Hadoop使用横向扩展(scale-out)架构,而不是纵向扩展(scale-up)架构。

第二,以软件形式来实现容错比通过硬件实现更便宜。容错服务器很贵,而Hadoop不依赖于容错服务器,它假设服务器会出错,并透明地处理服务器错误。应用开发者不需要操心处理硬件错误,那些繁杂的细节可以交给Hadoop来处理。

第三,通过网络把代码从一台计算机转到另一台比通过相同的网络移动大数据集更有效、更快速。举个例子,假设你有一个100台计算机组成的集群,每台计算机上有1TB的数据。要处理这些数据,一个选择是:把数据转移到一台能够处理100TB数据的超级计算机。然而,转移100TB的数据将花费极长时间,即使是在高速网络上。另外,通过这种方式处理数据将需要非常昂贵的硬件。另一个选择是:把处理数据的代码转移到具有100个节点的集群中的每台计算机。这比第一种选择更快、更高效。而且,你不需要高端、昂贵的服务器。

第四,把核心数据处理逻辑和分布式计算逻辑分开的方式,使得编写一个分布式应用更加简单。开发一个利用计算机集群中资源的应用比开发一个运行在单台计算机上的应用更加困难。能写出运行在单台机器上的应用的开发者数量比能写分布式应用的开发者多好几个数量级。Hadoop提供了一个框架,隐藏了编写分布式应用的复杂性,使得各个组织有更多可用的应用开发者。

尽管人们以一个单一产品来讨论Hadoop,但是实际上它并不是一个单一产品。它由三个关键组件组成:集群管理器、分布式计算引擎和分布式文件系统(见图1-1)。

2.0版本以前,Hadoop的架构一直是单一整体的,所有组件紧密耦合并绑定在一起。从2.0版本开始,Hadoop应用了一个模块化的架构,可以混合Hadoop组件和非Hadoop技术。

图1-1中所示的三个概念组件具体实现为:HDFS、MapReduce和YARN(见图1-2)。

0563ca4d15b7f5d118d00852be1cc1f135a0578e

HDFS和MapReduce在本章讨论,YARN将在第11章介绍。

1.1.1 HDFS

正如其名,HDFS(Hadoop Distributed File System)是一个分布式文件系统,它在商用服务器集群中存储文件,用来存储和快速访问大文件与大数据集。这是一个可扩展、可容错的系统。

HDFS是一个块结构的文件系统。正像Linux文件系统那样,HDFS把文件分成固定大小的块,通常叫作分块或分片。默认的块大小为128MB,但是可以配置。从这个块的大小可清楚地看到,HDFS不是用来存储小文件的。如果可能,HDFS会把一个文件的各个块分布在不同机器上。因此,应用可以并行文件级别的读和写操作,使得读写跨越不同计算机、分布在大量硬盘中的大HDFS文件比读写存储在单一硬盘上的大文件更迅速。

把一个文件分布到多台机器上会增加集群中某台机器宕机时文件不可用的风险。HDFS通过复制每个文件块到多台机器来降低这个风险。默认的复制因子是3。这样一来,即使一两台机器宕机,文件也照样可读。HDFS基于通常机器可能宕机这个假设而设计,所以可以处理集群中一台或多台机器的宕机问题。

一个HDFS集群包含两种类型的节点:NameNode和DataNode(见图1-3)。Name-Node管理文件系统的命名空间,存储一个文件的所有元数据。比如,它追踪文件名、权限和文件块位置。为了更快地访问元数据,NameNode把所有元数据都存储在内存中。一个DataNode以文件块的形式存储实际的文件内容。

5da419e7473fed94d05c58ecf1b55430871a1d04

NameNode周期性接收来自HDFS集群中DataNode的两种类型的消息,分别叫作心跳消息和块报告消息。DataNode发送一个心跳消息来告知NameNode工作正常。块报告消息包含一个DataNode上所有数据块的列表。

当一个客户端应用想要读取一个文件时,它首先应该访问NameNode。NameNode以组成文件的所有文件块的位置来响应。块的位置标识了持有对应文件块数据的DataNode。客户端紧接着直接向DataNode发送读请求,以获取每个文件块。NameNode不参与从Data-Node到客户端的实际数据传输过程。

同样地,当客户端应用想要写数据到HDFS文件时,它首先访问NameNode并要求它在HDFS命名空间中创建一个新的条目。NameNode会检查同名文件是否已存在以及客户端是否有权限来创建新文件。接下来,客户端应用请求NameNode为文件的第一个块选择DataNode。它会在所有持有块的复制节点之间创建一个管道,并把数据块发送到管道中的第一个DataNode。第一个DataNode在本地存储数据块,然后把它转发给第二个Data-Node。第二个DataNode也本地存储相应数据块,并把它转发给第三个DataNode。在所有委派的DataNode上都存储第一个文件块之后,客户端请求NameNode为第二个块来分配DataNode。这个过程持续进行,直到所有文件块都已在DataNode上存储。最后,客户端告知NameNode文件写操作已完成。

1.1.2 MapReduce

MapReduce是Hadoop提供的分布式计算引擎。HDFS提供的是存储大数据集的分布式文件系统,MapReduce则提供集群中并行处理大数据集的计算框架。它抽象了集群计算,提供了编写分布式数据处理应用的高级结构,使得没有编写分布式或并行应用的程序员也可以编写运行在商用计算机集群上的应用。

MapReduce框架自动在集群中各计算机上调度应用的执行。它会处理负载均衡、节点宕机和复杂的节点内通信。它处理分布式计算的繁杂细节,使得程序员可以关注于数据处理的逻辑本身。

MapReduce应用的基本组成块是两个函数:map和reduce,名称借鉴于函数式编程。MapReduce中所有的数据处理作业都用这两个函数来表达。map函数以键值对作为输入,输出中间产物键值对。MapReduce框架对输入数据集中每一个键值对调用map函数。接下来,对map函数的输出进行排序,并根据值进行分组,作为输入传给reduce函数。reduce函数聚合这些值,输出最终的聚合值。

第3章将介绍的Spark被视为MapReduce的继承者,相比MapReduce,它有诸多优势。这将在第3章详细讨论。

1.1.3 Hive

Hive是一个数据仓库软件,它提供了类SQL语言来处理和分析存储在HDFS或其他兼容Hadoop的存储系统(如Cassandra和Amazon S3)中的数据。尽管Hadoop使得编写可利用集群中计算机资源的数据处理应用更加简单,但是能写出这样应用的程序员相对于了解SQL的人来说依然少得多。

SQL是广泛使用的数据处理语言,是一种描述性语言。它看似简单,实则功能强大。SQL比Java和其他用来编写MapReduce应用的编程语言更易学易用。Hive把SQL的简洁性引入到Hadoop中,让更多人可用。

Hive提供一种类SQL的查询语言,叫作Hive查询语言(HiveQL),来处理和分析存储在任何兼容Hadoop的存储系统中的数据。它提供了一种机制把对应结构映射到存储在HDFS中的数据上,并用HiveQL来查询。在底层,它会把HiveQL查询转换成MapReduce作业。它也支持UDF(用户定义函数)和UDAF(用户定义聚合函数),二者用来进行无法用HiveQL有效表达的复杂数据处理。

第7章讨论的Spark SQL被视为Hive的继承者。然而,Spark SQL提供的不仅是SQL接口,它还做了更多工作。这将在第7章详细讲述。

相关实践学习
简单用户画像分析
本场景主要介绍基于海量日志数据进行简单用户画像分析为背景,如何通过使用DataWorks完成数据采集 、加工数据、配置数据质量监控和数据可视化展现等任务。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
相关文章
|
26天前
|
Cloud Native 数据处理 云计算
探索云原生技术在大数据分析中的应用
随着云计算技术的不断发展,云原生架构作为一种全新的软件开发和部署模式,正逐渐引起企业的广泛关注。本文将探讨云原生技术在大数据分析领域的应用,介绍其优势与挑战,并探讨如何利用云原生技术提升大数据分析的效率和可靠性。
|
1月前
|
自然语言处理 小程序 数据挖掘
数据分析实战-Python实现博客评论数据的情感分析
数据分析实战-Python实现博客评论数据的情感分析
95 0
|
7天前
|
分布式计算 Hadoop 大数据
大数据技术与Python:结合Spark和Hadoop进行分布式计算
【4月更文挑战第12天】本文介绍了大数据技术及其4V特性,阐述了Hadoop和Spark在大数据处理中的作用。Hadoop提供分布式文件系统和MapReduce,Spark则为内存计算提供快速处理能力。通过Python结合Spark和Hadoop,可在分布式环境中进行数据处理和分析。文章详细讲解了如何配置Python环境、安装Spark和Hadoop,以及使用Python编写和提交代码到集群进行计算。掌握这些技能有助于应对大数据挑战。
|
4天前
|
数据采集 搜索推荐 大数据
大数据中的人为数据
【4月更文挑战第11天】人为数据,源于人类活动,如在线行为和社交互动,是大数据的关键部分,用于理解人类行为、预测趋势和策略制定。数据具多样性、实时性和动态性,广泛应用于市场营销和社交媒体分析。然而,数据真实性、用户隐私和处理复杂性构成挑战。解决策略包括数据质量控制、采用先进技术、强化数据安全和培养专业人才,以充分发挥其潜力。
10 3
|
6天前
|
运维 供应链 大数据
数据之势丨从“看数”到“用数”,百年制造企业用大数据实现“降本增效”
目前,松下中国旗下的64家法人公司已经有21家加入了新的IT架构中,为松下集团在中国及东北亚地区节约了超过30%的总成本,减少了近50%的交付时间,同时,大幅降低了系统的故障率。
|
16天前
|
NoSQL 大数据 数据挖掘
现代数据库技术与大数据应用
随着信息时代的到来,数据量呈指数级增长,对数据库技术提出了前所未有的挑战。本文将介绍现代数据库技术在处理大数据应用中的重要性,并探讨了一些流行的数据库解决方案及其在实际应用中的优势。
|
16天前
|
人工智能 监控 数据可视化
【Python】Python商业公司贸易业务数据分析可视化(数据+源码)【独一无二】
【Python】Python商业公司贸易业务数据分析可视化(数据+源码)【独一无二】
|
21天前
|
机器学习/深度学习 人工智能 数据可视化
基于Python的数据可视化技术在大数据分析中的应用
传统的大数据分析往往注重数据处理和计算,然而数据可视化作为一种重要的技术手段,在大数据分析中扮演着至关重要的角色。本文将介绍如何利用Python语言中丰富的数据可视化工具,结合大数据分析,实现更直观、高效的数据展示与分析。
|
28天前
|
存储 NoSQL 大数据
新型数据库技术在大数据分析中的应用与优势探究
随着大数据时代的到来,传统数据库技术已经无法满足海量数据处理的需求。本文将探讨新型数据库技术在大数据分析中的应用情况及其所带来的优势,为读者解析数据库领域的最新发展趋势。
|
29天前
|
存储 分布式计算 大数据
现代化数据库技术——面向大数据的分布式存储系统
传统的关系型数据库在面对大规模数据处理时遇到了诸多挑战,而面向大数据的分布式存储系统应运而生。本文将深入探讨现代化数据库技术中的分布式存储系统,包括其优势、工作原理以及在大数据领域的应用。

热门文章

最新文章