그래서 나는've 를 사용하여 sbt 가진 어셈블리 패키지 내 모든 종속성으로 항아리에 대한 나의 불꽃 작업입니다. 나는've got 여러 가지 작업을 사용했다c3p0
설치 연결 풀 정보,방송,다음 사용하foreachPartition
에 RDD 다음을 잡아 연결,데이터를 삽입하는 데이터베이스입니다. 내 sbt 빌드 스크립트가 포함
"mysql" % "mysql-connector-java" % "5.1.33"
이렇게 하면 JDBC 커넥터와 함께 포장 작업입니다. 모든 것이 잘 작동합니다.
그래서 최근에 문제점을 탐색하기 시작했 SparkSQL 고 그것을 실현's 훨씬 쉽게 단순히 데이터 프레임 및 저장을 jdbc 소스와 함께 새로운 기능1.3.0
나는'm 얻는 다음과 같은 예외:
java.sql.SQLException:적절한 드라이버에 대한 발견 jdbc:mysql://니다.도메인입니다.com/여 myschema?사용자=사용자는&password=암호 java.sql.DriverManager.getConnection(DriverManager.java:596)에 java.sql.DriverManager.getConnection(DriverManager.java:233)
았을 때 실행한 이 로 나는 그것에 의해 설정
SPARK_CLASSPATH=/path/where/mysql-connector-is.jar
궁극적으로 무엇을 나는'm 을 알기를 원하는가,왜 이 작업은 가능하지 않을 찾아 드라이버 때 패키지해야 합니까? 내 다른 작업이 문제입니다. 에서 무엇을 말할 수 있는 모두c3p0
과 데이터 프레임 코드를 모두 이용하 java.sql.DriverManager`(는 손잡이를 가져오는 당신을 위해 모든 것을 내가 말할 수 있습니다)그래서 그냥 잘 작동 합?? 무언가가있는 경우를 방지하는 어셈블리의 방법은 작업에서,나는 무엇을 할 필요가 있는 이 작품은?
이 사람이었는 유사한 문제점:http://apache-spark-user-list.1001560.n3.nabble.com/How-to-use-DataFrame-with-MySQL-td22178.html
당신 업데이트 커넥터 드라이버의 가장 최근 버전입니까? 았다 또한 당신이 지정 드라이버 클래스를 호출할 때 load()?
Map<String, String> options = new HashMap<String, String>();
options.put("url", "jdbc:mysql://localhost:3306/video_rcmd?user=root&password=123456");
options.put("dbtable", "video");
options.put("driver", "com.mysql.cj.jdbc.Driver"); //here
DataFrame jdbcDF = sqlContext.load("jdbc", options);
에서 불꽃/conf/spark-기본값으로 초기화합니다.conf 설정할 수도 있습니다.드라이버입니다.extraClassPath 과 불꽃이 있습니다.다.extraClassPath 의 경로에 당신의 MySql 드라이버입니다.jar
이 옵션은 명확히 언급에서spark 문서:--드라이버 클래스 경로-postgresql-9.4.1207.jar --항아리 postgresql-9.4.1207.jar
실수를 하고 있었다 언급했 이 옵션은 후에 내 응용 프로그램's jar.
그러나 올바른 방법으로 지정하려면 이 옵션은 후 즉시 점화시:
스파크 제출--드라이버 클래스 경로/somepath/project/mysql-connector-java-5.1.30-bin.jar --병/somepath/project/mysql-connector-java-5.1.30-bin.jar --클래스 com.패키지입니다.MyClass target/scala-2.11/project_2.11-1.0.jar
과 함께 불꽃 2.2.0,문제의 수정되었습니다 나를 위해 추가하여 여분의 클래스 경로 정보에 대한 SparkSession 세션에서는 python 스크립트:
spark = SparkSession \
.builder \
.appName("Python Spark SQL basic example") \
.config("spark.driver.extraClassPath", "/path/to/jdbc/driver/postgresql-42.1.4.jar") \
.getOrCreate()
시 공식 문서 https://spark.apache.org/docs/latest/configuration.html
제 경우에는 불꽃이지에서 시작 cli 명령하지만,에서 장고 프레임워크 https://www.djangoproject.com/
spark.드라이버입니다.extraClassPath 에서 작동하지 않는 클라이언트 모드:
참고:클라이언트 모드이고,이 config 설정하지 않아야 합를 통해 SparkConf 응용 프로그램에서 직접기 때문에,운전자 JVM 이미 시작했습니다. 대신에,설정하시기 바랍 이를 통해--드라이버 클래스 경로로 명령행 옵션 또는 당신의 기본 속성 파일입니다.
환경변수 SPARK_CLASSPATH 는 사용되지 않에서 불꽃 1.0+.
당신이 먼저 복사본은 jdbc 드라이버 항아리는 서로로 실행자에서 같은 로컬 파일시스템 경로와 그 다음 옵션을 사용하여 당신은에서 불꽃 제출:
--driver-class-path "driver_local_file_system_jdbc_driver1.jar:driver_local_file_system_jdbc_driver2.jar"
--class "spark.executor.extraClassPath=executors_local_file_system_jdbc_driver1.jar:executors_local_file_system_jdbc_driver2.jar"
예를 들어의 경우에는 모두 필요합니 TeraData terajdbc4.jar 고 tdgssconfig.jar .
또는 수정 compute_classpath.sh 에서 모든 작업자 노드,스파크 설명서를 말한다:
JDBC 드라이버 클래스를 볼 수 있어야합하면 원시적인 클래스 로더는 클라이언트에서 세션에 모두 집행. 이 때문에 자바의 DriverManager 를 추가할 수 있습니다.보안 검사는 결과에 그것을 무시하고 모든 드라이버에 표시되지 않은 원시 클래스로더를 할 때 한가 연결을 엽니다. 한 편리한 방법을 이렇게 수정하는 것입니다 compute_classpath.sh 에서 모든 작업자 노드를 포함 하이 드라이버 항아리입니다.
이 존재하는 간단하 Java 속 문제를 해결합니다. 지정해야 합클래스입니다.의 forname()
인스턴스입니다. 예를 들어:
val customers: RDD[(Int, String)] = new JdbcRDD(sc, () => {
Class.forName("com.mysql.jdbc.Driver")
DriverManager.getConnection(jdbcUrl)
},
"SELECT id, name from customer WHERE ? < id and id <= ?" ,
0, range, partitions, r => (r.getInt(1), r.getString(2)))
인문서
쉽고 간단한 방법으로 복사하는 것이"mysql-connector-java-5.1.47.jar"로"spark-2.4.3\병\"디렉토리
나는 같은 문제를 가지고 있었습니다 실행 작업을 통해 메소 클러스터에 클러스터 모드입니다.
를 사용하 JDBC 드라이버가 필요한 추가 의존하는 시스템 클래스 경로지 않는 프레임워크 클래스 경로. 엔터테인먼트의 새로운 방법을 추가하여 종속성 파일에서촉발-기본값으로 초기화합니다.conf
모든 인스턴스에서의 클러스터입니다.
속성을 추가들은불꽃이 있습니다.드라이버입니다.extraClassPath
과불꽃이 있습니다.다.extraClassPath
와 경로에 있어야 합니다 로컬 파일 시스템입니다.
었과 같은 문제에 직면했을 때 실행하려고 스파크 쉘에서 명령을 내는 windows 기계입니다. 경로 전달되는 드라이버에 대한 위치뿐만 아니라 단지가 있는 것을 사용해야에서 쌍따옴표 그렇지 않으면 그것을 가져 오해와 당신을 얻지 않을 것입 정확한 출력하고 있습니다.
당신은 또한 것을 설치하 JDBC 드라이버에 대한 SQL 서버 연결에서:JDBC 드라이버
내가 사용하면 아래의 명령에 대한 이해 작업에 내 windows 기:
spark-shell--드라이버 클래스 경로를"C:\Program Files\Microsoft JDBC 드라이버 6.0 에 대한 SQL Server\sqljdbc_6.0\kor\jre8\sqljdbc42.jar"--항아리"C:\Program Files\Microsoft JDBC 드라이버 6.0 에 대한 SQL Server\sqljdbc_6.0\kor\jre8\sqljdbc42.jar"