JMeter 3.3 menghubungkan kesalahan Spark 2.2.1: Tidak dapat membuat PoolableConnectionFactory (Metode tidak didukung)

Gunakan daftar toples ini, saya berhasil menghubungkan SQuirrel SQL ke 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

Menurut saya toples di atas lebih dari yang diperlukan. Tetapi ketika mencoba menghubungkan JMeter 3.3 ke Spark 2.2.1 ThriftServer yang sama dengan mereka, saya mendapat pesan kesalahan di bawah ini

enter code here Cannot create PoolableConnectionFactory (Method not supported)

Konfigurasi JDBC ada di sini: masukkan deskripsi gambar di sini

Tanggapan lengkap di Jmeter ada di sini:

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

Saya juga mencoba menggunakan Hive JDBC driver 2.3.0 yang lebih baru, tetapi jelas itu tidak berfungsi dengan Spark 2.2.1 baik di beeline atau lainnya termasuk Jmeter.

Pesan kesalahan saat menggunakan langsung dengan driver Hive JDBC 2.3.0 ada di sini:

$ 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

Apa lagi yang bisa dilakukan untuk menghubungkan JMeter ke Spark?


person robert    schedule 03.04.2018    source sumber
comment
Harap tunjukkan stacktrace kesalahan lengkap dan konfigurasi JDBC JMeter   -  person user7294900    schedule 03.04.2018


Jawaban (2)


Kemungkinan besar hal ini disebabkan oleh ketidakcocokan pustaka klien dan server, Anda perlu menggunakan versi yang sama seperti di server.

Jadi kenali versi Hive mana yang berjalan di server Anda dan unduh hive-jdbc< yang sesuai /a> jar dan semua dependensinya (Anda dapat mengambilnya menggunakan yaitu Plugin Ketergantungan Maven) dan perbarui yang ada di JMeter Classpath dengan yang benar versi.

Mungkin lebih baik menggunakan instalasi JMeter yang "bersih" untuk menghindari kemungkinan jar hell, jadi ini saat yang tepat untuk meningkatkan ke JMeter 4.0

person Dmitri T    schedule 03.04.2018
comment
Seperti yang saya sebutkan, saya mengumpulkan kumpulan toples dari Spark, mereka berhasil bekerja pada SQuirrel SQL tetapi tidak pada JMeter. Jmeter 3.3 yang saya pakai sebenarnya langsung dari distribusinya. Saya hanya menempatkan toples ke dalam sub-direktori lib/ext di bawah JMeter dan menambahkannya secara khusus di bawah item Konfigurasi JDBC dalam rencana pengujian. Menurut Anda apa yang dapat dilakukan JMeter 4.0 terhadap masalah ini? Saya akan mencoba. terima kasih - person robert; 03.04.2018
comment
Folder lib/ext untuk Plugin JMeter, Anda perlu meletakkan toples di bawah folder lib dan memulai ulang JMeter untuk mengambilnya - person Dmitri T; 03.04.2018
comment
Menempatkan stoples ke lib tidak menyelesaikan masalah. Kesalahan yang sama. Terima kasih - person robert; 03.04.2018
comment
Mendapat kesempatan untuk mencoba JMeter4.0, menurut saya itu hanya memperburuk keadaan. Sekarang JMeter tidak dapat terhubung ke Spark dan Hive. JMeter bahkan tidak bisa memulai dengan toples yang disajikan di lib. Ia banyak mengeluh tentang kesalahan dengan log4j. Saya yakin ini adalah masalah jarak neraka. - person robert; 13.04.2018

Anda juga dapat membuat "JDBC sampler" Anda sendiri dan menambahkan/menyesuaikan hanya beberapa baris kode dari aslinya agar berfungsi. Saya harus melakukan itu untuk dukungan Hive dan Phoenix 4 tahun lalu dan berhasil. Untuk itu diperlukan metode Timeout yang tidak diterapkan saat itu.

Berikut sumbernya: https://github.com/csalperwyck/JMeterJDBCSamplerWithOutTimeOut

person C. Salperwyck    schedule 24.08.2018