【问题标题】:Collection Framework ,Big data and best Practice采集框架、大数据与最佳实践
【发布时间】:2015-10-29 04:31:39
【问题描述】:

我有以下课程

public class BdFileContent {
    String filecontent;
}

例如 file1.txt 有以下内容:

This is test
  • “This”表示文件内容对象的单个实例。
  • “is”代表另一个文件内容对象
  • “test”代表另一个文件内容对象

假设以下是文件夹结构:

lineage
|
+-folder1
|    |
|    +-file1.txt
|    +-file2.txt
|
+-folder2
|    |
|    +-file3.txt
|    +-file4.txt
+-...
|
+-...+-fileN.txt

。 . . .

没有

N>1000 个文件
N值将是非常巨大的价值

BdFileContent 类表示目录中文件中的每个字符串。

我必须做大量的数据操作,需要创建一个复杂数据结构的工作。我必须在内存和磁盘上执行计算。

ArrayList<ArrayList<ArrayList<BdFileContent>>> filecontentallFolderFileAsSingleStringToken = new ArrayList<>(); 

例如上面的对象代表目录的所有文件内容。我必须在 BdTree 中为树节点添加这个对象。

我正在编写自己的树并添加 filecontentallFolderFileAsSingleStringToken 作为节点。

什么扩展集合框架数据结构适用于大数据。

在这一点上,我想了解大公司如何使用数据结构来处理每天生成的大量数据。

他们是否在使用集合框架?

他们是否使用自己的自定义数据结构?

他们是否使用多节点数据结构,每个节点运行在单独的 JVM 上?

到目前为止,collection 对象在单个 jvm 上运行,当内存中有溢出流的信号并且缺乏处理资源时,不能动态使用另一个 jvm

对于大数据的数据结构,通常还有哪些其他开发人员方法?

其他开发者如何处理它?

我想获得一些关于真实用例和经验的提示。

【问题讨论】:

    标签: java hadoop data-structures collections bigdata


    【解决方案1】:

    在处理大数据时,您必须改变方法。首先,您必须假设您的所有数据都无法放入单个机器的内存中,因此您需要将数据拆分到几台机器中,让它们计算您需要的内容,然后将所有这些重新组装在一起.因此,您可以使用 Collection,但只能用于整个工作的一部分。

    我可以建议你看看:

    • Hadoop:第一个处理大数据的框架
    • Spark:另一个大数据框架,通常比 Hadoop 更快
    • Akka:用于编写分布式应用程序的框架

    虽然 Hadoop 和 Spark 是大数据世界的事实标准,但 Akka 只是一个在很多环境中使用的框架,而不仅仅是用于大数据:这意味着您必须编写很多Hadoop 和 Spark 已经拥有的东西;为了完整起见,我将其放入列表中。

    您可以阅读WordCount 示例,它是大数据世界中的“HelloWorld”等价物,以了解MapReduce 编程范式如何适用于Hadoop,或者您可以查看@987654326 @ 用于获取与 Spark 的等效转换。

    【讨论】:

      【解决方案2】:

      这些是您查询的答案(这些查询是通过牢记 Hadoop 来解决的)

      他们是否在使用集合框架?

      没有。 Hadoop 使用 HDFS 文件系统。

      他们是否使用自己的自定义数据结构?

      您必须了解 HDFS - Hadoop 分布式文件系统。请参阅 Orielly - Hadoop: The Definitive Guide, 3rd Edition 中的这本书进行购买。如果您想在不购买这本书的情况下了解基础知识,请尝试此链接 - HDFC BasicsApache Hadoop。 HDFC 文件系统是可靠且容错的系统。

      他们是否使用多节点数据结构,每个节点运行在单独的 JVM 上?

      是的。参考Hadoop 2.0 YARN架构

      通常还有哪些其他开发人员用于大数据数据结构的方法?

      有很多。参考:Hadoop Alternatives

      其他开发人员如何处理它?

      通过框架提供了各自的技术。 Map Reduce Hadoop 框架

      我想获得一些关于真实用例和经验的提示

      大数据技术在 RDBMS 出现故障时非常有用 - 数据分析、数据仓库(用于报告和数据分析的系统)。一些用例 - 推荐引擎 (LinkedIn)、广告定位 (youtube)、处理大量数据 - 查找最热/最冷的一天 em> 超过 100 年的天气详细信息、股价分析市场趋势 > 等等

      参考Big Data Use Cases 的许多现实生活用例

      【讨论】:

        【解决方案3】:

        在大数据方面,可用的领先技术是 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)工作的;但它永远不会在某个时间点将所有值保留在内存中。更像是

        1. 获取键值对数据
        2. 做一些处理
        3. 通过上下文将数据发送到磁盘
        4. 对所有键值执行此操作,从而一次处理来自大数据源的一个逻辑单元。

        最后,一个 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 中,以便根据用户的行为进行欺诈检测。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-10-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-04-04
          • 2011-03-07
          相关资源
          最近更新 更多