spark 通过 jdbc 写入 clickhouse 需要注意的点
最近在用 spark 通过 jdbc 写入 clickhouse 的时候,遇到一些坑,这里分享下,造福人民群众。
一个 WARN
WARN JdbcUtils: Requested isolation level 1, but transactions are unsupported
这是因为 clickhouse 不支持事务造成的,解决方案,jdbc 加入 isolationLevel 等于 NONE 的选项,isolationLevel 详解
The transaction isolation level, which applies to current connection. It can be one of NONE, READ_COMMITTED, READ_UNCOMMITTED, REPEATABLE_READ, or SERIALIZABLE, corresponding to standard transaction isolation levels defined by JDBC's Connection object, with default of READ_UNCOMMITTED. This option applies only to writing. Please refer the documentation in java.sql.Connection.
一个报错
merges are processing significantly slower than inserts
这是因为 spark 多个 partition 同时并发写引发的错误,解决方案 jdbc 加入 numPartitions 等于 1 的选项控制并发数,numPartitions 详解
The maximum number of partitions that can be used for parallelism in table reading and writing. This also determines the maximum number of concurrent JDBC connections. If the number of partitions to write exceeds this limit, we decrease it to this limit by calling coalesce(numPartitions) before writing.
完整 scala 代码
spark.createDataFrame(data) .write .mode(SaveMode.Append) .option("batchsize", "50000") .option("isolationLevel", "NONE") // 设置事务 .option("numPartitions", "1") // 设置并发 .jdbc(dbUrl, "table", dbProp)
更多 spark jdbc 选项,参考 spark 官方文档 更多架构、PHP、GO相关踩坑实践技巧请关注我的公众号
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Python之父发文吐槽现有解析器,考虑将它替换掉
花下猫语: Guido van Rossum 是 Python 的创造者,虽然他现在放弃了“终身仁慈独裁者”的职位,但却成为了指导委员会的五位成员之一,其一举一动依然备受瞩目。近日,他开通了 Medium 账号,并发表了第一篇文章,透露出要替换 Python 的核心部件(解析器)的想法。这篇文章分析了当前的 pgen 解析器的诸多缺陷,并介绍了 PEG 解析器的优点,令人振奋。这项改造工作仍在进行中,Guido 说他还会写更多相关的文章,我们就拭目以待吧。 本文原创并首发于公众号【Python猫】,未经授权,请勿转载。 原文地址: https://mp.weixin.qq.com/s/yqVVaZVn8RRanllaXMFD9A 原题 | PEG Parsers 作者 | Guido van Rossum(Python之父) 译者 | 豌豆花下猫(“Python猫”公众号作者) 原文 | https://medium.com/@gvanrossum_83706/peg-parsers-7ed72462f97c 声明 | 翻译是出于交流学习的目的,欢迎转载,但请保留本文出处,请勿用于商业...
- 下一篇
Apache Sentry实战之旅(二)—— Sentry客户端使用
Apache Sentry虽然可以将HDFS、Hive与Impala三个组件的权限认证统一,但是只能按照给组授予角色的方式来进行授权,不能直接授权给组中的用户,显得不太灵活。有时候为了兼容已有大数据平台的授权体系,比如只使用Sentry控制Impala服务的权限,而不控制Hive和HDFS服务的权限,希望通过调用Sentry客户端API的方式将已有的Hive和HDFS服务的权限信息导入到Sentry中,就需要通过调用Sentry API来达到这个目的。Sentry支持通过调用服务方式整合公司特定的数据权限需求,提供了外调接口来动态获得和更改权限信息,使我们可以同步其它大数据平台的组织架构,复用已有的权限模型,实现权限信息的统一。 环境 Impala版本:2.12.0-cdh5.16.1 Sentry版本:1.5.1-cdh5.16.1 JDK版本:jdk1.8.0_212 整合步骤 首先得确认Sentry服务端安装好并已启动,以下是整合步骤及测试用例。整个工程目录如下: 1、加入maven依赖: <dependency> <groupId>org.apache....
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS8编译安装MySQL8.0.19
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS8安装Docker,最新的服务器搭配容器使用
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Docker使用Oracle官方镜像安装(12C,18C,19C)