Spark对数据科学世界的影响令人震惊。 自从Spark 1.0发布至今还不到3年,但Spark已经被公认是任何大数据架构的全能内核。 大约在此期间,我们在巴克莱银行采用了Spark作为我们的核心技术,这被认为是一个大胆的举动。 现在可以肯定,Spark是任何大数据科学项目的起点。
第1章,大数据科学生态系统,本章介绍了通过大规模数据获得成功的方法和随附的生态系统。它着重于将在后面的章节中使用的数据科学工具和技术,以及介绍环境以及如何适当地配置它。此外,它还解释了与整体数据体系结构和长期成功相关的一些非功能性注意事项。
第2章,数据采集,作为数据科学家,最重要的任务之一是将数据准确地加载到数据科学平台中。本章将说明如何构建Spark中的常规数据提取管道,该管道可作为跨许多输入数据的可重用组件,而不是使用不受控制的临时过程。
第3章,输入格式和架构,本章演示如何将数据从其原始格式加载到不同的架构,从而使各种不同类型的下游分析能够在同一数据上运行。考虑到这一点,我们将研究数据模式的传统理解领域。我们将涵盖传统数据库建模的关键领域,并解释其中的一些基石原理如何仍适用于当今的Spark。此外,在磨练我们的Spark技能的同时,我们将分析GDELT数据模型,并展示如何以有效和可扩展的方式存储此大型数据集。
第4章,探索性数据分析,一个常见的误解是,EDA仅用于发现数据集的统计属性并提供有关如何利用它的见解。实际上,这不是全部。完整的EDA将扩展该想法,并包括对“在生产中使用此数据Feed的可行性”的详细评估。它还要求我们还了解如何为该数据集指定生产级数据加载例程,该例程可能会以“熄灯模式”运行很多年。本章提供了一种快速的方法,该方法使用“数据概要分析”技术来进行数据质量评估以加速流程。
第5章,Spark for Geographic Analysis,地理处理是Spark的一个功能强大的新用例,本章演示了如何入门。 本章的目的是解释数据科学家如何使用Spark处理地理数据,以生成基于地图的功能强大的大型数据集视图。 我们演示了如何通过Spark与Geomesa的集成轻松地处理时空数据集,这有助于将Spark变成复杂的地理处理引擎。 本章稍后将利用时空数据将机器学习应用于预测油价。
第6章“基于链接的外部数据报废”,本章旨在说明一种常见的模式,用于通过URL或API(例如GDELT和Twitter)上的外部内容来增强本地数据。 我们提供了一个使用GDELT新闻索引服务作为新闻URL来源的教程,演示了如何构建可从互联网上刮取全球关注的重大新闻的网络规模新闻扫描仪。 我们将进一步解释如何通过克服规模挑战的方式来使用专业的Web爬网组件,随后是本章的总结。
第7章,构建社区,本章旨在解决数据科学和大数据中的一个常见用例。 随着越来越多的人在一起互动,交流,交换信息或只是对不同主题具有共同兴趣,整个世界可以表示为图表。 数据科学家必须能够发现社区,找到影响者/杰出贡献者并发现可能的异常情况。
第8章,构建推荐系统,如果要选择一种向公众展示数据科学的算法,则肯定会使用推荐系统。 如今,推荐系统无处不在。 它们之所以受欢迎是因为它们的多功能性,实用性和广泛的适用性。 在本章中,我们将演示如何使用原始音频信号来推荐音乐内容。
第9章,新闻词典和实时标记系统,虽然分层数据仓库将数据存储在文件夹文件中,但是典型的基于Hadoop的系统依赖于平面体系结构来存储数据。 如果没有适当的数据管理或对数据的全部内容有清楚的了解,那么将数据湖变成沼泽的机会是无可否认的,其中有趣的数据集(例如GDELT)只不过是包含大量非结构化文本的文件夹 文件。 在本章中,我们将描述一种创新的方式,以一种非监督的方式并且几乎实时地标记输入的GDELT数据。 ---这块内容,可用于数据治理
第10章,故事重复数据删除和变异,在本章中,我们将重复数据删除并将GDELT数据库索引到故事中,然后随着时间的推移跟踪故事并了解它们之间的联系,它们如何变异以及是否会导致任何后续事件。 在不久的将来发生的事件。 本章的核心是Simhash的概念,该概念使用随机索引来检测接近的重复项和构建向量以降低维数。
第11章,异常检测和情感分析,也许是2016年最显着的事件是紧张的美国总统选举及其最终结果:唐纳德·特朗普总统的选举,这一运动将长期被人们记住; 尤其是因为它前所未有地使用了社交媒体,并激起了用户的热情,其中大多数人通过使用标签来表达自己的感受。 在本章中,我们将尝试使用实时Twitter提要检测美国大选期间的异常推文,而不是尝试自行预测结果。
第12章,趋势微积分,早在“什么趋势”的概念成为数据科学家流行的研究主题之前,就有一个比较老的数据科学仍然无法很好地解决这个问题。 这是趋势。 当前,趋势分析(如果可以这样称呼)主要由人们“盯着”时间序列图并提供解释来进行。 但是人们的眼睛在做什么? 本章描述了Apache Spark中用于数字研究趋势的新算法的实现:TrendCalculus。
第13章,安全数据,我们访问了数据科学的许多领域,常常涉足传统上与数据科学家的核心工作知识无关的领域。 在本章中,我们将访问另一个经常被忽视的领域,即安全数据; 更具体地说,如何在数据生命周期的所有阶段保护您的数据和分析结果。 本章的核心是为Spark构建商业级加密编解码器。
第14章,可扩展算法,在本章中,我们将了解为什么有时即使基本算法尽管规模较小,但在“大数据”中仍会经常失败。 我们将看到在编写运行于海量数据集上的Spark作业时如何避免出现问题,并将了解算法的结构以及如何编写可扩展至PB级数据的自定义数据科学分析。 本章主要介绍以下方面:并行化策略,缓存,混洗策略,垃圾回收优化和概率模型; 解释这些如何帮助您充分利用Spark范例。
在本书中,Spark 2.0与Scala 2.11,Maven和Hadoop一起使用。 这是所需的基本环境,在相关章节中介绍了许多其他使用的技术。
第1章大数据科学生态系统
作为数据科学家,您无疑会非常熟悉文件处理以及可能处理大量数据的工作。 但是,您一定会同意的,除了对单一类型的数据进行简单分析之外,还需要一种组织和分类数据的方法,以便可以对其进行有效管理。 确实,这是伟大的数据科学家的基石。 随着数据量和复杂性的增加,一致成功的方法可能是广义成功与过度拟合失败之间的区别!
本章介绍了通过大规模数据获得成功的方法和生态系统。 它专注于数据科学工具和技术。 它介绍了环境以及如何进行适当配置,还说明了与整体数据体系结构有关的一些非功能性注意事项。 尽管现阶段几乎没有实际的数据科学,但它提供了必不可少的平台,为本书其余部分的成功铺平了道路。
在本章中,我们将涵盖以下主题:
数据管理职责
数据架构
配套工具
数据管理特别重要,尤其是在数据不断变化的情况下; 不断变化或定期生产和更新。 在这些情况下,需要一种存储,构造和审核数据的方法,以允许对模型和结果进行连续处理和完善。 在这里,我们描述了如何在一个足以满足日常需求的数据体系结构上下文中,最佳地保存和组织您的数据,以便与Apache Spark和相关工具集成。
就中期而言,即使您只打算在家玩一点数据; 那么,如果没有适当的数据管理,工作往往会升级到很容易失去对自己的位置的了解,并容易出错。 花时间考虑数据的组织,尤其是数据的摄取,至关重要。 没有比等待长时间运行的分析完成,整理结果并生成报告更糟糕的了,只是发现您使用了错误的数据版本,或者数据不完整,缺少字段,甚至更糟的是删除了结果!
坏消息是,尽管数据管理非常重要,但在商业和非商业企业中,数据管理始终是一个被忽视的领域,几乎没有现成的解决方案可供使用。 好消息是,使用本章介绍的基本构建块来进行出色的数据科学要容易得多。
当我们考虑数据时,很容易忽略我们需要考虑的领域的真实范围。 实际上,大多数数据“新手”都是以这种方式考虑范围的:
1.获取数据
2.将数据放置在任何地方
3.使用数据
4.丢掉数据
实际上,还有许多其他考虑,确定将哪些考虑应用于给定工件是我们的共同责任。 以下数据管理构建块有助于回答或跟踪有关数据的一些重要问题:
文件完整性
数据文件是否完整?
你怎么知道的?
它是一组的一部分吗?
数据文件是否正确?
它在运输过程中被篡改了吗?
数据的完整性
数据是否符合预期?
是否所有字段都存在?
是否有足够的元数据?
数据质量是否足够?
是否有数据漂移?
调度
数据定期发送吗?
数据多久到达一次?
数据是否按时收到?
您能证明收到数据的时间吗?
需要确认吗?
模式管理
数据是结构化还是非结构化?
数据应如何解释?
可以推断出架构吗?
数据是否随时间变化?
模式可以从以前的版本发展吗?
版本管理
数据的版本是什么?
版本正确吗?
您如何处理不同版本的数据?
您怎么知道您使用的是哪个版本?
安全
数据敏感吗?
它是否包含个人身份信息(PII)?
它是否包含个人健康信息(PHI)?
它是否包含支付卡信息(PCI)?
我应该如何保护数据?
谁有权读取/写入数据?
是否需要
匿名化/消毒/混淆/加密|anonymization/sanitization/obfuscation/encryption ?
处置方式
我们如何处理数据?
我们什么时候处理数据?
如果毕竟,您仍然不相信,那么在继续使用gawk和crontab命令编写bash脚本之前,请继续阅读,您将很快发现,有一种更快,更灵活,更安全的方法可以让您 从小规模开始逐步建立商业级的摄取管道!
Apache Spark是可扩展数据处理的新兴事实标准。 在撰写本书时,它是最活跃的Apache Software Foundation(ASF)项目,并且具有多种可用的配套工具。 每天都有新的项目出现,其中许多功能重叠。 因此,需要花一些时间来了解它们的作用并决定它们是否适合使用。 不幸的是,没有快速的解决方法。 通常,必须根据具体情况进行特定的权衡; 很少有一种万能的解决方案。 因此,鼓励读者探索可用的工具并明智地选择!
本书通篇介绍了各种技术,希望它们能为读者提供一些更有用和更实用的技术,使他们可以在自己的项目中开始使用它们。 此外,我们希望证明,如果代码编写得当,即使决定被证明是错误的,也可以通过巧妙地使用应用程序接口(API)(或Spark Scala中的高阶函数)来交换技术。
整体架构
让我们从数据架构的高级介绍开始:它们的作用,为什么有用,何时使用以及Apache Spark的适用范围。
数据提取--->数据科学--->数据访问
--->数据湖
一般而言,现代数据体系结构具有四个基本特征:
数据提取
数据科学
数据湖
数据访问
现在让我们对其进行介绍,以便在后面的章节中进行更详细的介绍。
传统上,数据是在严格的规则下提取的,并根据预定的方案进行格式化。 此过程称为提取,转换,加载(ETL),并且仍然是非常普遍的做法,并得到大量商业工具和某些开源产品的支持。
解压------>变换----->加载
数据源->处理管道->结构化数据库
ETL方法倾向于执行预先检查,以确保数据质量和架构一致性,从而简化后续的在线分析处理。 它特别适合处理具有特定特征集的数据,即与经典实体关系模型有关的特征。 但是,它并不适合所有情况。
在大数据革命期间,对结构化,半结构化和非结构化数据的需求发生了隐喻性的爆炸,从而导致创建了处理具有不同特征集的数据所需的系统。 这些由短语“ 4 Vs:体积,种类,速度和准确性”定义
http://www.ibmbigdatahub.com/infographic/four-vs-big-data
尽管传统的ETL方法在这种新的负担下苦苦挣扎,因为它们仅仅需要太多的时间来处理大量数据,或者在更改时过于僵化,因此出现了另一种方法。 输入读取架构范例。 在这里,数据以其原始形式(或至少非常接近)被摄取,并且标准化,验证等细节在分析处理时完成。
尽管我们在这里仅提供高层次的概述,但是这种方法非常重要,以至于在整本书中,我们将通过实现各种读时模式算法来进一步探索。 我们将假设采用ELT方法进行数据提取,也就是说,我们鼓励用户方便地加载数据。 这可能是每n分钟,隔夜或使用率较低时。 然后,可以再次由用户决定是否通过脱机运行批处理作业来检查数据的完整性,质量等。
数据湖
数据湖是方便,无所不在的数据存储。 它很有用,因为它具有许多主要优点,主要是:
可靠的存储
可扩展的数据处理能力
让我们简要地看一下每个。
可靠的储存
数据湖的基础存储实现有很多选择,其中包括Hadoop分布式文件系统(HDFS),MapR-FS和Amazon AWS S3。
在整本书中,HDFS将作为假定的存储实现。 同样,在本书中,作者使用了分布式Spark设置,该设置部署在Hortonworks HDP环境中运行的另一个资源协商器(YARN)上。 因此,除非另有说明,否则HDFS是所使用的技术。 如果您不熟悉这些技术中的任何一种,将在本章中进一步讨论它们。 无论如何,值得一提的是,Spark会本地引用HDFS位置,通过前缀file://访问本地文件位置,并通过前缀s3a://引用S3位置。
可扩展的数据处理能力
显然,Apache Spark将成为我们选择的数据处理平台。 另外,您可能还记得,Spark通过配置适当的集群管理器,允许用户在其首选的环境(本地,独立,YARN或Mesos)中执行代码; 在masterURL中。 顺便说一句,可以在以下三个位置之一进行此操作:
尽管传统的ETL方法在这种新的负担下苦苦挣扎,因为它们仅仅需要太多的时间来处理大量数据,或者在更改时过于僵化,因此出现了另一种方法。 输入读取架构范例。 在这里,数据以其原始形式(或至少非常接近)被摄取,并且标准化,验证等细节在分析处理时完成。
在发出spark-submit命令时使用--master选项添加spark。
conf / spark-defaults中的master属性。
conf文件在SparkConf对象上调用setMaster方法
如果您不熟悉HDFS,或者您没有访问集群的权限,则可以使用本地文件系统运行本地Spark实例,这对于测试非常有用。 但是,请注意,通常只有在群集上执行时才会出现不良行为。 因此,如果您认真对待Spark,那么值得在分布式集群管理器中进行投资,为什么不尝试使用Spark独立集群模式或Amazon AWS EMR? 例如,亚马逊提供了许多可负担的云计算途径,您可以在以下位置探索竞价型实例的想法:
https://aws.amazon.com/cn/ec2/spot/
数据科学平台提供的服务和API使有效的数据科学得以发生,包括探索性数据分析,机器学习模型的创建和完善,图像和音频处理,自然语言处理以及文本情感分析。
这是Spark真正擅长的领域,并形成了本书其余部分的主要重点,它利用了一套强大的本地机器学习库,无与伦比的并行图处理能力和强大的社区。 Spark为数据科学提供了真正可扩展的机会。
其余各章将提供对这些领域中每个领域的见解,包括第6章,基于链接的外部数据报废,第7章,建立社区,第8章,建立推荐系统。
数据工程师和科学家通常使用Hadoop生态系统工具(例如Apache Spark,Pig,Hive,Impala或Drill)访问数据湖中的数据。 但是,有时其他用户甚至其他系统需要访问数据,而普通工具过于技术性或无法满足用户对现实世界的延迟方面的苛刻期望。
在这些情况下,通常需要将数据复制到数据集市或索引存储中,以便可以将其暴露于更传统的方法中,例如报表或仪表板。 此过程通常涉及为低延迟访问创建索引和重组数据,这一过程称为数据出口。
幸运的是,Apache Spark在传统数据库,BI工具以及可视化和报告软件中具有各种各样的适配器和连接器。 其中许多内容将在整本书中进行介绍。
Hadoop刚开始时,Hadoop一词指的是HDFS和MapReduce处理范例的结合,因为这是原始论文http://research.google.com/archive/mapreduce.html的概述。 从那时起,出现了许多技术来补充Hadoop,并且随着Apache YARN的发展,我们现在看到了诸如Spark之类的其他处理范例。
Hadoop现在经常被用作整个大数据软件堆栈的通俗易懂的语言,因此在此点上为本书定义该堆栈的范围是谨慎的。 我们将在整本书中介绍的典型数据架构以及多种技术将详细介绍如下:
这些技术之间的关系是一个密集的话题,因为它们之间存在复杂的相互依赖性,例如,Spark依赖于GeoMesa,后者依赖于Accumulo,而后者依赖于Zookeeper和HDFS! 因此,为了管理这些关系,有可用的平台,例如Cloudera或Hortonworks HDP http://hortonworks.com/products/sandbox/。 这些提供了整合的用户界面和集中式配置。 平台的选择是读者的选择,但是,不建议先安装一些技术然后再移至托管平台,因为遇到的版本问题将非常复杂。 因此,通常更容易从一台清洁的机器开始,并事先做出决定。
我们在本书中使用的所有软件都是平台无关的,因此适合于前面描述的通用体系结构。 它可以独立安装,并且在不使用被管理产品的情况下与单个或多个服务器环境一起使用相对简单。
在许多方面,Apache Spark是将这些组件结合在一起的粘合剂。 它越来越代表着软件堆栈的中心。 它与各种组件集成在一起,但是没有一个是硬接线的。 实际上,甚至底层存储机制也可以换出。 将此功能与利用不同处理框架的能力相结合,意味着原始Hadoop技术可以有效地成为组件,而不是强加于人的框架。 我们的架构的逻辑图如下所示:
随着Spark的发展势头和广泛的行业接受度,针对各种组件的许多原始Hadoop实现已为Spark重构。 因此,为了增加图片的复杂性,通常有几种可能的方式以编程方式利用任何特定组件。 尤其是命令式和声明式版本,取决于是否已从原始Hadoop Java实现中移植了API。 在其余各章中,我们尝试尽可能地遵循Spark精神。
既然我们已经建立了要使用的技术堆栈,让我们描述每个组件并解释为什么它们在Spark环境中有用。 本书的这一部分旨在作为参考,而不是直接阅读。 如果您熟悉大多数技术,则可以刷新知识并继续进行下一部分第2章,数据获取。
Hadoop分布式文件系统(HDFS)是具有内置冗余的分布式文件系统。它经过优化,默认情况下可以在三个或更多节点上工作(尽管一个节点可以正常工作并且可以增加限制),从而可以将数据存储在复制的块中。因此,不仅文件被分成多个块,而且在任何时候都存在这些块的三个副本。这巧妙地提供了数据冗余(如果一个丢失,则仍然存在另外两个),但也提供了数据局部性。当针对HDFS运行分布式作业时,系统不仅将尝试收集为该作业输入数据所需的所有块,而且还将尝试仅使用物理上与运行该作业的服务器接近的块。因此,它可以仅使用其本地存储中的块或靠近其自身的节点上的块来减少网络带宽。实际上,这是通过将HDFS物理磁盘分配给节点以及将节点分配给机架来实现的。块以节点本地,机架本地和群集本地方法编写。所有
HDFS的指令通过名为NameNode的中央服务器传递,因此这提供了可能的中央故障点;提供NameNode冗余的方法有很多种。
此外,在多租户HDFS场景中,其中许多进程同时访问同一文件,也可以通过使用多个块来实现负载平衡。 例如,如果一个文件占用一个块,则该块将被复制3次,因此有可能可以同时从三个不同的物理位置读取。 尽管这看起来似乎不是一个大的胜利,但在成百上千个节点的群集上,网络IO通常是运行作业的唯一最大限制因素–作者当然在数千个必须执行作业的节点群集上经历了很多时间 完全由于网络带宽已耗尽,这是由于其他大量线程需要数据而导致的等待时间的增加。
如果您正在运行笔记本电脑,要求将数据存储在本地或希望使用已经拥有的硬件,那么HDFS是一个不错的选择。
好处
以下是使用HDFS的优点:
冗余:可配置的块复制可容忍节点和磁盘故障
负载平衡:块复制意味着可以从不同的物理位置访问相同的数据
数据局部性:分析尝试访问最接近的相关物理块,从而减少网络IO。
数据平衡:当数据块变得过于群集或碎片化时,可以使用一种算法来重新平衡它们。
灵活的存储:如果需要更多空间,则可以添加更多磁盘和节点; 尽管这不是一个热门过程,但是群集将需要中断才能添加这些资源
额外费用:不涉及第三方费用数据加密:隐式加密(打开时)
缺点
缺点如下:
NameNode提供了一个中心故障点。 为减轻这种情况,提供了辅助和高可用性选项
群集需要基本管理,并且可能需要一些硬件工作
安装
要使用HDFS,我们应该决定是以本地,伪分布式还是完全分布式的方式运行Hadoop。 对于单个服务器,伪分布式很有用,因为分析应直接从该计算机转换为任何Hadoop群集。 无论如何,我们应该至少使用以下组件来安装Hadoop:
Namenode
Secondary NameNode(或HA NameNode)
datanode
Hadoop可以通过以下方式安装
http://hadoop.apache.org/releases.html。
Spark需要知道Hadoop配置的位置,尤其是以下文件:hdfs-site.xml,core-site.xml。 然后在Spark配置中的配置参数HADOOP_CONF_DIR中进行设置。
HDFS将在本地可用,因此文件hdfs:// user / local / dir / text。 只需使用/ user / local / dir / text即可在Spark中寻址txt。 文本。
亚马逊S3
S3提取了与并行性,存储限制和安全性有关的所有问题,从而允许以非常小的成本进行非常大的并行读/写操作以及出色的服务水平协议(SLA)。 如果您需要快速启动并运行,不能在本地存储数据或不知道将来的存储需求是什么,这是完美的选择。 应该认识到s3n和S3a使用对象存储模型,而不是文件存储,因此存在一些折衷:
最终的一致性是一个应用程序所做的更改(创建,更新和删除),直到一些未定义的时间才可见,尽管大多数AWS区域现在都支持写后读一致性。
s3n和s3a使用非原子重命名和删除操作; 因此,重命名或删除大目录所花费的时间与条目数成正比。 但是,在此期间,甚至在解决了最终的一致性之前,目标文件对于其他进程仍然可以看到。
可以通过命令行工具(s3cmd)通过网页和大多数流行语言的API访问S3; 它通过基本配置与Hadoop和Spark进行了本地集成。
好处
优点如下:
无限的存储容量
没有硬件考虑
可用加密(用户存储的密钥)
99.9%的可用性
冗余
缺点
缺点如下:
存储和传输数据的成本
没有数据位置
最终一致性
相对较高的延迟
spark. hadoop. fs. s3a. impl=org. apache. hadoop. fs. s3a. S3AFileSystem
spark. hadoop. fs. s3a. access. key=MyAccessKeyID
spark. hadoop. fs. s3a. secret. key=MySecretKey
如果使用HDP,您可能还需要:
apache kafka
Apache Kafka是用Scala编写的分布式消息代理,可以在Apache Software Foundation许可下使用。 该项目旨在提供一个统一的,高吞吐量,低延迟的平台来处理实时数据馈送。 结果实质上是一个可大规模扩展的发布-订阅消息队列,这使其对于企业基础结构处理流数据非常有价值。
好处
优点如下:
发布-订阅消息
容错的
保证交货
重播失败消息
高度可扩展的无共享架构
支持背压
低延迟
良好的Spark流集成
客户易于实施
缺点
缺点如下:
至少一次语义-无法提供完全一次的消息传递
缺乏交易经理(到目前为止)
需要Zookeeper才能操作
安装
由于Kafka是发布订阅工具,其目的是管理消息(发布者)并将其定向到相关的端点(订阅者)。 这是使用代理完成的,该代理是在实施Kafka时安装的。 您可以通过Hortonworks HDP平台获得Kafka,也可以从此链接http://kafka.apache.org/downloads.html单独安装Kafka。
Kafka使用Zookeeper来管理领导者选举(因为可以分发Kafka从而允许冗余),因此可以使用前面链接中的快速入门指南来设置单个节点Zookeeper实例,还可以提供客户端和使用者进行发布和发布。 订阅主题,这些主题提供了消息处理的机制。
Apache Parquet
自从Hadoop诞生以来,基于列的格式(而不是基于行的格式)的想法已获得越来越多的支持。 开发Parquet是为了利用压缩的,高效的柱状数据表示形式,并且在设计时考虑了复杂的嵌套数据结构; 发挥Apache Dremel论文http://research.google.com/pubs/pub36632.html中讨论的算法的领导作用。 Parquet允许在每个列的级别上指定压缩方案,并且经过验证,可在实施时添加更多编码。 它还被设计为在整个Hadoop生态系统中提供兼容性,并且像Avro一样,将数据模式与数据本身一起存储。
好处
优点如下:
柱状存储
高效存储
每列压缩
支持谓词下推
支持列修剪
与其他格式兼容,例如Avro
读取效率高,专为部分数据检索而设计
缺点
缺点如下:
不利于随机访问
潜在的计算密集型写入
安装
Parquet在Spark中本地可用,可以访问
直接如下:
Apache Avro
Apache Avro是最初为Hadoop开发的数据序列化框架。 它使用JSON定义数据类型和协议(尽管有替代IDL),并以紧凑的二进制格式序列化数据。 Avro提供了用于持久数据的序列化格式和用于Hadoop节点之间以及从客户端程序到Hadoop服务的通信的有线格式。 另一个有用的功能是它可以与数据本身一起存储数据模式,因此始终可以读取任何Avro文件,而无需引用外部源。 此外,Avro支持架构演变,因此可在使用较新架构版本读取的使用较旧架构版本编写的Avro文件之间向后兼容。
因为我们在此使用Scala,Spark和Maven环境
本书中,可以将Avro导入如下:
org. apache. avro
avro
1. 7. 7
然后,需要创建一个架构并生成Scala代码以使用该架构将数据写入Avro。 第3章,输入格式和架构中对此进行了详细说明。
Apache NiFi
Apache NiFi起源于美国国家安全局(NSA),在其于2014年作为其技术转让计划的一部分发布给开源。通过NiFi,您可以在一个简单的用户界面中生成可伸缩的有向图,以进行数据路由和转换。它还支持数据出处,广泛的预构建处理器以及快速高效构建新处理器的能力。它具有优先级,可调节的传送公差和背压功能,使用户可以针对特定要求调整处理器和管道,甚至允许在运行时修改流量。所有这些加在一起构成了一个非常灵活的工具,可以构建从一次性文件下载数据流到企业级ETL管道的所有内容。通常,使用NiFi建立管道和下载文件比编写快速的bash脚本要快得多,添加用于此目的的功能丰富的处理器,这非常引人注目
好处
优点如下:
广泛的处理器
轮辐架构
图形用户界面(GUI)
可扩展
简化并行处理
简化线程处理
允许运行时修改
集群冗余
缺点
缺点如下:
没有跨领域的错误处理程序
表达语言仅部分实现
流文件版本管理不足
安装
Apache NiFi可以随Hortonworks一起安装,称为Hortonworks Dataflow。 也可以从Apache https://nifi.apache.org/单独安装。 第2章“数据获取”中介绍了NiFi。
YARN是Hadoop 2.0的主要组件,从本质上讲,它允许Hadoop插入处理范例,而不仅限于原始MapReduce。 YARN由三个主要组件组成 the resource manager, node manager, and application manager.。 进入YARN超出了本书的范围; 主要要了解的是,如果我们正在运行Hadoop集群,那么可以在客户端模式下使用YARN执行我们的Spark作业,如下所示:
spark-submit --class package. Class /
--master yarn /
--deploy-mode client [options] [app options]
好处
优点如下:
支持Spark
支持优先安排
支持数据局部性
工作历史档案
HDP开箱即用
缺点
缺点如下:
没有CPU资源控制
不支持数据沿袭
安装
YARN是作为Hadoop的一部分安装的; 这可能是
Hortonworks HDP,Apache Hadoop或其他之一
供应商。 无论如何,我们都应至少在Hadoop上安装
以下组件:
资源管理器
NodeManager(1个或更多)
为了确保Spark可以使用YARN,它只需要知道
纱线现场的位置。 xml,使用
Spark配置中的YARN_CONF_DIR参数。
阿帕奇·卢森(Apache Lucene)
Lucene是最初使用Java构建的索引和搜索库工具,但现在已移植到其他几种语言,包括Python。 Lucene当时产生了许多子项目,包括Mahout,Nutch和Tika。这些现在已经成为顶级Apache项目,而Solr最近又作为子项目加入了。 Lucene具有全面的功能,但是以其在问答搜索引擎和信息检索系统中的使用而闻名。
好处
优点如下:
高效的全文本搜索
可扩展
多语言支持
出色的开箱即用功能
缺点
缺点是数据库通常更适合
关系操作。
安装
Lucene可以从https://lucene.apache.org/下载,如果
您希望了解更多信息并直接与图书馆互动。
使用Lucene时,我们实际上只需要包含Lucene-
core- <版本>。我们项目中的jar。例如,当
使用Maven:
org. apache. lucene
lucene-core
6. 1. 0
Kibana
Kibana是一个分析和可视化平台,还提供图表和流数据汇总。 它使用Elasticsearch为其数据源(反过来使用Lucene),因此可以大规模利用非常强大的搜索和索引功能。 Kibana可用于以多种不同方式可视化数据,包括条形图,直方图和地图。 在本章结束时,我们已经简要提到过Kibana,它将在本书中广泛使用。
好处
优点如下:
大规模可视化数据
直观的界面可快速开发仪表板
缺点
缺点如下:
仅与Elasticsearch集成
Kibana版本与特定的Elasticsearch版本相关
安装
由于Kibana具有自己的Web服务器,因此可以轻松地作为独立组件安装。 可以从https://www.elastic.co/downloads/kibana下载。 由于Kibana需要Elasticsearch,因此也需要安装它。 有关更多信息,请参见前面的链接。 Kibana配置在config / kibana中处理。 yml,如果您安装了独立版本的Elasticsearch,则无需进行任何更改,它将立即可用!
弹性搜索
Elasticsearch是基于Lucene的基于Web的搜索引擎(请参见前面)。 它提供了具有多租户功能的分布式全文搜索引擎,其中包含无模式的JSON文档。 它是用Java内置的,但由于其HTTP Web界面,因此可以从任何语言中使用。 这对于通过网页显示的交易和/或数据密集型指令特别有用。
优点如下:
分散式
无架构
HTTP接口
缺点
缺点如下
无法执行分布式交易
缺少前端工具
安装
可以从https://www.elastic.co/downloads/elasticsearch安装Elasticsearch。 为了提供对Rest API的访问,我们可以导入Maven依赖项:
org. elasticsearch
elasticsearch-spark_2. 10
2. 2. 0-m1
还有一个很棒的工具可以帮助管理Elasticsearch内容。 通过https://chrome.google.com/webstore/category/extensions搜索Chrome扩展程序Sense。 用
进一步的解释可以在以下网址找到:https://www.elastic.co/blog/found-sense-a-cool-json-aware-interface-to-elasticsearch。 另外,也可以在https://www.elastic.co/guide/zh/sense/current/installing.html上将其用于Kibana。
Accumulo
Accumulo是基于Google Bigtable设计的非SQL数据库,最初由美国国家安全局开发,随后于2011年发布到Apache社区。Accumulo为我们提供了通常的大数据优势,例如批量加载和并行读取,但 具有一些附加功能; 迭代器,用于高效的服务器和客户端的预计算,数据聚合以及最重要的是单元级安全性。 Accumulo的安全性方面使其对于企业使用非常有用,因为它在多租户环境中实现了灵活的安全性。 Accumulo由与Apache Kafka相同的方式由Apache Zookeeper提供支持,并且还利用Apache Thrift https://thrift.apache.org/来启用跨语言远程过程调用(RPC)功能。
好处
优点如下:
Google Bigtable的纯实施
单元级安全
可扩展
冗余
提供用于服务器端计算的迭代器
缺点
缺点如下:
Zookeeper在DevOps中并不普遍流行
批量关系操作并非始终是最有效的选择
安装
Accumulo可以作为Hortonworks HDP版本的一部分安装,也可以作为独立实例从https://accumulo.apache.org/安装。 然后,在编写本文时,应使用安装文档配置实例。
https://accumulo.apache.org/1.7/accumulo_user_manual#_installation。
在第7章中,我们将演示Accumulo与Spark的结合使用以及一些更高级的功能,例如迭代器和InputFormats。 我们还将展示如何在Elasticsearch和Accumulo之间使用数据。
在本章中,我们介绍了数据体系结构的概念,并说明了如何将职责分组为有助于在整个生命周期中管理数据的功能。 我们解释说,所有数据处理都需要一定程度的尽职调查,无论这是由公司规则强制执行还是由其他方式强制执行,否则,分析及其结果可能很快失效。 在确定了数据架构的范围之后,我们逐步了解了各个组件及其各自的优缺点,并解释说,我们的选择基于集体经验。 确实,在选择组件时总是有选择的余地,在做出任何承诺之前,应始终仔细考虑其各个特征。 在下一章中,我们将更深入地研究如何获取和捕获数据。 我们将就如何将数据引入平台提出建议,并讨论与通过管道处理和处理数据有关的方面。