Apache spark Spark是否适合分析(不重新分发)来自多台机器的日志?

Apache spark Spark是否适合分析(不重新分发)来自多台机器的日志?,apache-spark,aggregate,analytics,bigdata,Apache Spark,Aggregate,Analytics,Bigdata,我有许多分布在许多机器上的日志,我想收集/汇总一些关于它们的信息。也许首先我想计算包含字符串“Message”的行数,然后我将在所有行的第五列中加起来 理想情况下,我希望让每台机器在自己的日志集上执行我告诉它的任何操作,然后将结果返回到某个集中的地方进行聚合。我(颤抖地)推测这类似于MapReduce范例的Reduce操作 我的问题似乎是地图。我的直觉告诉我Hadoop并不适合,因为为了分配工作,每个工作节点都需要所有底层数据的通用视图——由HDFS实现的功能。我不想聚集所有现有的数据,这样我就

我有许多分布在许多机器上的日志,我想收集/汇总一些关于它们的信息。也许首先我想计算包含字符串“Message”的行数,然后我将在所有行的第五列中加起来

理想情况下,我希望让每台机器在自己的日志集上执行我告诉它的任何操作,然后将结果返回到某个集中的地方进行聚合。我(颤抖地)推测这类似于MapReduce范例的Reduce操作

我的问题似乎是地图。我的直觉告诉我Hadoop并不适合,因为为了分配工作,每个工作节点都需要所有底层数据的通用视图——由HDFS实现的功能。我不想聚集所有现有的数据,这样我就可以在其中分布操作;我希望每台特定的机器分析它(并且只有它)拥有的数据

我不知道Apache Spark是否允许我这样做。我从《快速入门指南》中得到的印象是,我可以让一个主节点推出一个已编译的任意JAR,每个工作人员都会运行它,在这种情况下,只运行该JAR中由逻辑标识的数据,然后将结果返回主节点,让我随心所欲地处理。但他们的常见问题让我犹豫不决:

我需要Hadoop来运行Spark吗

不需要,但如果在集群上运行,则需要某种形式的共享文件系统(例如,在每个节点的相同路径上安装NFS)。如果您有这种类型的文件系统,您可以在独立模式下部署Spark

所以我的问题是:ApacheSpark是否适合让一组现有的机器分析它们已经拥有的数据并聚合结果

如果是,请您在高层重申Spark将如何处理和聚合预先分发的独立数据集


如果没有,是否有类似的框架允许分析现有的分布式数据集?

简短回答:

您仅使用工人在本地机器上工作。这没什么错。而不是使用

sc.textFile()
要从hdfs读取数据,您需要

java.io.File 
调用-本地读取

现在您还需要另外一个步骤:创建自定义RDD。为什么?您需要重写getPreferredLocations()来为拆分设置正确的机器名

override def getPreferredLocations(split: Partition): Seq[String] =
那么您的拆分需要包括:

  • 计算机名称(由getPreferredLocations()方法使用
  • 该机器的文件列表。注意:该列表可能通过rdbms调用获得,以避免在文本文件中进行硬编码

因此,最终您拥有了一个分布式处理系统—您可以对从本地机器读取的数据使用RDD中提供的所有强大转换—但现在您可以在整个集群上对该数据进行分发/操作(即使数据最初是从单个机器读取的)

虽然有效,但这意味着每次在任何节点中添加/删除文件时都必须更新首选位置(如果您希望在计算中也考虑这些位置),是吗?@kaktusito是的。一个潜在的改进是自定义RDD从rdbms表中读取文件-这将更易于维护。确实。只是想知道是否有一些盲目的解决方案,即只发送要执行的任务,而不知道在本地文件系统中会找到哪些文件。尽管看起来像你可以用Akka remote或类似的东西轻松地完成这项工作。不管怎样,+1:)我也在寻找一个盲解决方案,但我有可能找到某种可以容忍的包装器脚本或其他东西。至少看起来值得我努力追求。