ClickHouse作为Apache Spark的存储引擎

vsdwdz23  于 2023-06-24  发布在  Apache
关注(0)|答案(2)|浏览(230)

不深入细节,一个小背景:
我有什么:

  • 大约30TB的压缩数据分布在ClickHouse数据库中的多个服务器上,并每天更新。

我想要的:

  • 通过Spark处理数据,作为MapReduce范例中处理数据的最先进解决方案。

据我所知Spark is not a database and cannot store data。所以它需要一个存储引擎。将我们的数据保存在ClickHouse中,而无需迁移到Hive或其他提到的here存储,这将是完美的。我只在GitHub上找到了this小项目,在全球网络上没有更多关于使用ClickHouse的Apache Spark数据引擎。
所以我的问题是有人做过吗?或许这不是个好主意。那么为什么呢?在这种情况下,什么是一个好的选择呢?

wsxa1bj1

wsxa1bj11#

这绝对是个好主意!有一个新的spark-clickhouse-connector基于DataSource V2 API和ClickHouse gRPC协议,使您更有效地向ClickHouse写入/读取数据。特别是,它可以透明地将您对分布式表的访问转换为本地表。
Quick Start Demo with Spark SQL
Quick Start Demo with Spark Shell

rjee0c15

rjee0c152#

从spark的Angular 来看,通过使用jdbc连接器,连接到Clickhouse类似于我们如何连接其他数据库,如postgres,mysql等。
下面是一个基于python的示例代码。然而,同样的逻辑也适用于Java、Scala等,

df = spark_session.createDataFrame(
        [
            (1, "foo"),
            (2, "bar"),
            (3, "baz"),
        ],
        ["id", "value"]
    )

    df.write.format("jdbc")\
    .option("url", "jdbc:clickhouse://localhost:9000/default") \
    .option("driver", "com.github.housepower.jdbc.ClickHouseDriver") \
    .option("dbtable", "default.test_table")\
    .option("createTableOptions", "engine=MergeTree() order by id")\
    .option("user", "default") \
    .option("password", "")\
    .mode('overwrite').save()

在上面的例子中,我们使用了clickhouse-jdbc jar。这需要在SPARK_HOME/jars中。
this github repository中详细描述了clickhouse的Java库的其他变体

相关问题