ข้อผิดพลาด JMeter 3.3 เชื่อมต่อ 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-jdbc< /a> jar และการขึ้นต่อกันทั้งหมด (คุณสามารถดึงข้อมูลได้โดยใช้เช่น Maven Dependency Plugin) และอัปเดตรายการใน JMeter Classpath ด้วยค่าที่ถูกต้อง รุ่นต่างๆ

อาจเป็นการดีกว่าถ้าใช้การติดตั้ง JMeter "สะอาด" สำหรับสิ่งนี้เพื่อหลีกเลี่ยง jar hell ที่เป็นไปได้ ดังนั้นจึงเป็นเวลาที่ดีที่จะอัปเกรดเป็น 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 คุณต้องวาง jars ไว้ใต้โฟลเดอร์ lib และรีสตาร์ท JMeter เพื่อหยิบมันขึ้นมา - person Dmitri T; 03.04.2018
comment
การวางขวดลงใน lib ไม่สามารถแก้ปัญหาได้ ข้อผิดพลาดเดียวกัน ขอบคุณ - person robert; 03.04.2018
comment
มีโอกาสลองใช้ JMeter4.0 ฉันพบว่ามันทำให้สิ่งต่างๆ แย่ลง ตอนนี้ JMeter ไม่สามารถเชื่อมต่อกับ Spark และ Hive ได้ JMeter ไม่สามารถเริ่มต้นด้วยขวดที่แสดงอยู่ใน lib ได้ มันบ่นมากเกี่ยวกับข้อผิดพลาดกับ log4j ฉันเชื่อว่านี่เป็นปัญหาของ jar hell - person robert; 13.04.2018

คุณยังสามารถสร้าง "ตัวอย่าง JDBC" ของคุณเอง และเพิ่ม/ปรับโค้ดเพียงไม่กี่บรรทัดจากต้นฉบับเพื่อให้ใช้งานได้ ฉันต้องทำอย่างนั้นเพื่อให้ Hive และ Phoenix สนับสนุนเมื่อ 4 ปีที่แล้วและมันก็ได้ผล ต้องใช้วิธีหมดเวลาซึ่งยังไม่ได้นำมาใช้ในตอนนั้น

แหล่งที่มามีดังนี้ https://github.com/csalperwyck/JMeterJDBCSamplerWithOutTimeOut

person C. Salperwyck    schedule 24.08.2018