beeline 连接 tispark thriftserver Set spark.tispark.write.allow_spark_sql=enable 之后还是不能写入数据到tidb

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。

  • 【TiDB 版本】:3.0
  • 【问题描述】:beeline连接Tispark thriftserver时执行: insert into CUSTOMER_2 select * from CUSTOMER;
    报Error: com.pingcap.tikv.exception.TiBatchWriteException: SparkSQL entry for tispark write is disabled. Set spark.tispark.write.allow_spark_sql to enable. (state=,code=0)

Set spark.tispark.write.allow_spark_sql=enable;
±-------------------------------------±--------±-+
| key | value |
±-------------------------------------±--------±-+
| spark.tispark.write.allow_spark_sql | enable |
±-------------------------------------±--------±-+

可是设置后还是不能写入数据

请确认一下 spark.tispark.write.allow_spark_sql 是否生效,spark.tispark.write.allow_spark_sql 是一个 bool 变量

怎么确认呢,请明示 0: jdbc:hive2://localhost:10000> Set spark.tispark.write.allow_spark_sql;

±-------------------------------------±-------±-+ | key | value | ±-------------------------------------±-------±-+ | spark.tispark.write.allow_spark_sql | true | ±-------------------------------------±-------±-+ 1 row selected (0.039 seconds)

0: jdbc:hive2://localhost:10000> insert into CUSTOMER_2 select * from CUSTOMER;

Error: com.pingcap.tikv.exception.TiBatchWriteException: SparkSQL entry for tispark write is disabled. Set spark.tispark.write.allow_spark_sql to enable. (state=,code=0)

请将参数spark.tispark.write.allow_spark_sql配置到 $SPARK_HOME/conf/spark-defaults.conf中

image

另外使用文档请参考 https://github.com/pingcap/tispark/blob/master/docs/datasource_api_userguide.md#use-data-source-api-in-sparksql

1 个赞

提醒一下,batch write功能目前不推荐在生产环境使用,需要等到tidb-4.0

tidb4.0什么时候出呢?

0: jdbc:hive2://localhost:10000> insert into NATION_2 select N_NATIONKEY,N_NAME,N_REGIONKEY,N_COMMENT from NATION; Error: java.util.NoSuchElementException: None.get (state=,code=0)

插入数据时报这个错,怎么解决

tidb-4.0预计今年年中

请问有没有执行第三步,在spark中创建一个对应的table?

1 个赞

这是哪个文档,发个链接给我好吗

请参考 https://github.com/pingcap/tispark/blob/master/docs/datasource_api_userguide.md#use-data-source-api-in-sparksql

jdbc:hive2://localhost:10000> INSERT INTO CUSTOMER_DST VALUES(1000, ‘Customer#000001000’, ‘AnJ5lxtLjioClr2khl9pb8NLxG2’, 9, ‘19-407-425-2584’, 2209.81, ‘AUTOMOBILE’, ‘. even, express theodolites upo’); Error: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. (state=,code=0)

beeline操作thriftserver报这个错,是怎么回事呢,我使用docker-compose刚刚构建的环境,理论上是tidb4.0

这与连接 MySQL 报错是一样的,可以参考 MySQL 的排查思路进行排查

https://stackoverflow.com/questions/2983248/com-mysql-jdbc-exceptions-jdbc4-communicationsexception-communications-link-fai

可是我不执行insert语句直接执行select语句是可以查询到表数据的,说明链接mysql没问题,请明示

  1. 可以看下 tidb.log 中有没有一些对应的信息
  2. grep -i welcome 看下 tidb.log pd.log tikv.log ,看下几个组件有没有重启的情况

tidb.log pd.log tikv.log 存在哪个目录,你给下我完整的命令

用mysql客户端可以正常执行 INSERT INTO CUSTOMER VALUES(1000, ‘Customer#000001000’, ‘AnJ5lxtLjioClr2khl9pb8NLxG2’, 9, ‘19-407-425-2584’, 2209.81, ‘AUTOMOBILE’, ‘. even, express theodolites upo’);

所以集群没有挂


看这边的信息,似乎是用 hive 的 jdbc driver 去连 TiDB 的?

是啊,根据官网tispark的指南,用spark里的beeline去连接,我完全按照官网指引做的,有问题吗,正确要怎么做

麻烦发下相关的版本和配置信息

// 获取spark版本 org.apache.spark.SPARK_VERSION

// 获取SparkConfig sc.getConf.getAll.foreach(println)

// 获取TiSpark版本 spark.sql(“select ti_version()”).show(false)