ClickHouse-Spark集成

Spark集成ClickHouse

ClickHouse的JDBC驱动

目前通过JDBC写ClickHouse一共有三种驱动,除了官方的,还有两种第三方驱动。分别如下:

  1. 官方的JDBC Driver:8123端口

    基于HTTP实现,整体性能不太出色,大量数据写入时有可能出现超时的现象

  2. housepower的ClickHouse-Native-JDBC:9000端口

    基于TCP协议实现,支持高性能写入,数据按列组织并有压缩

  3. Clickhouse4j

    基于HTTP,但是相比官方进行了大量优化,更加轻量级和快速

因为支持高性能的写入和压缩,因此本次实践使用第二种驱动

依赖如下:

<dependency>
    <groupId>com.github.housepower</groupId>
    <artifactId>clickhouse-native-jdbc</artifactId>
    <version>2.6.0</version>
</dependency>

已有数据如下:

SELECT *
FROM user

┌─userId─┬─appId─┬─version─┬────regTime─┐
│   1234 │ TT    │ 2.42020-07-24 │
│  12345 │ RR    │ 2.52020-07-29 │
│ 123456 │ TT    │ 2.12020-07-09 │
│ 234561 │ GG    │ 3.02020-07-31 │
└────────┴───────┴─────────┴────────────┘
┌─userId─┬─appId─┬─version─┬────regTime─┐
│    123 │ test  │ 1.1.1.12021-12-10 │
│    123 │ test  │ 1.1.1.12021-12-10 │
└────────┴───────┴─────────┴────────────┘
┌─userId─┬─appId─┬─version─┬────regTime─┐
│ 123457 │ RR    │ 3.62020-01-07 │
└────────┴───────┴─────────┴────────────┘
┌─userId─┬─appId─┬─version─┬────regTime─┐
│  43234 │ HH    │ 2.52020-06-06 │
└────────┴───────┴─────────┴────────────┘

代码如下:

import org.apache.spark.sql.{SaveMode, SparkSession}
import org.apache.spark.{SparkConf}

object SparkCoreAndClickHouse {

    def main(args: Array[String]): Unit = {

        val sparkConf: SparkConf = new SparkConf().setMaster("local[*]").setAppName("ClickHouse")
        val spark: SparkSession = SparkSession.builder().config(sparkConf).getOrCreate()

        val url = "jdbc:clickhouse://10.10.10.113:9000"
        val drivce = "com.github.housepower.jdbc.ClickHouseDriver"

        // 官方的jar包使用8123作为端口
        val df = spark.read
            .format("jdbc")
            .option("driver", drivce)
            .option("url", url)
            .option("user", "default")
            .option("password", "")
            .option("dbtable", "default.user")
            .load

        df.show()

        val pro = new java.util.Properties
        pro.put("driver", drivce)

        df.write
            .mode(SaveMode.Append)
            .option("batchsize", "20000")
            .option("isolationLevel", "NONE")
            .option("numPartitions", "1")
            .jdbc(url, "default.user", pro)

        // 关闭环境
        spark.close()
    }
}

代码是从user表中查出数据,然后打印到控制台,最后将查出的数据再次插入到user表中。

执行完成只有,查询user表结果如下:

SELECT *
FROM user

┌─userId─┬─appId─┬─version─┬────regTime─┐
│   1234 │ TT    │ 2.42020-07-24 │
│  12345 │ RR    │ 2.52020-07-29 │
│ 123456 │ TT    │ 2.12020-07-09 │
│ 234561 │ GG    │ 3.02020-07-31 │
└────────┴───────┴─────────┴────────────┘
┌─userId─┬─appId─┬─version─┬────regTime─┐
│ 123457 │ RR    │ 3.62020-01-07 │
└────────┴───────┴─────────┴────────────┘
┌─userId─┬─appId─┬─version─┬────regTime─┐
│   1234 │ TT    │ 2.42020-07-24 │
│  12345 │ RR    │ 2.52020-07-29 │
│ 123456 │ TT    │ 2.12020-07-09 │
│ 234561 │ GG    │ 3.02020-07-31 │
└────────┴───────┴─────────┴────────────┘
┌─userId─┬─appId─┬─version─┬────regTime─┐
│ 123457 │ RR    │ 3.62020-01-07 │
└────────┴───────┴─────────┴────────────┘
┌─userId─┬─appId─┬─version─┬────regTime─┐
│    123 │ test  │ 1.1.1.12021-12-10 │
│    123 │ test  │ 1.1.1.12021-12-10 │
└────────┴───────┴─────────┴────────────┘
┌─userId─┬─appId─┬─version─┬────regTime─┐
│  43234 │ HH    │ 2.52020-06-06 │
└────────┴───────┴─────────┴────────────┘
┌─userId─┬─appId─┬─version─┬────regTime─┐
│    123 │ test  │ 1.1.1.12021-12-10 │
│    123 │ test  │ 1.1.1.12021-12-10 │
└────────┴───────┴─────────┴────────────┘
┌─userId─┬─appId─┬─version─┬────regTime─┐
│  43234 │ HH    │ 2.52020-06-06 │
└────────┴───────┴─────────┴────────────┘
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
数据分析职业是一个多金的职业,数据分析职位是一个金饭碗的职位,前景美好,但是要全面掌握大数据分析技术,非常困难,大部分学员的痛点是不能快速找到入门要点,精准快速上手。本课程采用项目驱动的方式,以Spark3和Clickhouse技术为突破口,带领学员快速入门Spark3+Clickhouse数据分析,促使学员成为一名高效且优秀的大数据分析人才。学员通过本课程的学习,不仅可以掌握使用Python3进行Spark3数据分析,还会掌握利用Scala/java进行Spark数据分析,多语言并进,力求全面掌握;另外通过项目驱动,掌握Spark框架的精髓,教导Spark源码查看的技巧;会学到Spark性能优化的核心要点,成为企业急缺的数据分析人才;更会通过ClickhouseSpark搭建OLAP引擎,使学员对大数据生态圈有一个更加全面的认识和能力的综合提升。真实的数据分析项目,学完即可拿来作为自己的项目经验,增加面试谈薪筹码。课程涉及内容:Ø  Spark内核原理(RDD、DataFrame、Dataset、Structed Stream、SparkML、SparkSQL)Ø  Spark离线数据分析(千万简历数据分析、雪花模型离线数仓构建)Ø  Spark特征处理及模型预测Ø  Spark实时数据分析(Structed Stream)原理及实战Ø  Spark+Hive构建离线数据仓库(数仓概念ODS/DWD/DWS/ADS)Ø  Clickhouse核心原理及实战Ø  Clickhouse engine详解Ø  SparkClickhouse导入简历数据,进行数据聚合分析Ø  catboost训练房价预测机器学习模型Ø  基于Clickhouse构建机器学习模型利用SQL进行房价预测Ø  Clickhouse集群监控,Nginx反向代理Grafana+Prometheus+Clickhouse+node_exporterØ  Spark性能优化Ø  Spark工程师面试宝典       课程组件:集群监控:福利:本课程凡是消费满359的学员,一律送出价值109元的实体书籍.

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值