spark SQL Running the Thrift JDBC/ODBC server

本文介绍了如何在Spark环境中利用ThriftJDBC/ODBC服务器连接Hive,并通过beeline进行测试。展示了从配置到查询Hive表的全过程,包括端口设置、服务器地址、Spark master、驱动类路径等关键参数,以及如何使用beeline进行连接和执行SQL查询。此外,还提供了使用Java JDBC进行连接和查询的具体示例。

Running the Thrift JDBC/ODBC server

1:运行

./sbin/start-thriftserver.sh  --hiveconf hive.server2.thrift.port=10000  --hiveconf hive.server2.thrift.bind.host=feng02 --master spark://feng02:7077 --driver-class-path /home/jifeng/hadoop/spark-1.2.0-bin-2.4.1/lib/mysql-connector-java-5.1.32-bin.jar --executor-memory 1g

端口:10000

服务器:feng02

spark master:spark://feng02:7077

driver-class-path:mysql驱动包(hive配置的)


[jifeng@feng02 spark-1.2.0-bin-2.4.1]$ ./sbin/start-thriftserver.sh  --hiveconf hive.server2.thrift.port=10000  --hiveconf hive.server2.thrift.bind.host=feng02 --master spark://feng02:7077 --driver-class-path /home/jifeng/hadoop/spark-1.2.0-bin-2.4.1/lib/mysql-connector-java-5.1.32-bin.jar
starting org.apache.spark.sql.hive.thriftserver.HiveThriftServer2, logging to /home/jifeng/hadoop/spark-1.2.0-bin-2.4.1/sbin/../logs/spark-jifeng-org.apache.spark.sql.hive.thriftserver.HiveThriftServer2-1-feng02.out

2:运行beeline

Now you can use beeline to test the Thrift JDBC/ODBC server:

./bin/beeline
[jifeng@feng02 spark-1.2.0-bin-2.4.1]$ ./bin/beeline
Spark assembly has been built with Hive, including Datanucleus jars on classpath
Beeline version ??? by Apache Hive

3:连接server


参考:https://cwiki.apache.org/confluence/display/Hive/HiveServer2+Clients#HiveServer2Clients-BeelineExample

beeline> !connect jdbc:hive2://feng02:10000 jifeng jifeng org.apache.hive.jdbc.HiveDriver
Connecting to jdbc:hive2://feng02:10000
log4j:WARN No appenders could be found for logger (org.apache.thrift.transport.TSaslTransport).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Connected to: Spark SQL (version 1.2.0)
Driver: null (version null)
Transaction isolation: TRANSACTION_REPEATABLE_READ

4:查询

0: jdbc:hive2://feng02:10000> show tables;                                                                  
+----------------+
|     result     |
+----------------+
| course         |
| hbase_table_1  |
| pokes          |
| student        |
+----------------+
4 rows selected (2.723 seconds)

0: jdbc:hive2://feng02:10000> select * from student;
+-----+----------+------+
| id  |   name   | age  |
+-----+----------+------+
| 1   | nick     | 24   |
| 2   | doping   | 25   |
| 3   | caizhi   | 26   |
| 4   | liaozhi  | 27   |
| 5   | wind     | 30   |
+-----+----------+------+
5 rows selected (10.554 seconds)
0: jdbc:hive2://feng02:10000> select a.*,b.* from student a  join course b where a.id=b.id ;
+-----+----------+------+-----+-----+-----+-----+-----+
| id  |   name   | age  | id  | c1  | c2  | c3  | c4  |
+-----+----------+------+-----+-----+-----+-----+-----+
| 1   | nick     | 24   | 1   | 英语  | 中文  | 法文  | 日文  |
| 2   | doping   | 25   | 2   | 中文  | 法文  |     |     |
| 3   | caizhi   | 26   | 3   | 中文  | 法文  | 日文  |     |
| 4   | liaozhi  | 27   | 4   | 中文  | 法文  | 拉丁  |     |
| 5   | wind     | 30   | 5   | 中文  | 法文  | 德文  |     |
+-----+----------+------+-----+-----+-----+-----+-----+
5 rows selected (2.33 seconds)

4:Java JDBC连接

