2016-01-13 16 views
5

Tôi đang sử dụngKhông lái xe phù hợp tìm thấy cho jdbc trong Spark

df.write.mode("append").jdbc("jdbc:mysql://ip:port/database", "table_name", properties) 

để chèn vào một bảng trong MySQL.

Ngoài ra, tôi đã thêm Class.forName("com.mysql.jdbc.Driver") vào mã của mình.

Khi tôi nộp đơn xin Spark tôi:

spark-submit --class MY_MAIN_CLASS 
    --master yarn-client 
    --jars /path/to/mysql-connector-java-5.0.8-bin.jar 
    --driver-class-path /path/to/mysql-connector-java-5.0.8-bin.jar 
    MY_APPLICATION.jar 

chế độ sợi-client này làm việc cho tôi.

Nhưng khi tôi sử dụng chế độ sợi cụm:

spark-submit --class MY_MAIN_CLASS 
    --master yarn-cluster 
    --jars /path/to/mysql-connector-java-5.0.8-bin.jar 
    --driver-class-path /path/to/mysql-connector-java-5.0.8-bin.jar 
    MY_APPLICATION.jar 

Nó doens't làm việc. Tôi cũng đã thử đặt "--conf":

spark-submit --class MY_MAIN_CLASS 
    --master yarn-cluster 
    --jars /path/to/mysql-connector-java-5.0.8-bin.jar 
    --driver-class-path /path/to/mysql-connector-java-5.0.8-bin.jar 
    --conf spark.executor.extraClassPath=/path/to/mysql-connector-java-5.0.8-bin.jar 
    MY_APPLICATION.jar 

nhưng vẫn gặp lỗi "Không tìm thấy trình điều khiển phù hợp cho jdbc".

Trả lời

2

Có 3 giải pháp khả thi,

  1. Bạn có thể muốn lắp ráp bạn ứng dụng với xây dựng quản lý của bạn (Maven, SBT) do đó bạn sẽ không cần phải thêm dependecies trong spark-submit cli của bạn.
  2. Bạn có thể sử dụng tùy chọn sau trong spark-submit cli của bạn:

    --jars $(echo ./lib/*.jar | tr ' ' ',') 
    

    Giải thích: Giả sử rằng bạn có tất cả lọ của bạn trong một thư mục lib ở gốc dự án của bạn, điều này sẽ đọc tất cả các thư viện và thêm họ gửi đơn đăng ký.

  3. Bạn cũng có thể thử định cấu hình 2 biến này: spark.driver.extraClassPathspark.executor.extraClassPath trong SPARK_HOME/conf/spark-default.conf tệp và chỉ định giá trị của các biến này làm đường dẫn của tệp jar. Đảm bảo rằng cùng một đường dẫn tồn tại trên các nút công nhân.

+0

Tôi đã thêm mysql-connector-java-5.1.38-bin.jar vào trong bình và bây giờ tôi không đưa nó vào cli của tôi. Bằng cách làm sợi-khách hàng này vẫn hoạt động nhưng cụm sợi không. –

+2

bạn cũng có thể thử định cấu hình 2 biến "spark.driver.extraClassPath" và "spark.executor.extraClassPath" trong tệp "SPARK_HOME/conf/spark-default.conf" và chỉ định giá trị của các biến này làm đường dẫn của tệp jar. Đảm bảo rằng cùng một đường dẫn tồn tại trên các nút công nhân. – Sumit

+0

Đặt "spark.driver.extraClassPath" hoạt động cho tôi, cảm ơn. –

0

Tôi đã thử các đề xuất được hiển thị ở đây không có tác dụng đối với tôi (với mysql). Trong khi gỡ lỗi thông qua mã DriverManager, tôi nhận ra rằng tôi cần đăng ký trình điều khiển của mình vì điều này không xảy ra tự động với "kích hoạt tia lửa". Do đó, tôi đã thêm

Driver driver = new Driver(); 

Nhà xây dựng đăng ký trình điều khiển với DriverManager, giải quyết vấn đề SQLException cho tôi.

Các vấn đề liên quan