Ошибка JMeter 3.3 connect Spark 2.2.1: невозможно создать PoolableConnectionFactory (метод не поддерживается)

Используйте этот список банок, я могу успешно подключить SQuirrel SQL к Spark 2.2.1:

commons-logging-1.1.3.jar
hadoop-common-2.7.3.jar
hive-exec-1.2.1.spark2.jar
hive-jdbc-1.2.1.spark2.jar
hive-metastore-1.2.1.spark2.jar
http-client-1.0.4.jar
httpclient-4.5.2.jar
httpcore-4.4.4.jar
libfb303-0.9.3.jar
libthrift-0.9.3.jar
log4j-1.2.17.jar
slf4j-api-1.7.16.jar
slf4j-log4j12-1.7.16.jar
spark-hive-thriftserver_2.11-2.2.1.jar
spark-hive_2.11-2.2.1.jar
spark-network-common_2.11-2.2.1.jar

Я думаю, что вышеуказанные банки более чем необходимы. Но при попытке подключить JMeter 3.3 к тому же Spark 2.2.1 ThriftServer с ними я получил сообщение об ошибке ниже

enter code here Cannot create PoolableConnectionFactory (Method not supported)

Конфигурация JDBC находится здесь: введите здесь описание изображения

Полный ответ на Jmeter здесь:

Thread Name: test 1-1
Sample Start: 2018-04-03 13:34:43 CST
Load time: 511
Connect Time: 510
Latency: 0
Size in bytes: 62
Sent bytes:0
Headers size in bytes: 0
Body size in bytes: 62
Sample Count: 1
Error Count: 1
Data type ("text"|"bin"|""): text
Response code: null 0
Response message: java.sql.SQLException: Cannot create PoolableConnectionFactory (Method not supported)

Response headers:


SampleResult fields:
ContentType: text/plain
DataEncoding: UTF-8

Я также пытаюсь использовать более новый Hive JDBC driver 2.3.0, но очевидно, что он не работает со Spark 2.2.1 ни на beeline, ни на любых других, включая Jmeter.

Сообщение об ошибке при использовании beeline с драйвером Hive JDBC 2.3.0 находится здесь:

$ beeline -u jdbc:hive2://<hostip>:10000/tpch_sf100_orc -n rxxxds          
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/opt/apache-hive-2.3.0-bin/lib/log4j-slf4j-impl-2.6.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/opt/apache-tez-0.9.0-bin/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/opt/hadoop-2.9.0/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]
Connecting to jdbc:hive2://<hostip>:10000/tpch_sf100_orc
18/04/03 13:41:58 [main]: ERROR jdbc.HiveConnection: Error opening session
org.apache.thrift.TApplicationException: Required field 'client_protocol' is unset! Struct:TOpenSessionReq(client_protocol:null, configuration:{set:hiveconf:hive.server2.thrift.resultset.default.fetch.size=1000, use:database=tpch_sf100_orc})
        at org.apache.thrift.TApplicationException.read(TApplicationException.java:111) ~[hive-exec-2.3.0.jar:2.3.0]
        at org.apache.thrift.TServiceClient.receiveBase(TServiceClient.java:79) ~[hive-exec-2.3.0.jar:2.3.0]
        at org.apache.hive.service.rpc.thrift.TCLIService$Client.recv_OpenSession(TCLIService.java:168) ~[hive-exec-2.3.0.jar:2.3.0]
        at org.apache.hive.service.rpc.thrift.TCLIService$Client.OpenSession(TCLIService.java:155) ~[hive-exec-2.3.0.jar:2.3.0]
        at org.apache.hive.jdbc.HiveConnection.openSession(HiveConnection.java:680) [hive-jdbc-2.3.0.jar:2.3.0]
        at org.apache.hive.jdbc.HiveConnection.<init>(HiveConnection.java:200) [hive-jdbc-2.3.0.jar:2.3.0]
        at org.apache.hive.jdbc.HiveDriver.connect(HiveDriver.java:107) [hive-jdbc-2.3.0.jar:2.3.0]
        at java.sql.DriverManager.getConnection(DriverManager.java:664) [?:1.8.0_112]
        at java.sql.DriverManager.getConnection(DriverManager.java:208) [?:1.8.0_112]
        at org.apache.hive.beeline.DatabaseConnection.connect(DatabaseConnection.java:145) [hive-beeline-2.3.0.jar:2.3.0]
        at org.apache.hive.beeline.DatabaseConnection.getConnection(DatabaseConnection.java:209) [hive-beeline-2.3.0.jar:2.3.0]
        at org.apache.hive.beeline.Commands.connect(Commands.java:1641) [hive-beeline-2.3.0.jar:2.3.0]
        at org.apache.hive.beeline.Commands.connect(Commands.java:1536) [hive-beeline-2.3.0.jar:2.3.0]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_112]
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_112]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_112]
        at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_112]
        at org.apache.hive.beeline.ReflectiveCommandHandler.execute(ReflectiveCommandHandler.java:56) [hive-beeline-2.3.0.jar:2.3.0]
        at org.apache.hive.beeline.BeeLine.execCommandWithPrefix(BeeLine.java:1274) [hive-beeline-2.3.0.jar:2.3.0]
        at org.apache.hive.beeline.BeeLine.dispatch(BeeLine.java:1313) [hive-beeline-2.3.0.jar:2.3.0]
        at org.apache.hive.beeline.BeeLine.connectUsingArgs(BeeLine.java:867) [hive-beeline-2.3.0.jar:2.3.0]
        at org.apache.hive.beeline.BeeLine.initArgs(BeeLine.java:776) [hive-beeline-2.3.0.jar:2.3.0]
        at org.apache.hive.beeline.BeeLine.begin(BeeLine.java:1010) [hive-beeline-2.3.0.jar:2.3.0]
        at org.apache.hive.beeline.BeeLine.mainWithInputRedirection(BeeLine.java:519) [hive-beeline-2.3.0.jar:2.3.0]
        at org.apache.hive.beeline.BeeLine.main(BeeLine.java:501) [hive-beeline-2.3.0.jar:2.3.0]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_112]
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_112]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_112]
        at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_112]
        at org.apache.hadoop.util.RunJar.run(RunJar.java:239) [hadoop-common-2.9.0.jar:?]
        at org.apache.hadoop.util.RunJar.main(RunJar.java:153) [hadoop-common-2.9.0.jar:?]