package demo.test;

import java.sql.*;

public class Pretest {


		    public static void main( String args[] )
		        throws SQLException , ClassNotFoundException {
	    	    String jdbcdriver="org.apache.hive.jdbc.HiveDriver";
	    	    String jdbcurl="jdbc:hive2://feng02:10000";
	    	    String username="scott";
	    	    String password="tiger";		
	    	    Class.forName(jdbcdriver);
	    	    Connection c = DriverManager.getConnection(jdbcurl,username,password); 
		        Statement st = c.createStatement();		        
		        print( "num should be 1 " , st.executeQuery("select * from student"));

		        // TODO indexing
		    }
			 static void print( String name , ResultSet res )
				        throws SQLException {
				        System.out.println( name);
				        ResultSetMetaData meta=res.getMetaData();				        
		                //System.out.println( "\t"+res.getRow()+"条记录");
		                String	str="";
		                for(int i=1;i<=meta.getColumnCount();i++){
		                	str+=meta.getColumnName(i)+"   ";
		                	//System.out.println( meta.getColumnName(i)+"   ");
		                }
		                System.out.println("\t"+str);
		                str="";
				        while ( res.next() ){
				        	for(int i=1;i<=meta.getColumnCount();i++){	
				        		str+= res.getString(i)+"   ";				        	} 
				        	System.out.println("\t"+str);
				        	str="";
				        }
				    }	    
}


上面是运行参数

结果显示:

num should be 1 
	id   name   age   
	1   nick   24   
	2   doping   25   
	3   caizhi   26   
	4   liaozhi   27   
	5   wind   30   



