Big Data 是一个非常广泛的领域吗, 通常由数据科学家组成的混合团队来解决, 数据分析师, 软件工程师, 和统计学家. 因此,找到一个精通该领域的人,而不是微软Azure专家,是极不可能和罕见的. Rather, 人们很可能会寻找具有特定子领域专业知识的多个个人. 因此,本指南在较高层次上分为两部分:
本指南重点介绍与关键概念相关的问题, 范例, 以及大数据专家有望熟练掌握的技术. 记住, though, 并不是每个“A”考生都能回答全部问题, 回答所有问题也不能保证成为A级考生. 最终, 有效的面试和招聘 它是一门艺术还是一门科学.
大数据算法、技术和方法
说到大数据和数据管理, 具有相关算法的基础知识和工作经验, 技术, 大数据平台, 方法很重要. 一般来说, 掌握这些领域比成为一组特定软件语言或工具的专家需要更多的时间和技能. As such, 在这些领域拥有专业知识的软件工程师很难找到,而且对您的团队非常有价值. 下面的问题可以帮助你衡量这些专业知识.
问:给定一个未知长度的数据流, 并且要求创建一个固定大小的样本, 如何在整个数据集上执行一个简单的随机抽样? (i.e., 给定数据流中的N个元素, 你如何产生一个含有k个元素的样本, where N > k, 每个元素都有1/N的机会被包含在样品中?
解决这个问题的有效算法之一是 水库采样 .
基本流程如下:
创建一个大小为k的数组.
用流中的前k个元素填充数组.
对于从流中读取的每个后续元素E(索引为i), 生成0到I之间的随机数j. 如果j小于k,替换jth 数组中含有E的元素.
这种方法使流中的每个元素在输出样本中出现的概率相同.
问:描述和比较一些用于聚类分析的更常见的算法和技术.
聚类分析是一种常用的无监督学习技术,应用于许多领域. 它在科学和商业上都有广泛的应用. 一些例子包括:
生物信息学 通过分析基因表达模式的相似性,将基因组织成簇.
市场营销 :发现不同的客户群体,并利用这些知识来组织针对正确市场细分的活动.
保险 :确定具有高平均索赔成本的保险持有人类别.
聚类算法 是否可以根据其底层集群模型进行逻辑分类,如下表所示.
聚类算法 Category 描述 优势 缺点
基于物体之间“接近”的核心思想,彼此之间的关系更加密切, 这些算法根据距离将物体连接起来形成聚类
采用距离算法(如 Levenshtein距离 在字符串比较的情况下)来确定对象的“接近度”
联动标准可以基于最小距离(单联动), 最大距离(完整联动), 平均距离, 质心的距离, 或者其他任意复杂度的算法
集群可以是聚集性的(从单个元素开始), 将它们聚集到集群中)或分裂(从完整的数据集开始), 将其划分为多个分区).
不需要预先指定集群的数量
是否可用于概念验证或初步分析
生成一个层次结构,用户仍然需要从中选择适当的集群
复杂性通常使它们对于大型数据集来说速度太慢
“链接现象”, 因此,异常值要么显示为额外的集群,要么导致其他集群错误地合并
聚类由一个中心向量表示,它不一定是集合的成员.
当簇数固定为K时, K-means聚类给出了一个优化问题的正式定义:找到K个聚类中心,并将对象分配到最近的聚类中心, 使得到集群的平方距离最小.
有大量的变量, K- means在计算上可能比分层聚类更快(如果K很小)
K-Means可能产生比分层聚类更紧密的聚类, 特别是如果星团是球状的
需要提前指定集群数量(K)
喜欢大小近似的集群, 这通常会导致集群之间的边界设置不正确
无法表示基于密度的集群
基于分布模型,集群对象似乎属于同一分布.
非常类似于人工数据集生成的方式(例如.e.(通过从分布中随机抽样对象).
为集群生成复杂的模型,这些模型还可以捕获属性的相关性和依赖性
会遭受 过度拟合 (i.e.(描述随机误差或噪声,而不是潜在的关系)
需要选择合适的数据模型进行优化(这对于许多现实世界的数据集来说是相当具有挑战性的)
聚类被定义为比数据集其余部分密度更高的区域. 稀疏区域中的对象通常被认为是噪声点和/或边界点.
基于距离阈值连接点(类似于基于链接的聚类), 但只连接那些满足特定密度标准的.
最流行的基于密度的聚类方法是 DBSCAN ,其特点是一个定义良好的集群模型,称为“密度-可达性”。.
不需要预先指定集群的数量
Can find arbitrarily-shaped clusters; can even find a cluster completely surrounded by (but not connected to) a different cluster
基本上对数据库中点的顺序不敏感
期望密度“下降”或“悬崖”来检测聚类边界
DBSCAN无法检测在许多真实数据中普遍存在的内在集群结构
在由高斯分布混合组成的数据集上, 几乎总是优于能够精确模拟此类数据的EM聚类等方法
定义并讨论ACID、BASE和CAP定理.
ACID 指以下一组属性,它们共同保证数据库事务的可靠处理, 目标是“即时一致性”:
A tomicity. Requires each transaction to be “all or nothing”; i.e., 如果交易的一部分失败, 整个事务失败, 数据库状态保持不变.
C onsistency. 要求每个事务将数据库从一种有效状态带到另一种有效状态. 根据所有定义的规则,写入数据库的任何数据都必须是有效的, 包括(但不限于)约束, cascades, triggers, 以及它们的任何组合.
I solation. 要求并发执行事务,以产生与顺序执行相同事务所获得的系统状态相同的状态.
D urability. 要求, 一旦事务被提交, 即使在断电的情况下,它也会保持这种状态, crashes, 或错误.
许多数据库依赖于锁定来提供ACID功能. 锁定意味着事务标记它所访问的数据,以便DBMS知道在第一个事务成功或失败之前不允许其他事务修改它. 锁定的另一种选择是 多版本并发控制 其中,数据库为每个读事务提供优先级, 另一个活动事务正在修改的数据的未修改版本.
在没有单个节点负责影响事务的所有数据的分布式数据库中,保证分布式事务中的ACID属性会带来额外的复杂性. 网络连接可能失败, 或者一个节点可能成功地完成了其事务部分,然后被要求回滚其更改, 因为另一个节点发生故障. The 两阶段提交协议 (不要与两阶段锁定混淆)为分布式事务提供原子性,以确保事务中的每个参与者都同意是否应该提交事务.
与ACID(及其以即时一致性为中心的方法)相反, BASE(基本可用、软状态、最终一致性) 支持操作的可用性而不是一致性.
BASE是作为一种替代方案开发的,用于生成更具可扩展性和可负担性的数据架构. 允许不经常更新的数据,使开发人员可以自由地在整个系统中构建其他效率. In BASE, 工程师们相信数据具有“最终”更新的灵活性, 解决的或一致的, 而不是立即解决.
The 最终一致性 BASE采用的模型非正式地保证了这一点, 如果没有对给定数据项进行新的更新, 最终,对该项的所有访问都将返回最后更新的值. 一个达到最终一致性的系统通常被称为趋同, 或者实现副本聚合. 最终一致性有时被批评为增加了分布式软件应用程序的复杂性.
在几乎所有的模型中, 一致性和可用性等元素通常被视为资源竞争对手, 哪里调整一个会影响另一个. 因此, 上限定理 (a.k.a. 布鲁尔定理(Brewer’s theorem)指出,分布式计算机系统不可能同时提供以下三种保证中的两种以上:
C 一致性(所有节点同时看到相同的数据)
A 可用性(保证每个请求都收到关于其成功或失败的响应)
P 分区容忍度(尽管系统的任意消息丢失或部分故障,系统仍继续运行)
在它推出后的十年里 , 设计师和研究人员利用CAP定理来探索各种各样的新型分布式系统. 因此,CAP定理确实被证明是有用的, 促进讨论, debate, 以及解决权衡的创造性方法, 其中一些甚至产生了新的系统和技术.
然而与此同时, “三选二”的约束确实在某种程度上过度简化了这三个属性之间的紧张关系. 通过显式处理分区, 例如, 设计人员可以优化一致性和可用性, 从而实现三者之间的某种权衡. 尽管当存在分区时,设计人员确实需要在一致性和可用性之间做出选择, 在处理分区和从中恢复方面有很大的灵活性.
CAP定理的某些方面经常被误解, 特别是可用性和一致性的范围, 哪些会导致不良后果. 如果用户无法访问该服务, 除非部分服务在客户端上运行,否则在C和A之间没有选择. 这个异常, 通常称为断开连接操作或脱机模式, 变得越来越重要. HTML5的一些功能使断开操作更容易. 这些系统通常选择A而不是C,因此必须从长分区中恢复.
问:什么是降维?降维与处理大数据有何关联? 列举一些通常用于降维的技术.
降维是将高维数据转换为低维数据的过程, 通常用于可视化等目的.e, 投影到2D或3D空间以实现可视化), 压缩(为了有效的存储和检索), 或者去噪.
一些更常见的降维技术包括:
Note: 上面列出的每一种技术本身都是一个复杂的主题, 因此,每一个都作为一个超链接提供给那些有兴趣了解更多信息的人.
问:讨论一些常见的统计抽样技术,包括它们的优缺点.
在分析大数据时,处理整个数据集通常在操作上是站不住脚的. 探索一个有代表性的样本更容易, 更高效的, 在很多情况下,它几乎可以像探索整个数据集一样准确. 下表描述了一些 统计抽样 这些技术更常用于大数据.
常用抽样技术 Technique 描述 优势 缺点 每个元素都有相同的选择机会(任何一对元素也是如此), 元素三元组, etc.)
对数据排序,并通过有序数据集定期选择元素
易受有序数据周期性的影响
理论性质使其难以量化准确性
将数据划分为单独的层(i.e.(分类),然后对每个地层分别取样
能够对特定的子群体进行推断
Focuses on important subgroups; ignores irrelevant ones
提高估计的准确性/效率
不同的抽样技术可以应用于不同的子组
可以增加样本选择的复杂性吗
分层变量的选择可能很困难
当没有同构子群时,它是无用的
有时是否需要比其他方法更大的样本
问:解释一下“缓参无关”这个术语。. 讨论其在处理大数据的背景下的一些优点和缺点.
A 缓存无关 (a.k.a., 缓存超越(cache transcendent)算法的设计目的是在不知道CPU缓存大小的情况下利用它. 它的目标是在不修改或调优的情况下,在具有不同缓存大小的机器上表现良好, 或者对于具有不同缓存大小级别的内存层次结构.
Typically, 缓参无关算法采用递归分治方法, 这个问题被分成越来越小的子问题, 直到达到适合可用缓存的子问题大小. 例如, 通过递归地将每个矩阵划分为四个待乘的子矩阵,得到了最优的缓存无关矩阵乘法.
对特定机器进行调优, 可以使用混合算法,该算法使用针对底层特定缓存大小进行调优的阻塞, 但除此之外使用无关缓存算法.
表现出色的能力, 独立于缓存大小,没有特定于缓存大小的调优, 缓参无关方法的主要优点是什么. However, 重要的是要认识到,缺乏任何特定于缓存大小的调优也意味着缓存无关算法可能不如缓存感知算法(例如缓存感知算法)执行得好.e.(调优到特定缓存大小的算法). 缓参无关方法的另一个缺点是,它通常会增加数据结构的内存占用, 这可能会进一步降低性能. 有趣的是尽管, 在实践中, 缓存无关算法的性能通常与缓存感知算法惊人地相似, 让它们在大数据处理中变得更加有趣和相关.
大数据技术
这些天, it’s not only about finding a single tool to get the job done; rather, 它是关于建立一个可扩展的架构来有效地收集, process, 并查询大量的数据. 具备强大的大数据算法基础知识, 技术, 和方法, 大数据专家将能够从不断增长的技术领域中使用工具,这些工具可用于利用大数据提取可操作的信息. 下面的问题可以帮助评估候选人在这方面的专业知识.
问:什么是Hadoop? 它的主要特点是什么? 它由哪些模块组成?
Apache Hadoop 软件框架是否允许跨计算机集群对大型数据集进行分布式处理. 它旨在有效地从单个服务器扩展到数千台机器, 每个都提供本地计算和存储. 而不是依赖硬件来提供高可用性, 库本身设计用于检测和处理应用层的故障.
该项目包括以下模块:
HDFS (Hadoop Distributed File System): 提供对应用程序数据的高吞吐量访问的分布式文件系统.
Hadoop MapReduce: 并行处理大型数据集的系统.
Hadoop纱: 用于作业调度和集群资源管理的框架.
Hadoop常见: 支持其他Hadoop模块的常用实用程序.
问:提供HDFS的概述,包括HDFS集群及其组件的描述.
HDFS 是高度容错的分布式文件系统吗, 通常用作Hadoop作业中的数据源和数据输出. 它建立在一个简单的写一次读多(可能有追加)访问的一致性模型上. 它支持传统的目录和文件分层组织.
HDFS采用主/从架构. An HDFS集群 由单个 NameNode 管理文件系统命名空间和规范客户端对文件的访问的主服务器. 此外,还有一些 datanode ,通常是集群中的每个节点一个,它们管理附加到它们所运行的节点上的存储. HDFS公开了一个文件系统命名空间,允许用户数据存储在文件中. 在内部, 文件被分割成一个或多个块,这些块存储在一组datanode中. NameNode执行文件系统命名空间操作,如打开, closing, 重命名文件和目录. 它还决定了块到datanode的映射. datanode负责处理来自文件系统客户端的读写请求. datanode也执行块创建, deletion, 并根据NameNode的指令进行复制.
HDFS集群还包含一个被称为 二次NameNode 它定期下载当前的NameNode映像,编辑日志文件,并将它们连接到一个新映像中. 并将新图像上传到NameNode. (尽管它的名字,次要的NameNode做 not 作为主NameNode在故障时的备份.)
需要注意的是,HDFS是用来处理大文件的, 默认块大小为128 MB. 这意味着,例如,一个1gb的文件将被分割成8个块. 另一方面,一个只有1 KB的文件仍然需要一个完整的128 MB块. 选择能够优化集群性能的块大小可能是一个挑战,在这方面没有“放之四海而皆准”的答案. 将块大小设置为过小的值可能会增加网络流量,并给服务器带来巨大的开销 NameNode ,它处理每个请求并定位每个块. 另一方面,将其设置为太大的值可能会导致大量的空间浪费. 因为HDFS的重点是大文件, 一种策略是将小文件合并成大文件, 如果可能的话.
问:请概述一下MapReduce, 包括对其关键组成部分的讨论, features, 和福利.
MapReduce 处理和生成大型数据集的编程模型和相关实现是并行的吗, 集群上的分布式算法.
MapReduce程序由一个 Map()
执行过滤和排序的过程 Reduce()
执行摘要(i.e.(数据约简)操作. MapReduce系统通过编组分布式服务器来编排处理过程, 并行运行各种任务, 管理系统各部分之间的所有通信和数据传输, 并提供冗余和容错性.
MapReduce使用集群或网格中的大量节点处理跨大型数据集的并行化问题,如下所示:
Map step: 主节点接受输入, 把它分成更小的子问题, 并将它们分发给工作节点. 工作节点可以依次执行此操作,从而形成多级树结构. 工作节点处理较小的问题,并将答案传回主节点.
减少步骤: 主节点从它的工作节点收集答案,并将它们组合成它的输出.e.(它所要解决的问题的答案).
MapReduce允许分布式处理映射和约简操作. 前提是每个映射操作相互独立, 所有映射都可以并行执行(尽管在实践中,这受到独立数据源数量和/或每个数据源附近的cpu数量的限制)。. 类似的, 一组“还原器”可以执行还原阶段, 假设map操作的所有输出共享相同的键同时呈现给同一个reducer, 或者说约简函数是结合式的. 虽然与更顺序的算法相比,这个过程通常显得效率低下, MapReduce可以应用于比高性能服务器通常可以处理的大得多的数据集.g., 一个大型的“商品”服务器群可以使用MapReduce在几个小时内对1拍字节的数据进行排序)。.
MapReduce的并行性还有助于在操作过程中从服务器或存储的部分故障中恢复.e., 如果一个映射器或reducer失败, 这项工作可以重新安排, 假设输入数据仍然可用). 这一点尤为重要, 因为单节点的故障在多机器集群中相当常见. 当有成千上万的圆盘旋转几个小时, 他们中的一两个在某个时候失败并不是不可能的.
MapReduce框架的主要贡献并不是map和reduce函数本身, 但可伸缩性和容错性实现了各种应用程序. 应该注意的是,MapReduce的单线程实现通常不会比传统实现快. 它的好处通常只有在优化的分布式shuffle操作(降低网络通信成本)和框架的容错特性发挥作用时才能实现.
作为旁注, MapReduce这个名字最初指的是一种专有的谷歌技术,但后来被推广了.
问:请详细描述MapReduce的进程.
并不是所有的大数据软件工程师都熟悉MapReduce过程的内部, 这些人将会更好地利用它的能力,从而构建和设计一个最优的解决方案.
MapReduce库是用多种编程语言编写的, 有不同程度的优化. 一个流行的开源实现是Apache Hadoop. 因此,我们提供了一个以hadoop为中心的MapReduce过程描述, 这里描述的Apache Hadoop MapReduce 1 (MR1)和Apache Hadoop MapReduce 2 (MR2), a.k.a. YARN). 为了简单起见,我们使用一个从HDFS获取输入并将其存储回HDFS的示例. 这一进程的运作方式如下:
当地的 工作的客户 为提交准备作业并将其发送到 资源管理器 (MR2) or 工作追踪 (MR1).
资源管理器 (MR2) / 工作追踪 (MR1)跨集群调度作业. 在MR2的情况下 应用程序主 是启动的,它将负责管理工作并在完成后终止它. 作业被发送到 节点管理 (MR2) or 任务跟踪器 (MR1). An InputSplitter 是用来分配 map 以最有效的方式跨集群执行任务.
每一个 报告经理 (MR2) / 任务跟踪器 (MR1)生成a map 任务,将进度更新发送到 应用程序主 (MR2) / 工作追踪 (MR1). 输出被划分,根据它需要去的减速机. 一个可选的 Combiner 也可以用于连接同一本地键的值.
If a map 失败,则重试(最多重试定义的最大次数).
After a map succeeds, 可以将带有输出的本地分区复制到各自的reduce节点(取决于分区)。.
当一个reduce任务接收到所有相关文件后,它会启动一个 那种阶段 ,在其中合并映射输出,保持键的自然顺序.
对于排序输出中的每个键,a reduce函数 ,并将输出存储到所需的接收器(在我们的示例中是HDFS)。. 因为执行它的节点通常也是 DataNode ,将第一个副本写入本地磁盘.
如果减速机失败,将重新运行它.
在一个成功的操作链之后,临时文件将被删除 应用程序主 优雅地关闭.
问:大数据常用的NoSQL数据库主要有哪些类型?
近年来, 大数据的日益普及和相关性极大地增加了存储和处理大量数据的需求. 这导致了从更传统的关系数据库系统向其他方法和技术的转移, 通常被称为 NoSQL databases. NoSQL数据库通常比传统的SQL数据库简单,并且通常缺乏ACID事务功能, 从而使它们更加高效和可扩展.
这类数据库的分类法可以使用两个不同的空间创建. 虽然下表按数据模型对它们进行了分组,但在大数据的背景下, 一致性模型 在评估这些类型的数据存储的选项时,要考虑的另一个关键特性是什么.
NoSQL / BigData数据存储 Type 描述 优势 缺点
保存数据的最简单方法之一就是使用分层文件系统. 它非常简单,而且通常也非常有效.
最适合存储巨大的对象
简单的模型使其易于调优以提高效率
跨多个节点分布文件(并使用多个副本)有助于提高可伸缩性和吞吐量
可以直接安装吗.g. using FUSE )
只有一个非常基本的模式可用(目录结构)
不适合多个小物体
没有内置索引功能
通常,如果发生单个更改,则必须重写整个文件
将数据表示为键值对的集合.
更复杂的数据模型可以在这样的结构之上实现.
简单的概念
易于按键对数据进行分区
Very simple schema (value is often just a blob; some datastores, 比如Redis, 提供更复杂的值类型(包括集合或映射)
可以非常快,特别是基于内存的实现
有许多实现可供选择
有时候太简单了
使得对公共数据进行分组变得困难
不能在数据库端定义复杂的模式
受b谷歌的启发 BigTable出版 ,将数据存储在能够存储大量动态列的记录中.
一般来说,使用比较松散的模式来描述数据——定义表和主列(例如.g. columnfamily(在HBase的情况下),并且对存储在其中的数据具有灵活性, 它们是键值.
写入速度非常快
易于扩展
使用灵活的模式将数据组织到表和列中
易于存储带有时间戳的操作历史
部分版本(e).g.(HBase)需要整个(通常是复杂的)Hadoop环境作为先决条件
通常需要努力调优和优化性能参数
Designed around the concept of a "document"; i.e.以某种标准格式(如JSON、XML等)封装数据的单个对象.).
与带有行的表不同,它对文档集合进行操作.
独立于设计
简单性在可伸缩性和性能方面带来了显著的提升
许多真实世界的对象实际上是文档
多种实现支持开箱即用的索引
追踪任何一种关系都是困难的
没有任何隐含模式会给客户机增加工作量
问:猪、蜂巢和黑斑羚是什么? 它们之间有什么区别?
Pig, Hive, 和Impala是Apache Hadoop生态系统中用于查询和处理数据的大数据框架的例子. 虽然最近出现了许多其他系统(值得注意的包括Facebook) Presto or 火花SQL ),但在处理大数据挑战时,它们仍然被认为是“三大”. 下表提供了这三者的基本描述和比较.
比较概述:蜂巢、猪和黑斑羚 Pig Hive Impala 2006年由雅虎研究公司推出. 在非常大的数据集上创建和执行map-reduce作业的特殊方式 2007年由Facebook推出. 千兆字节规模的数据仓库框架. 2012年由Cloudera推出. 在HDFS上大规模并行处理SQL查询引擎. PigLatin,程序化,面向数据流 HiveQL,类似sql的语法,声明性的 SQL 运行MapReduce作业 运行MapReduce作业 Custom execution engine; does most of its operation in-memory 批处理或ETL 批处理,特别查询 Interactive-like 相对容易使用用户定义函数(UDF)进行扩展 使用UDF进行扩展相对困难 支持本地(c++)和Hive udf 查询的高容错性 查询的高容错性 如果一个节点失败,查询将被终止
问:什么是Apache特斯和Apache火花? 他们解决了什么样的问题(以及如何解决)?
MapReduce的一个问题是它不适合交互式处理. Moreover, 将一个MapReduce作业堆叠在另一个作业上(这是运行时常见的现实用例), 例如, Pig or Hive 查询)通常是非常无效的. 每个阶段结束后, 中间结果存储到HDFS, 只能作为输入被另一个作业接收, and so on. 它还需要在reduce阶段对数据进行大量的变换. 虽然有时它确实是必要的, 在许多情况下,实际的流程是可以优化的, 因为一些作业可以连接在一起,或者可以使用一些缓存,这将减少连接的需要,并实际上显着提高速度.
解决这些问题是创造的重要原因之一 Apache特斯 and Apache火花 . 它们都一般化了MapReduce范式,并通过首先使用类定义流来执行整个作业 直接无环图(DAG) . 在高层次的抽象中,每个顶点都是一个用户操作.e., 对输入数据执行某种形式的处理), 而每条边定义了与整个作业的其他步骤的关系(例如分组), 过滤, counting, 等等). 根据指定的DAG, 调度器可以决定哪些步骤可以一起执行(以及何时执行),哪些步骤需要在集群上推送数据. 此外,这两个 Tez and Spark 提供缓存形式,最大限度地减少在节点之间推送庞大数据集的需求.
然而,这两种技术之间存在一些显著的差异. Apache特斯 的创建更多的是作为Hadoop生态系统的一个额外元素,利用 YARN 并允许将其轻松包含在现有的MapReduce解决方案中. 它甚至可以很容易地与常规的MapReduce作业一起运行. Apache火花 另一方面,它更像是一种处理大数据的新方法. 它增加了一些新的概念,如 弹性分布式数据集(rdd) , 提供了一个经过深思熟虑的惯用API,用于定义作业的步骤(其中包含的操作远不止这些) map or reduce ,例如 joins or co-groups ),并具有多个与缓存相关的特性. 代码被惰性地求值 直接无环图 是自动创建和优化的(相反,在 Tez ,图形必须手动定义). 考虑到所有这些因素,代码 Spark 趋向于非常简洁. Spark 也是很重要的一部分 伯克利数据分析栈(BDAS) .
问:什么是面向列的数据库? 什么时候用,为什么用?
用于数据库 按列排列磁盘上的数据存储, 而不是按行, 对于特定的操作,哪一个允许更有效的磁盘搜索. 在处理大型数据集时,这有很多好处, 包括更快的聚合相关查询, 高效的数据压缩, 并优化了跨所有(或许多)行的特定列中的值更新.
在实践中,面向列的数据库在操作上是否更高效会有所不同. 似乎为对象检索数据的操作会变慢, 需要大量的磁盘操作来从多个列收集数据以建立记录. 然而,这些整行操作通常是罕见的. 在大多数情况下,只检索有限的数据子集. 在rolodex应用程序中, 例如, 为了构建联系人列表,从许多行中收集名字和姓氏的操作比读取rolodex中单个实体的所有数据的操作要常见得多. 在将数据写入数据库时更是如此, 特别是当数据趋向于“稀疏”且有许多可选列时.
此外,按列组织的数据是一致的,往往压缩得很好.
出于这些原因, 尽管存在理论上的缺点,列存储已经证明了出色的实际性能.
问:什么是Lambda架构,如何使用它对实时更新的流执行分析?
大数据的一个常见用例是实时处理大量传入数据流. 根据实际问题和数据的性质,可能会提出多种解决方案. 一般来说,a λ架构 方法通常是解决这类挑战的有效方法.
核心概念是结果始终是输入数据(lambda)的函数。. 最终的解决方案应该像lambda函数那样工作, 与它要处理的数据量无关. To make this possible, the data is split into two parts; namely, raw data (它永远不会改变,只能追加)和 预先计算的数据 . The 预先计算的数据 is further subdivided into two other groups; namely, the old 数据和 recent 数据(其中“旧的”和“最近的”是相对术语), 具体取决于操作环境).
有了这个区别,我们现在可以建立一个基于 λ架构 由以下三个主要组成部分组成:
批处理层. 管理主数据集(一个不可变的, (仅追加原始数据集)和预计算任意查询函数(称为批处理视图).
服务层. 索引批处理视图以支持低延迟的临时查询.
速度层. 满足低延迟要求的所有请求. 使用快速和增量算法,速度层只处理最近的数据.
有许多工具可以应用于这些体系结构层. 例如,原始结果可以简单地存储在 HDFS and the 批处理意见 可能是预先计算出来的 Pig jobs. 类似地,使查询成为可能 批处理意见 实际上,可以使用以下技术对它们进行索引 Apache钻 , Impala , ElasticSearch 或者其他很多人.
然而,速度层通常需要大量的努力. 幸运的是,有许多新技术也可以帮助解决这个问题. 最常用的一个是 Apache风暴 它使用抽象的 spouts and bolts 定义数据源及其操作,允许对流数据进行分布式处理.
最后一个要素是结合的结果 速度层 and the 服务层 在组装查询响应时.
的批处理能力 Hadoop 具有结果的实时可用性. 如果底层算法发生了变化,重新计算是很容易的 批处理意见 作为批处理,然后更新 速度层 把新版本考虑进去.
Wrap-up
毫无疑问, 大数据是当今软件行业面临的最强大、最普遍的挑战之一. 来自社交网络, 营销, 安全和执法, 对能够有效处理和处理大数据的大规模大数据解决方案的需求日益重要,并呈快速上升趋势.
在这个领域中真正的专业知识和熟练程度需要的远远超过学习特定技术的来龙去脉. 这需要一种理解 第一原理 level, 各种各样的技术挑战和复杂性,以及解决这些障碍的最有效的方法和解决问题的方法.
我们希望本文中提出的问题能够为您在寻找大数据工程师中的精英时“去芜取芽”提供有用的基础, 无论你需要他们全职还是兼职.