澳门百家乐网址

首页 > 正文

大数据的发展以及它是如何改变程序设计方式的

www.diyarbakirpvc.com2019-07-09
百家乐下载app

随着大数据框架和技术的出现,现代编程语言爆炸式增长。当然,客户端开发已经发生了转变,移动设备应用程序的数量已经爆炸式增长。但无论移动设备市场有多大以及客户技术如何创新,都有一个事实:我们每天都有越来越多的数据需要处理。随着数据量的增长,分析和利用这些数据的好处的需求也在增长。

(这里添加了一张圆卡,请查看今天的标题客户端)

欢迎加入程序员阅读俱乐部,每天分享IT好书,并不时捐赠免费的IT好书

但是,批量处理大量数据(批处理)的能力是不够的。越来越多的组织发现他们需要在数据到达时处理(流式传输)数据。 Kafka Streams提供了一种先进的流媒体方法,一个处理每个事件记录的库。基于每个事件的处理意味着每个单独的数据记录一到达就能及时处理,而不需要将数据分成小批量(微批处理)。

注意

当数据到达时需要处理数据变得更加明显,一种新的策略应运而生。 Microbatch。顾名思义,所谓的微批处理也是批处理,但数据量较小。通过减少批量大小,微量分批处理有时可以更快地产生结果;然而,微量分批处理仍然是批处理,尽管间隔较短。它并不真正处理每个事件。

1.1.1大数据来源

在20世纪90年代中期,互联网开始真正影响人们的日常生活。从那时起,网络提供的连接为我们提供了前所未有的信息访问能力,以及与世界上任何人即时通信的能力。在所有这些互操作性访问中,的意外副产品生成了大量数据。

但在我看来,大数据时代正式开始于1998年,当时谢尔盖布林和拉里佩奇创立了谷歌。 Sergey Brin和Larry Page开发了一种新的网络搜索排名方法,即 PageRank算法。在非常高的层次上,PageRank算法通过计算站点链接的数量和质量来对站点进行排名。该算法假定网页越重要或相关,网站将引用它越多。

图1-1提供了PageRank算法的图形表示。

c142b3dd491c40acac40e978cfac6d23

图1-1 PageRank算法应用程序。圈子代表网站,其中较大的圆圈表示还有更多其他网站链接到它

网站A是最重要的,因为它是最多的参考。网站B有点重要,虽然没有多少参考,但有一个重要的网站指向它。网站C没有网站A或网站B的重要性。尽管对站点C的引用多于对站点B的引用,但这些引用的质量较低。底部网站(从D到I)没有引用它们,这使得它们的价值降低。

虽然图1-1是PageRank算法的极端简化,但它显示了算法实现原理的基本思想。

当时,PageRank是一种革命性的方法。以前,Web上的搜索更有可能使用布尔逻辑来返回结果。如果网站包含您要搜索的所有或大部分字词,则无论内容的质量如何,网站都将显示在搜索结果中。但是,在所有Internet内容上运行PageRank算法需要一种新方法。传统的数据处理方法需要很长时间。为了生存和发展,Google需要快速索引所有内容(“快速”是一个相对术语)并向公众展示高质量的结果。

谷歌开发了另一种革命性的方法来处理所有这些数据。 MapReduce范例。 MapReduce不仅使谷歌能够完成公司所需的工作,而且还无意中催生了一个新的计算行业。

1.1.2 MapReduce中的重要概念

当Google开发MapReduce时,map和reduce函数不是新概念。 Google方法的独特之处在于,这些简单的概念在许多机器上大规模应用。

MapReduce的核心是函数式编程。 map函数接受一些输入并将这些输入映射到其他对象而不更改原始值。以下是在Java 8中实现的一个简单示例,它将LocalDate对象映射到字符串消息,并且不修改原始LocalDate对象。代码段如下:

函数addDate=

(日期) - >'星期几是'+ date.getDayOfWeek();

虽然简单,但这个简短的例子足以说明映射函数的功能。

但是reduce函数采用一组参数并将它们舍入到一个值,或者至少参数的大小更小。取一组数字并将它们加在一起就是减少操作的一个很好的例子。

要对一组数字执行减少,请首先初始化一个起始值。在这种情况下,将起始值设置为0(添加的标识)。下一步是将起始值添加到数字列表中的第一个数字,然后将第一个步骤的结果添加到列表中的第二个数字。该函数重复此过程,直到列表中的最后一个数字生成一个值。

以下是减少整数1,2,3的列表的过程,代码片段如下:

0 + 1=1?---将起始值添加到第一个数字

1 + 2=3?---将第一步计算结果添加到列表中的第二个数字

3 + 3=6?---将第二步的总和加到列表中的第三个数字,这是列表中的最后一个数字

如您所见,reduce函数将结果聚合在一起以形成较小的结果集。与映射功能类似,reduce功能不会修改原始号码列表。

现在,让我们看看如何使用Java 8的lambda表达式实现这样一个简单的reduce函数。代码段如下:

列表编号=Arrays.asList(1,2,3);

Int sum=numbers.reduce(0,(i,j) - > i + j);

由于本书的主题不是解释MapReduce,因此我们不在此讨论其背景。但是,您可以看到MapReduce范例(后来在Hadoop中实现,基于Google的MapReduce白皮书的原始开源版本)介绍了一些仍然适用于Kafka Streams的重要概念。

如何在群集中分发数据以实现可管理的规模。使用键/值对和分区将数据组合在一起。使用副本来容忍故障而不是避免故障。

接下来,我们将对这些概念进行一般性讨论。应该指出的是,这些概念的介绍将贯穿本书,所以下面将再次提到它们。

1.在集群中分发数据以实现处理规模

对于单个机器,处理5 TB(5000 GB)数据可能非常困难。但是,如果数据除以每个服务器可以处理的数据量,并且处理多台机器,则最大限度地减少了大量数据的问题。表1-1清楚地说明了这一点。

a89dc4453d7f49a89408ccc55af0b785

从表1-1中可以看出,您可能需要首先处理大量数据,但通过在更多计算机上分配负载,数据处理不再是问题。表1-1中最后一行中的1 GB数据可以通过笔记本电脑轻松处理。

这是了解MapReduce的第一个关键概念:通过在一组计算机上分散负载,您可以将大规模的数据转换为可管理的数量。

2.使用键/值对和分区对分布式数据进行分组

键/值对是具有强大含义的简单数据结构。在上一节中,我们看到了跨计算机集群传播大量数据的价值。分散数据解决了数据处理的问题,但现在的问题是如何聚合分布在不同机器上的数据。

要重新组合分布式数据,可以使用键/值对键对数据进行分区。术语“分区”表示分组,但并不意味着使用完全相同的密钥,而是使用具有相同哈希码的密钥进行分组。要将数据拆分为多个部分,可以使用以下公式:

Int partition=key.hashCode()%numberOfPartitions;

图1-2显示了如何应用哈希函数来获取存储在不同服务器上的奥运事件的结果,并将它们分组到不同事件的分区中。所有数据都存储在键/值对中。在图1-2中,键是事件的名称,值是单个玩家匹配的结果。

d94da0c0aeab4d70af8b8d53caf73c68

图1-2按钮对分区上的记录进行分组。虽然记录从不同的服务器开始,但它们最终会出现在适当的分区中

分区是一个重要的概念,我们将在后面的章节中看到详细的例子。

3.使用复制

接受失败

Google MapReduce的另一个重要组成部分是Google文件系统(GFS)。正如Hadoop是MapReduce的开源实现一样,Hadoop文件系统(HDFS)是GFS的开源实现。

在更高级别,GFS和HDFS都将数据拆分为多个数据块,并将这些数据块分配到集群中。但GFS或HDFS的本质是如何处理服务器和硬盘故障。处理框架不会尝试防止失败,而是通过在群集中复制块来接受失败(默认复制因子为3)。

通过在不同服务器上复制数据块,您不再需要担心磁盘故障甚至整个服务器故障都会导致停机。数据复制对于为分布式应用程序提供容错至关重要,容错对于分布式应用程序的成功至关重要。稍后我将看到分区和复制在Kafka Streams中的工作原理。

1.1.3批处理是不够的

Hadoop很快在计算机领域变得流行,允许它在使用商业硬件时处理大量数据并具有容错性(节省成本)。但是Hadoop/MapReduce是面向批处理的。面向批处理意味着首先收集大量数据,然后进行处理,并存储处理后的输出以供以后使用。批处理非常适合像PageRank这样的场景,因为您无法通过实时观察用户点击来判断互联网上的哪些资源是有价值的。

但公司也越来越多地面临着更快地回应重要问题的压力,例如:

目前的趋势是什么?您在过去10分钟内完成了多少次无效登录尝试?用户群如何利用我们最近发布的功能?

显然,需要另一种解决方案,此解决方案是流式传输。

热门浏览
热门排行榜
热门标签
日期归档