<think>好的,我现在要解决用户的问题:如何调整JDBC/ODBC Server中的session池大小。用户提到了Spark Thrift JDBCServer和可能的其他相关组件,比如Hive或Impala。首先,我需要回忆一下相关的配置参数。 根据之前的引用,用户可能在使用Spark Thrift Server,也就是Hive Thrift ServerSpark版本。这时候,我应该考虑Spark的配置参数。通常,这类服务的session管理可能涉及到Hive的配置,因为Spark Thrift Server与Hive兼容。比如Hive的hive.server2.thrift.max.worker.threads和hive.server2.session.check.interval等参数可能相关。 但用户特别提到了session池的大小,可能需要调整同时处理的会话数量。Spark Thrift Server使用HiveServer2的代码,所以HiveServer2的配置应该适用。比如,hive.server2.thrift.max.worker.threads控制最大工作线程数,这可能间接影响并发会话的数量。另外,hive.server2.async.exec.threads可能用于异步执行的线程池,但不确定是否直接对应session池。 还需要考虑连接池的配置。例如,是否使用了某种连接池管理,比如在JDBC连接字符串中设置参数。不过,用户问的是服务器端的配置,所以应该关注服务启动时的参数。 此外,用户可能在使用Impala,因为引用中提到了Impala的JDBC端口问题。Impala的session管理可能有不同的配置,比如--hs2_session_pool_size或类似的启动参数。需要查阅Impala的文档是否有相关设置。 现在需要确定不同服务中的具体参数。对于Spark Thrift Server,HiveServer2的参数适用。比如: - hive.server2.thrift.max.worker.threads:最大工作线程,影响并发处理能力。 - hive.server2.thrift.min.worker.threads:最小工作线程数。 - hive.server2.thrift.workers.keepalive.time:线程保持存活的时间。 不过,这些参数更多是线程池的设置,而不是session池。Session池可能涉及会话的最大数量,比如hive.server2.session.check.interval和hive.server2.idle.session.timeout来控制会话存活时间,从而间接影响池的大小。或者,是否有参数直接限制最大session数? 查找HiveServer2的文档,发现hive.server2.thrift.max.worker.threads确实影响同时处理的请求数量,但每个session可能占用一个线程。所以调整这个参数可能影响并发session的数量。另外,hive.server2.session.check.interval和hive.server2.idle.session.timeout可以控制空闲会话的清理,从而释放资源,但不会直接设置池的大小上限。 可能用户需要同时调整最大工作线程数和会话超时时间,以管理session池的使用情况。例如,如果最大线程数设置为100,那么最多同时处理100个活跃会话。此外,设置较短的idle.session.timeout可以让不活跃的会话更快被释放,避免占用资源。 对于Impala,可能需要查看启动参数,比如--hs2_session_pool_max_size或类似参数。根据引用中的Impala错误信息,可能需要检查其配置文档。例如,Impala的启动参数可能包括--beeswax_port、--hs2_port等,但关于session池的参数可能需要进一步确认。 总结可能的步骤: 1. 对于Spark Thrift JDBCServer,调整HiveServer2相关的参数,如hive.server2.thrift.max.worker.threads。 2. 设置会话超时参数,如hive.server2.idle.session.timeout。 3. 在启动服务时,通过--conf传递这些参数。 4. 对于Impala,可能需要使用特定的启动参数来调整session池大小,如--hs2_session_pool_max_size。 需要验证这些参数是否正确存在。例如,查阅Hive官方文档,确认hive.server2.thrift.max.worker.threads的作用,以及是否有其他相关参数。同时,检查Impala的文档是否有类似的配置。 例如,Hive的文档指出,hive.server2.thrift.max.worker.threads默认值为1000,这决定了Thrift服务的最大并发连接数。因此,这可能直接限制session池的大小。如果用户想要限制最大并发session数,可以调整这个参数。 另外,hive.server2.async.exec.threads可能影响异步执行的线程数,但可能不直接关联session池。因此,主要关注max.worker.threads和idle.session.timeout的组合。 因此,回答应该指导用户在启动Spark Thrift Server时,通过设置这些Hive参数来调整session池的大小。同时,对于Impala,可能需要不同的参数,如启动时使用--hs2_session_pool_max_size,但需要确认是否存在该参数。 如果用户的问题仅涉及Spark Thrift Server,那么答案应集中在HiveServer2的配置上。如果涉及Impala,则需要包含Impala的配置方法。根据用户的引用,他们提到了Spark和Impala,所以可能需要涵盖两者。 但根据用户当前的提问,他们可能主要关注的是Spark Thrift JDBCServer,所以优先处理该部分,然后补充Impala的可能方法。 最后,确保建议的配置方法正确,并给出示例,比如在启动命令中添加--conf hive.server2.thrift.max.worker.threads=200等。</think>调整JDBC/ODBC Server的Session池大小需根据具体服务类型配置。以下是针对Spark Thrift JDBCServer和Impala的配置方法: --- ### 一、Spark Thrift JDBCServer的Session池配置 Spark Thrift Server基于HiveServer2实现,可通过以下HiveServer2参数控制Session池行为: 1. **最大工作线程数** 通过`hive.server2.thrift.max.worker.threads`设置最大并发处理线程数,直接影响同时活跃的Session数量。 ```bash ./sbin/start-thriftserver.sh \ --conf spark.hadoop.hive.server2.thrift.max.worker.threads=200 ``` 2. **空闲Session超时时间** `hive.server2.idle.session.timeout`控制空闲Session自动释放的时间(默认24小时),间接优化池资源利用率。 ```bash --conf spark.hadoop.hive.server2.idle.session.timeout=3600 # 单位:秒 ``` 3. **Session检查间隔** 通过`hive.server2.session.check.interval`设置服务检查Session状态的频率(默认15分钟)。 ```bash --conf spark.hadoop.hive.server2.session.check.interval=300000 # 单位:毫秒 ``` --- ### 二、Impala JDBC/ODBC的Session池配置 Impala通过以下参数管理Session池[^3]: 1. **Session池最大连接数** 启动Impala Daemon时,通过`--hs2_session_pool_size`设置Session池容量: ```bash impalad --hs2_session_pool_size=100 ``` 2. **超时配置** `--idle_session_timeout`设置Session空闲超时(默认1小时): ```bash impalad --idle_session_timeout=1800 # 单位:秒 ``` --- ### 三、验证配置 - **Spark Thrift Server**:通过JDBC连接后执行`SHOW CONFIG 'hive.server2.thrift.max.worker.threads'`验证参数生效。 - **Impala**:检查Impala日志或使用`curl http://impala-daemon:25000/varz`查看运行参数。 ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值