18/04/03 13:41:58 [main]: WARN jdbc.HiveConnection: Failed to connect to <hostip>:10000
Error: Could not open client transport with JDBC Uri: jdbc:hive2://<hostip>:10000/tpch_sf100_orc: Could not establish connection to jdbc:hive2://<hostip>:10000/tpch_sf100_orc: Required field 'client_protocol' is unset! Struct:TOpenSessionReq(client_protocol:null, configuration:{set:hiveconf:hive.server2.thrift.resultset.default.fetch.size=1000, use:database=tpch_sf100_orc}) (state=08S01,code=0)
Beeline version 2.3.0 by Apache Hive

Что еще можно сделать, чтобы подключить JMeter к Spark?


person robert    schedule 03.04.2018    source источник
comment
Пожалуйста, покажите полную трассировку стека ошибок и конфигурацию JDBC JMeter.   -  person user7294900    schedule 03.04.2018


Ответы (2)


Скорее всего это связано с несоответствием клиентских и серверных библиотек, нужно использовать ту же версию что и на сервере.

Поэтому определите, какая версия Hive работает на вашем сервере, и загрузите соответствующую hive-jdbc< /a> jar и все зависимости (вы можете получить их, например, Maven Dependency Plugin) и обновите их в JMeter Classpath, указав правильный версии.

Для этого может быть лучше использовать «чистую» установку JMeter, чтобы избежать возможного ада jar, поэтому самое время перейти на JMeter 4.0

person Dmitri T    schedule 03.04.2018
comment
Как я уже говорил, я собираю набор банок из Spark, они могут успешно работать на SQuirrel SQL, но не на JMeter. Jmeter 3.3, который я использую, на самом деле взят непосредственно из дистрибутива. Я просто помещаю банки в подкаталог lib/ext в JMeter и добавляю его специально в элемент конфигурации JDBC в плане тестирования. Как вы думаете, что JMeter 4.0 может внести какие-то отличия в этот вопрос? Я попробую. Благодарность - person robert; 03.04.2018
comment
Папка lib/ext предназначена для плагинов JMeter, вам нужно поместить банки в папку lib и перезапустить JMeter, чтобы забрать их. - person Dmitri T; 03.04.2018
comment
Размещение банок в lib не решает проблему. Та же ошибка. Спасибо - person robert; 03.04.2018
comment
Получил шанс попробовать JMeter4.0, я считаю, что это только усугубляет ситуацию. Теперь JMeter не может подключиться ни к Spark, ни к Hive. JMeter не может даже запуститься с банками, представленными в lib. Он много жалуется на ошибки с log4j. Я считаю, что это проблема баночного ада. - person robert; 13.04.2018

Вы также можете создать свой собственный «сэмплер JDBC» и добавить/адаптировать всего несколько строк кода из оригинала, чтобы он работал. Мне пришлось сделать это для поддержки Hive и Phoenix 4 года назад, и это сработало. Для этого требовался метод Timeout, который тогда не был реализован.

Вот исходники: https://github.com/csalperwyck/JMeterJDBCSamplerWithOutTimeOut

person C. Salperwyck    schedule 24.08.2018