[HADOOP] Spark : 스레드 "main"의 예외 java.lang.ClassNotFoundException : com.mysql.jdbc.Driver
HADOOPSpark : 스레드 "main"의 예외 java.lang.ClassNotFoundException : com.mysql.jdbc.Driver
필자는 spark에서 dataframe을 mySql 테이블에 작성하는 간단한 프로그램을 작성했다.
프로그램은 다음과 같습니다 :
import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
import org.apache.spark.rdd.RDD
import org.apache.spark.sql.SQLContext
import org.apache.spark.sql.hive.HiveContext
import org.apache.spark.SparkContext._
import org.apache.spark.rdd._
//import org.apache.spark.rdd.RDD
import org.apache.spark.sql.types._
import org.apache.spark.sql.Row;
import java.util.Properties
import java.sql.{ Connection, DriverManager, SQLException }
object MySQLTrial {
def main(args: Array[String]) {
val sparkConf = new SparkConf().setAppName("AnalyseBusStreaming")
val sc = new SparkContext(sparkConf)
val df = sc.parallelize(Array((1, 234), (2, 1233)))
val sqlContext = new org.apache.spark.sql.SQLContext(sc)
import sqlContext.implicits._
val prop = new Properties()
prop.put("user", "admin")
prop.put("password", "admin")
val driver = "com.mysql.jdbc.Driver"
Class.forName(driver)
val dfWriter = df.toDF().write.mode("append")
dfWriter.jdbc("jdbc:mysql://127.0.0.1:3306/IOT_DB", "table1", prop)
}
}
프로젝트의 POM 파일은 다음과 같습니다.
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>ggi.bigdata</groupId>
<artifactId>internet_of_things</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.10</artifactId>
<version>1.6.0</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-hive_2.10</artifactId>
<version>1.6.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
</dependencies>
</project>
나는 스파크 제출 (로컬 및 원사 모드에서 시도)을 사용하여이 프로그램을 실행 중입니다. 이 코드를 실행하기 위해 jar 파일을 명시 적으로 포함하지 않았습니다. 계속 오류가 발생합니다.
스레드 "main"의 예외 java.lang.ClassNotFoundException : com.mysql.jdbc.Driver
이것에 대해 무엇을해야합니까?
해결법
-
==============================
1.이것은 독립 실행 형 클러스터 또는 원사 또는 mesos 여부에 관계없이 클러스터에 제출하는 드라이버가 uber-jar에 없기 때문입니다.
이것은 독립 실행 형 클러스터 또는 원사 또는 mesos 여부에 관계없이 클러스터에 제출하는 드라이버가 uber-jar에 없기 때문입니다.
해결 방법 1 : 당신이 maven을 사용하고 있기 때문에 어셈블리 플러그인을 사용하여 필요한 모든 의존성을 가진 uber-jar를 빌드 할 수 있습니다. Maven 어셈블리 플러그인에 대한 자세한 정보는 여기에 있습니다.
해결책 2 : --jars 옵션을 사용하여 응용 프로그램을 제출할 때 런타임에 이러한 종속성 라이브러리를 제공하십시오. 고급 의존성 관리에 대한 광석 정보를 읽고 공식 문서에 응용 프로그램을 제출하도록 조언합니다.
예를 들면 다음과 같이 보일 수 있습니다 :
./bin/spark-submit \ --class <main-class> --master <master-url> \ --jars /path/to/mysql-connector-java*.jar
이게 도움이 되길 바란다 !
-
==============================
2.엘리야는 옳았다. M2Eclipse는 jar 파일을 생성하지만 fat / uber jar 파일은 아닙니다. Eclipse에 "Maven 어셈블리"플러그인을 명시 적으로 설치하면, 종속 항아리가 포함 된 팻 항아리를 만들 수 있으므로 프로그램이 실행됩니다.
엘리야는 옳았다. M2Eclipse는 jar 파일을 생성하지만 fat / uber jar 파일은 아닙니다. Eclipse에 "Maven 어셈블리"플러그인을 명시 적으로 설치하면, 종속 항아리가 포함 된 팻 항아리를 만들 수 있으므로 프로그램이 실행됩니다.
from https://stackoverflow.com/questions/36435532/spark-exception-in-thread-main-java-lang-classnotfoundexception-com-mysql-j by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] Uber Jar를 Google Dataproc에 제출하는 동안 Guava 종속성 문제를 해결하는 방법 (0) | 2019.07.03 |
---|---|
[HADOOP] Amazon EMR 클러스터에서 hadoop MR 작업을 원격으로 제출하는 방법 (0) | 2019.07.03 |
[HADOOP] hbase mapreduce에 Delete 또는 Put 오류 전달 (0) | 2019.07.03 |
[HADOOP] HADOOP 맵에서 Generics를 사용하면 문제를 줄일 수 있습니다. (0) | 2019.07.03 |
[HADOOP] hadoop에서 Peg에 Regex 사용하기 (0) | 2019.07.03 |