在大数据方面,可用的领先技术是 Hadoop 分布式文件系统又名 HDFS(Google DFS 的变体)、Hadoop、Spark/MapReduce 和 Hive(最初由 Facebook 开发)。现在,由于您主要询问大数据处理中使用的数据结构,您需要了解这些系统的作用。
Hadoop 分布式文件系统 - HDFS
简单来说,这是一个文件存储系统,它使用一组廉价机器来存储具有“高可用性”和“容错”特性的文件。 因此,这成为大数据处理中的数据输入源。 现在,这可以是结构化数据(比如逗号分隔的记录)或非结构化数据(世界上所有书籍的内容)。
如何处理结构化数据
用于结构化数据的一项突出技术是 Hive。这提供了一个类似关系数据库的数据视图。请注意,它本身不是关系数据库。此视图的来源再次是存储在磁盘(或大公司使用的 HDFS)上的文件。现在,当您处理数据配置单元时,将逻辑应用于文件(内部通过一个/多个 Map Reduce 程序)并返回结果。现在,如果您希望存储此结果,它将以结构化文件的形式再次登陆磁盘(或 hdfs)。
因此,一系列 Hive 查询可帮助您通过逐步转换将大数据集细化为所需的数据集。认为它就像使用连接从传统数据库系统中提取数据,然后将数据存储到临时表中。
如何处理非结构化数据
在处理非结构化数据时,Map-Reduce 方法是一种流行的方法,还有 Apache Pig(它是半结构化数据的理想选择)。 Map-Reduce 范例主要使用磁盘数据(或 hdfs)在多台机器上处理它们并将结果输出到磁盘上。
如果您阅读了有关 Hadoop 的热门书籍 - Orielly - Hadoop: The Definitive Guide;你会发现 Map Reduce 程序基本上是 Key-Value 类型的数据结构(如 Map)工作的;但它永远不会在某个时间点将所有值保留在内存中。更像是
- 获取键值对数据
- 做一些处理
- 通过上下文将数据发送到磁盘
- 对所有键值执行此操作,从而一次处理来自大数据源的一个逻辑单元。
最后,一个 Map-Reduce 程序的输出被写入磁盘,现在您有一组新数据用于下一级处理(同样可能是另一个 Map Reduce 程序)。
现在回答您的具体问题:
此时我想了解大公司如何使用数据结构来处理每天生成的大量数据。
他们使用 HDFS(或类似的分布式文件系统)来存储大数据。如果数据是结构化的,Hive 是处理它们的流行工具。因为用于转换数据的 Hive 查询更接近 SQL(Syntax-wise);学习曲线真的很低。
他们是否在使用集合框架?
在处理大数据时,整个内容永远不会保存在内存中(即使在集群节点上也不会)。它更像是一次处理一大块数据。这块数据在处理时可能表示为一个集合(内存中),但最后,整个输出数据集以结构化形式转储回磁盘上。
他们是否使用自己的自定义数据结构?
由于并非所有数据都存储在内存中,因此没有特定的自定义数据结构点。但是,Map-Reduce 内部或跨网络的数据移动是以数据结构的形式发生的,所以是的 - 有一个数据结构;但从应用程序开发人员的角度来看,这并不是那么重要的考虑因素。同样,Map-Reduce 或其他大数据处理内部的逻辑将由开发人员编写,您始终可以使用任何 API(或自定义集合)来处理数据;但数据必须以框架期望的数据结构写回磁盘。
他们是否使用多节点数据结构,每个节点运行在单独的 JVM 上?
文件中的大数据在多台机器上以块为单位进行处理。例如一个 10 TB 的数据由多个节点(单独的 JVM,有时还有一台机器上的多个 JVM)在 64 MB 的块中跨集群处理。但同样,它不是跨 JVM 结构化的共享数据;而是跨 JVM 的分布式数据输入(以文件块的形式)。
到目前为止,collection 对象在单个 jvm 上运行,当内存中有溢出流信号且缺少处理资源时,无法动态使用另一个 jvm
你是对的。
通常还有哪些其他开发人员用于大数据数据结构的方法?
对于数据输入/输出而言,它始终是 HDFS 上的文件。从数据的处理(应用程序逻辑);您可以使用任何可以在 JVM 中运行的普通 Java API。现在,由于集群中的 JVM 在大数据环境中运行,它们也有资源限制。因此,您必须将应用程序逻辑设置为在该资源限制内工作(就像我们对普通 java 程序所做的那样)
其他开发者如何处理它?
我建议阅读权威指南(在上一节中提到)以了解大数据处理的构建块。这本书很棒,涉及大数据的许多方面/问题及其解决方法。
我想获得一些关于真实用例和经验的提示。
有大量的大数据处理用例,特别是金融机构。 Google Analytic 是突出的用例之一,它捕捉用户在网站上的行为,以确定网页上放置 google 广告块的最佳位置。我正在与一家领先的金融机构合作,该机构将用户的交易数据加载到 Hive 中,以便根据用户的行为进行欺诈检测。