【TiDB 使用环境】:测试
【TiDB 版本】
tidb版本:5.4
tisaprk:2.5
spark:3.0.1
【出现的问题】 使用tispark读取表A数据然后写入表B数据,在windows执行完全没有问题,但是在服务器运行任务在K8s中,则出现错误
代码:参考官网:
// write data to tidb
df.write.
format("tidb").
option("tidb.addr", "127.0.0.1").
option("tidb.port", "4000").
option("tidb.user", "root").
option("tidb.password", "").
option("database", "tpch").
option("table", "target_orders").
mode("append").
save()
1 个赞
数据小黑
(数据小黑)
3
顶楼上,k8s里面怎么启动的?启动镜像或者打包镜像时,tispark的jar包放进去了没?
我jar包里面有 依赖,通过httpd下载执行得jar包,windows执行,和k8s使用tispark读数据都时没问题的
com.pingcap.tispark
tispark-assembly
2.5.0
com.pingcap.tispark
tispark-assembly
2.5.0
除了这个还需要别的嘛,最骚得是我windows上执行时没问题得
数据小黑
(数据小黑)
6
jar包多大?另外你的spark版本是3.X还是2.X?我遇到过这个,是在spark2.X环境上测试,然后提交到了spark3.0.x集群里面,入口定义参数不一致,导致这个问题,例如:
2.x的定义:
SparkConf conf = new SparkConf()
.set("spark.sql.extensions", "org.apache.spark.sql.TiExtensions")
.set("spark.tispark.pd.addresses", pd_addr);
3.0.X的定义:
SparkConf conf = new SparkConf()
.set("spark.sql.extensions", "org.apache.spark.sql.TiExtensions")
.set("spark.sql.catalog.tidb_catalog", "org.apache.spark.sql.catalyst.catalog.TiCatalog")
.set("spark.sql.catalog.tidb_catalog.pd.addresses", pd_addr)
.set("spark.tispark.pd.addresses", pd_addr);
我看到这个.set(“spark.sql.catalog.tidb_catalog”, “org.apache.spark.sql.catalyst.catalog.TiCatalog”)
.set(“spark.sql.catalog.tidb_catalog.pd.addresses”, pd_addr)。不知道这个是干啥的,本地加上就错了,k8s里面没加,spark3.0.1,上面版本说明我写了
数据小黑
(数据小黑)
9
3.0.X版本必须要有
SparkConf conf = new SparkConf()
.set("spark.sql.extensions", "org.apache.spark.sql.TiExtensions")
.set("spark.sql.catalog.tidb_catalog", "org.apache.spark.sql.catalyst.catalog.TiCatalog")
.set("spark.sql.catalog.tidb_catalog.pd.addresses", pd_addr)
.set("spark.tispark.pd.addresses", pd_addr);
缺一不可,都加上看看。
ok,我在提交命令里加一下,但是为啥windows本地 master为local能执行成功,然后加了这个就出错呢
数据小黑
(数据小黑)
11
怀疑你本地的spark的jar包有问题,可能原因很多,不好判断。
我刚刚加上之后,然后查询不到我的库表了,不加就能查询,因为我是先读取tidb A表数据然后写入B表,现在A表查不到啦就很神奇
数据小黑
(数据小黑)
13
完整的看一下吧,不知道你那还有没有没改的地方。
数据小黑
(数据小黑)
16
spark 3.0.x 增加了一层catalog,例如需要获取数据,需要这么写:
String source_db_name = "tidb_catalog.sbtest";
String source_table_name = "sbtest_o";
spark.sql("use "+source_db_name);
String source_sql = "select * from "+source_table_name;
兄弟,我最开始的问题不是这个,是这个 format(“tidb”). tidb源有问题
df.write.
format(“tidb”).
option(“tidb.addr”, “127.0.0.1”).
option(“tidb.port”, “4000”).
option(“tidb.user”, “root”).
option(“tidb.password”, “”).
option(“database”, “tpch”).
option(“table”, “target_orders”).
mode(“append”).
save()
数据小黑
(数据小黑)
18
我始终怀疑哪个地方沟通的不到位,方不方便提供完整的测试用例和建表语句?我在我的环境里面调通了,然后放到你的环境里面跑,对比排查问题。
system
(system)
关闭
19
此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。