【问题标题】:Spark Sql JDBC SupportSpark Sql JDBC 支持
【发布时间】:2019-08-21 14:01:47
【问题描述】:

目前我们正在构建一个报告平台,作为我们使用 Shark 的数据存储。由于 Shark 的开发已经停止,所以我们正处于评估 Spark SQL 的阶段。根据我们的用例,我们有几个问题。

1) 我们有来自各种来源(MySQL、Oracle、Cassandra、Mongo)的数据。我们想知道如何将这些数据导入 Spark SQL?是否存在任何我们可以使用的实用程序?此实用程序是否支持连续刷新数据(将数据存储上的新添加/更新/删除同步到 Spark SQL?

2) 是在 Spark SQL 中创建多个数据库的方法吗?

3) 对于我们使用 Jasper 的报告 UI,我们希望从 Jasper 连接到 Spark SQL。当我们进行初始搜索时,我们了解到目前不支持消费者通过 JDBC 连接 Spark SQL,但在未来的版本中,您希望添加相同的内容。我们想知道 Spark SQL 什么时候会有一个支持 JDBC 的稳定版本?同时,我们从https://github.com/amplab/shark/tree/sparkSql 获取源代码,但我们在本地设置和评估它时遇到了一些困难。如果您能帮助我们提供设置说明,那就太好了。(我可以分享我们面临的问题,请告诉我在哪里可以发布错误日志)

4) 我们还需要一个可以执行查询的 SQL 提示符,目前 Spark Shell 提供了可以执行 SCALA 代码的 SCALA 提示符,我们可以从 SCALA 代码触发 SQL 查询。像 Shark 一样,我们希望在 Spark SQL 中有 SQL 提示符。当我们进行搜索时,我们发现在 Spark 的未来版本中会添加这个。如果您能告诉我们 Spark 的哪个版本可以解决同样的问题,那就太好了。

【问题讨论】:

  • 嗨,我正在尝试将数据从 Apache spark 存储到 mysql。你有没有解决你的问题?如果是的话,你能分享一下你是如何建立spark和mysql之间的通信的吗?这对我会有很大的帮助。谢谢

标签: apache-spark


【解决方案1】:

至于

3) Spark 1.1 为 SparkSQL ThriftServer 接口提供了更好的支持,您可能希望将其用于 JDBC 接口。支持 v. 0.12.0 的 Hive JDBC 客户端能够与此类服务器连接和交互。

4) Spark 1.1 还提供了可用于输入查询的 SparkSQL CLI 界面。采用与 Hive CLI 或 Impala Shell 相同的方式。

请提供更多详细信息,说明您要为 1 和 2 实现的目标。

【讨论】:

    【解决方案2】:

    我可以回答(1):

    Apache Sqoop 是专门为解决关系数据库的这个问题而设计的。该工具是为 HDFS、HBase 和 Hive 设计的——因此,它可用于通过 HDFS 和 Hive 元存储向 Spark 提供数据。

    http://sqoop.apache.org/

    我相信 Cassandra 可以通过 DataStax 的这个连接器用于 SparkContext:https://github.com/datastax/spark-cassandra-connector——我从未使用过。

    我不知道 MongoDB 有任何连接器。

    【讨论】:

      【解决方案3】:

      1) 我们有各种来源的数据(MySQL、Oracle、Cassandra、Mongo)

      您必须为每种情况使用不同的驱动程序。对于 cassandra,有 datastax driver(但我遇到了 SparkSQL 的一些兼容性问题)。对于任何 SQL 系统,您都可以使用 JdbcRDD。用法很简单,看the scala example

      test("basic functionality") {
          sc = new SparkContext("local", "test")
          val rdd = new JdbcRDD(
            sc,
            () => { DriverManager.getConnection("jdbc:derby:target/JdbcRDDSuiteDb") },
            "SELECT DATA FROM FOO WHERE ? <= ID AND ID <= ?",
            1, 100, 3,
            (r: ResultSet) => { r.getInt(1) } ).cache()
      
          assert(rdd.count === 100)
          assert(rdd.reduce(_+_) === 10100)
        }
      

      但它只是一个 RDD,所以你应该通过 map-reduce api 来处理这些数据,而不是在 SQLContext 中。

      是否有任何我们可以使用的实用程序?

      有 Apache Sqoop 项目,但它处于积极开发状态。当前的稳定版本甚至不以 parquet 格式保存文件。

      【讨论】:

        【解决方案4】:

        Spark SQL 是 Spark 框架的一项功能。它不应该与 Shark 相比,因为 Shark 是一种服务。 (回想一下,使用 Shark,您可以运行 ThriftServer,然后您可以从 Thrift 应用程序甚至 ODBC 连接到该服务器。)

        您能否详细说明“将这些数据导入 Spark SQL”是什么意思?

        【讨论】:

          【解决方案5】:

          有几个 Spark - MongoDB 连接器: - hadoop 的 mongodb 连接器(实际上根本不需要 Hadoop!)https://databricks.com/blog/2015/03/20/using-mongodb-with-spark.html

          【讨论】:

            【解决方案6】:

            如果您的数据量很大并且需要执行大量转换,那么 Spark SQL 可以用于 ETL 目的,否则 presto 可以解决您的所有问题。一一解答您的疑问:

            1. 由于您的数据位于 MySQL、Oracle、Cassandra、Mongo 中,所有这些都可以集成到 Presto 中,因为它具有适用于所有这些数据库的连接器 https://prestodb.github.io/docs/current/connector.html

            2. 在集群模式下安装 Presto 后,您可以在一个平台上同时查询所有这些数据库,该平台还提供连接 Cassandra 中的表和 Mongo 中的其他表,这种灵活性是无与伦比的。

              李>
            3. Presto 可用于连接 Apache Superset https://superset.incubator.apache.org/,它是开源的并提供所有集合仪表板。 Presto 也可以连接到 Tableau。

            4. 您可以安装带有 presto 连接详细信息的 MySQL 工作台,这有助于在一个位置为您的所有数据库提供 UI。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2010-12-16
              • 2011-06-15
              相关资源
              最近更新 更多