tispark

110 views
Skip to first unread message

冉启强

unread,
Feb 26, 2018, 7:52:26 AM2/26/18
to TiDB user group



hello:

        我们启动spark start-thriftserver.sh  on yarn ,通过JDBC 连接,从而可以查询hive 里面的所有表信息。


        如果想同样通过tiSpark +jdbc 的方式操作,tidb 里面的表数据,有办法做到吗?

        1. 目前spark-shell on yarn 是连接成功了,jar 肯定已经引入了

        2. 但是thriftserver  的方式,jdbc 就找不到tidb 数据库了

        3.有什么办法能完成这一步吗?

yangz...@pingcap.com

unread,
Feb 26, 2018, 9:35:21 AM2/26/18
to TiDB user group
Thanks for using TiSpark. Could you please tell me what is your step to use "tiSpark + jdbc"? 

冉启强

unread,
Feb 27, 2018, 10:39:47 PM2/27/18
to TiDB user group








您好,我是否可以做到使用hive 一样远程连接tidb,以下是我远程连接hive 的方式:
Class.forName("org.apache.hive.jdbc.HiveDriver");
Connection connection = DriverManager.getConnection("jdbc:hive2://10.1.1.1:10000/dbName","userName","pwd");
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery(" select count(1) from  TableName ");


我启动thirft-server 的时候,已经把pd 的地址加入了。
如何通过类似的方式连接tispak?







在 2018年2月26日星期一 UTC+8下午8:52:26,冉启强写道:

huga...@pingcap.com

unread,
Feb 28, 2018, 3:54:10 AM2/28/18
to TiDB user group
您好,可以使用以下方式通过Hive JDBC,beeline等连接TiSpark Thrifserver(已加载TiDB表信息)
1. 下载TiSpark项目并编译出tispark-core-0.1.0-SNAPSHOT-jar-with-dependencies.jar,并将其放置在$SPARK_HOME/assembly/target/scala-2.11/jars下
2. 若您是第一次使用,请在tispark源码目录下git checkout到fix_typo分支,用mysql客户端以root用户令tidb执行https://github.com/pingcap/tispark/blob/fix_typo/core/scripts/DumpHiveMetastore.sql这一脚本(如mysql -h 127.0.0.1 -u root -P 4000 < DumpHiveMetastore.sql),该步骤是为了初始化metastore
3. 在spark/conf目录下配置hive-site.xml,指定metastore使用TiDB(如jdbc:mysql://127.0.0.1:4000/metastore),并配置好thrifserver连接TiDB所需要使用的用户名和密码
4. 在tispark源码目录下执行./core/scripts/start-tithriftserver.sh以启动Thriftserver
5. 若一切正常,此时用beeline或者您上面的代码去连接thriftserver将会看到TiDB中的数据库


冉启强

unread,
Mar 1, 2018, 2:20:19 AM3/1/18
to TiDB user group






您好:
    感谢您的回复,这边还有几个问题请教
1. tispark-core-0.1.0-SNAPSHOT-jar-with-dependencies.jar 我打好,放到${spark-home}/jars 下面了
2.sql 再tidb 库执行,有异常, 但是我看表是创建完成了的。而且 里面的hive 是1.2.0 版本,我们是1.1.0 CDH 的版本。是不是仅仅需要metastore 创建一个空的库就行,我们直接用CDH-5.8.3 的里面的脚本SQL?
3.start-tithriftserver.sh 我就用的原生的,会默认加载 tispark-core 吧,或者 --jars 的方式引用启动,是否可行。
因为用tispark 下的脚本启动会找不到 对应的 hive class 。应该是版本不对导致的
Unable to instantiate SparkSession with Hive support because Hive classes are not found.

需要解决问题:
     1.metastore 脚本,能否再提供一个,或者我们自己找
     2.打包编译对应的hive版本 是否是我们手动降低(spark-hive-..2.11 默认hive 就是1.2了)




在 2018年2月28日星期三 UTC+8下午4:54:10,huga...@pingcap.com写道:

冉启强

unread,
Mar 1, 2018, 3:04:38 AM3/1/18
to TiDB user group


在 2018年3月1日星期四 UTC+8下午3:20:19,冉启强写道:

好像spark2.02 以上版本,最低支持的就是hive 1.2 了- -,我这边的hive-site.xml 从客户端拷贝下来的,配置了脚本生成的tidb 数据库中的metastore ,但是还是连接的 hive 上的数据.
hive-site.xml 的配置,能提供一份demo 到工程吗?

冉启强

unread,
Mar 1, 2018, 5:04:20 AM3/1/18
to TiDB user group
我使用tidb 里面自带的spark,根据配置完成之后:
数据库只有默认的default

"配置好thrifserver连接TiDB所需要使用的用户名和密码" ------ 这个操作我用的是root 账户的了。

在 2018年3月1日星期四 UTC+8下午4:04:38,冉启强写道:

huga...@pingcap.com

unread,
Mar 1, 2018, 10:43:23 PM3/1/18
to TiDB user group
您好:

1. 若您希望在tithriftserver中看到TiDB中的表,需要用tispark的启动脚本来启动,原理是我们更改了启动逻辑,会在启动时映射TiDB数据库,如果用spark原生脚本启动的话不会有这个步骤,就怎么也看不到TiDB的数据库了。。
2. 若TiDB执行上面的DumpHiveMetastore.sql成功,metastore库中预期会有29张表,只创建空库不一定能work,如果没有这么多表可以确认下TiDB那边的异常是什么吗
3. Hive的版本,需要保证$SPARK_HOME/jars/下的和连接thriftserver的客户端一致。“Unable to instantiate SparkSession with Hive support because Hive classes are not found”在用spark原生启动脚本启动的时候不会出现?看上去是没找到hive相应的依赖?如果是版本问题可以考虑把spark/jars里和hive有关的替换一下
4. metastore脚本,目前只有上文的DumpHiveMetastore.sql,这个是通过从MySQL dump一个初始化好了的metastore生成的,因为TiDB目前不支持long varchar所以用这种方式dump出来以后插回TiDB,就能避免这个问题,并拥有一个初始化好了的metastore库。您想要的脚本是指这个吗?我不知道我的理解有没有问题..
5. hive-site.xml 我在本地开发是用这个启动的,自己创建了一个hive用户,木有遇到问题,下面的metastore是4里搞出来的,供参考
<?xml version="1.0" encoding="utf-8"?>

<configuration> 
  <property> 
    <name>javax.jdo.option.ConnectionURL</name>  
    <value>jdbc:mysql://127.0.0.1:4000/metastore?createDatabaseIfNotExist=true</value>  
    <description>metadata is stored in a MySQL server</description> 
  </property>  
  <property> 
    <name>javax.jdo.option.ConnectionDriverName</name>  
    <value>com.mysql.jdbc.Driver</value>  
    <description>MySQL JDBC driver class</description> 
  </property>  
  <property> 
    <name>javax.jdo.option.ConnectionUserName</name>  
    <value>hive</value>  
    <description>user name for connecting to mysql server</description> 
  </property>  
  <property> 
    <name>javax.jdo.option.ConnectionPassword</name>  
    <value>hive</value>  
    <description>password for connecting to mysql server</description> 
  </property> 
</configuration>

5. 这里交流似乎不太方便,如果需要的话可以加我微信(Novemser)聊哈


抱歉回复得有点晚


在 2018年3月1日星期四 UTC+8下午3:20:19,冉启强写道:
Reply all
Reply to author
Forward
0 new messages