【问题标题】:Spark integration in existing application using cassandra使用 cassandra 在现有应用程序中集成 Spark
【发布时间】:2015-12-13 00:39:11
【问题描述】:

我们有一个应用程序服务器和 3 个节点 Cassandra 集群的工作应用程序。最近我们有了将大型 CSV 文件导入现有数据库的新要求。 CSV 中的行需要在保存到 Cassandra 之前进行转换。我们的基础设施部署在 Amazon AWS 中。

有几个问题:

  1. 在我们看来,Spark 是适合这项工作的工具,因为它有 Spark Cassandra ConnectorSpark CSV plugin。我们是对的吗?
  2. 也许是一个新手 Spark 问题,但在我们的部署场景中,应该在哪里部署导入程序应用程序?我们的想法是在其中一个数据库节点上拥有 Spark Master,Spark 工作人员分布在 3 个数据库节点上,而 importer 应用程序则在 master 所在的同一节点上。最好有一些命令行界面来导入 CSV,以后可以演变为 API/Web 界面。
  3. 我们可以将导入器应用程序放在应用程序服务器上吗?网络损失会是多少?
  4. 在这种情况下,我们能否将 Spark 用于 Cassandra JOINS?如果需要,我们如何集成到已经使用常规 Datastax Java 驱动程序以及应用程序连接的现有应用程序中

【问题讨论】:

    标签: csv cassandra apache-spark datastax


    【解决方案1】:

    首先,请记住,Spark Cassandra 连接器仅对数据本地化有用如果您从 Cassandra 加载数据,而不是从外部源加载数据。因此,要加载 CSV 文件,您必须使用共享存储或 HDFS 等将其传输到 Spark 工作人员。这意味着无论您放置导入器应用程序,它都会将数据流式传输到您的 Spark 工作人员。

    现在谈谈你的观点:

    1. 您对 Spark 的看法是正确的,但对 Spark Cassandra 连接器的看法是错误的,因为它仅在您从 Cassandra 加载数据时才有用(当您需要在外部数据之间执行联接时,可能是 #4 的情况和 Cassandra 数据),否则不会给您任何重大帮助。

    2. 您的 importer 应用程序将部署到您的集群。在您描述的场景中,这是一个独立的 Spark 集群。因此,您需要打包您的应用程序,然后在您的主节点上使用 spark-submit 命令来部署您的应用程序。使用 CSV 文件位置的命令行参数,您可以将应用程序作为普通命令行工具部署和运行。

    3. 如 #2 中所述,您的 importer 应用程序将从您的主节点部署到您的所有工作人员。这里重要的是您的 CSV 文件在哪里。部署它的一种简单方法是在工作节点之间拆分文件(使用相同的本地文件路径),并将其作为本地文件加载。但请注意,如果节点死亡,您将丢失本地 CSV 部分。要获得更可靠的分发,您可以将 CSV 文件放在 HDFS 集群上,然后从那里读取。

    4. 使用 Spark Cassandra 连接器,您可以将 Cassandra 中的数据加载到相应本地节点上的 RDD 中,然后使用通过加载 CSV 数据创建的 RDD,您可以执行联接,当然也可以将结果写回卡桑德拉,如果你需要的话。您可以使用 Spark Cassandra 连接器作为更高级别的工具来执行读取和写入,您不需要直接使用 Java 驱动程序(因为无论如何连接器都是建立在它之上的)。

      李>

    【讨论】:

    • 感谢您的回答,也许我不清楚,我需要将数据从 CSV 加载到 Cassandra,所以对于 1 号。我们还需要连接器,以便在处理后将数据从 CSV 保存到现有的 cassandra 表中。数字 4 完全独立于 CSV 导入,我们目前在应用程序级别加入和排序表,所以我想知道这也会引发帮助
    • 对于#4,很容易使用连接器将数据加载到 RDD 中,然后在 RDD 上使用 Spark Joins spark.apache.org/docs/1.4.1/programming-guide.html#JoinLink ... 对于 #1,我的意思是您可以使用 Java 驱动程序用一个简单的包装器来处理到 Cassandra 的本地连接,但当然连接器会支持开箱即用,这就是为什么我说它并不是真正的重要帮助。
    • 只有一件事我不清楚#4。我现有的应用程序正在从其他服务器上的 Cassandra 读取数据并通过 rest API 公开。 Spark Cassandra 连接器和连接作业必须部署到 Spark 集群,或者我们可以远程使用 JOINS(例如通过在现有应用程序中创建 SparkContext 的某种 RPC)?
    • Spark Cassandra 连接器只会直接从 Cassandra 加载数据。如果 Cassandra 节点没有运行 Spark 工作程序,那么您将不会从数据本地化中受益(因为您最终将通过网络将数据流式传输到 Spark 工作程序)。如果您通过 API 加载数据,那么您将无法使用连接器进行读取。
    • 也许我不清楚,假设 3 个数据库节点可以有工作人员,第 4 台机器上的应用程序服务器使用 java 驱动程序和会话加载数据,在应用程序级别处理它并通过 Rest API 将其公开给外面的世界。我正在寻找一个选项来删除应用程序处理并将其移动到 Spark 集群并委托给 Spark 工作人员。可以从第 4 台机器上的应用程序服务器完成吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-14
    • 2013-04-23
    • 1970-01-01
    相关资源
    最近更新 更多