복붙노트

[SCALA] 아파치 스파크의 의존성 문제를 해결

SCALA

아파치 스파크의 의존성 문제를 해결

일반적인 문제를 구축하고 스파크 응용 프로그램을 배포 있습니다 :

다음은 어떻게 해결 될 수 있는가?

해결법

  1. ==============================

    1.아파치 스파크의 클래스 경로는 (응용 프로그램 별 사용자 코드를 수용하기 위해) 이러한 문제에 취약하게하는 동적으로 내장되어 있습니다. @ user7337271의 대답은 정확하지만, 당신이 사용하고있는 클러스터 관리자 ( "마스터")에 따라 좀 더 관심이있다.

    아파치 스파크의 클래스 경로는 (응용 프로그램 별 사용자 코드를 수용하기 위해) 이러한 문제에 취약하게하는 동적으로 내장되어 있습니다. @ user7337271의 대답은 정확하지만, 당신이 사용하고있는 클러스터 관리자 ( "마스터")에 따라 좀 더 관심이있다.

    먼저, 점화 애플리케이션은 이들 구성 요소 (각각은 별도의 JVM 그러므로 잠재적 클래스 경로에서 다른 클래스를 포함)로 구성

    이들의 관계는 아파치 스파크 클러스터 모드 개요에서 본도에서 설명된다 :

    - 지금 어떤 클래스 각 구성 요소에 상주해야합니까?

    이것은 다음과 같은 그림으로 답변을 얻을 수 있습니다 :

    의가 천천히 구문 분석 보자 :

    이제 우리는 바로, 우리가 어떻게 클래스는 각 구성 요소에 올바르게로드합니까, 그들이 어떤 규칙을 준수해야 함을 가지고 있다고?

    여기에 구축하고 (이 경우 - YARN을 사용하여) 스파크 응용 프로그램을 배포하는 제안 된 접근 방식이다, 요약하면 :

  2. ==============================

    2.구축하고 스파크 응용 프로그램을 배포 할 때 모든 종속성 호환 버전이 필요합니다.

    구축하고 스파크 응용 프로그램을 배포 할 때 모든 종속성 호환 버전이 필요합니다.

  3. ==============================

    3.문제가 외부 종속성 누락으로 인한 경우 이미 user7337271에 의해 주어진 매우 광범위한 대답 이외에, 당신은 예를 들어, 귀하의 종속성이있는 항아리를 구축 할 수 있습니다 받는다는 조립 플러그인

    문제가 외부 종속성 누락으로 인한 경우 이미 user7337271에 의해 주어진 매우 광범위한 대답 이외에, 당신은 예를 들어, 귀하의 종속성이있는 항아리를 구축 할 수 있습니다 받는다는 조립 플러그인

    이미 언급 한 바와 같이이 경우, 그들은 당신의 런타임 스파크 버전과 상관 관계 확인, 빌드 시스템에 "제공"모든 핵심 스파크 종속성을 표시 할 수 있는지 확인합니다.

  4. ==============================

    4.응용 프로그램의 종속성 클래스는 여러분의 실행 명령의 응용 프로그램 항아리 옵션에 지정되어야합니다.

    응용 프로그램의 종속성 클래스는 여러분의 실행 명령의 응용 프로그램 항아리 옵션에 지정되어야합니다.

    자세한 내용은 스파크 문서에서 찾을 수 있습니다

    문서에서 발췌 :

  5. ==============================

    5.나는이 문제가 조립 플러그인을 해결해야한다 생각합니다. 당신은 지방 항아리를 구축해야합니다. SBT의 예를 들면 :

    나는이 문제가 조립 플러그인을 해결해야한다 생각합니다. 당신은 지방 항아리를 구축해야합니다. SBT의 예를 들면 :

    자세한 정보가 필요하면, https://github.com/sbt/sbt-assembly로 이동

  6. ==============================

    6.프로젝트 스파크 2.4.0 - 빈 - hadoop2.7 \ 스파크-2.4.0 - 빈 - hadoop2.7의 \ 단지에서 모든 jar 파일을 추가합니다. 스파크 - 2.4.0 - 빈 - hadoop2.7은 https://spark.apache.org/downloads.html에서 다운로드 할 수 있습니다

    프로젝트 스파크 2.4.0 - 빈 - hadoop2.7 \ 스파크-2.4.0 - 빈 - hadoop2.7의 \ 단지에서 모든 jar 파일을 추가합니다. 스파크 - 2.4.0 - 빈 - hadoop2.7은 https://spark.apache.org/downloads.html에서 다운로드 할 수 있습니다

  7. ==============================

    7.나는 다음과 같은 build.sbt이

    나는 다음과 같은 build.sbt이

    lazy val root = (project in file(".")).
      settings(
        name := "spark-samples",
        version := "1.0",
        scalaVersion := "2.11.12",
        mainClass in Compile := Some("StreamingExample")        
      )
    
    libraryDependencies ++= Seq(
      "org.apache.spark" %% "spark-core" % "2.4.0",
      "org.apache.spark" %% "spark-streaming" % "2.4.0",
      "org.apache.spark" %% "spark-sql" % "2.4.0",
      "com.couchbase.client" %% "spark-connector" % "2.2.0" 
    )
    
    // META-INF discarding
    assemblyMergeStrategy in assembly := {
           case PathList("META-INF", xs @ _*) => MergeStrategy.discard
           case x => MergeStrategy.first
       }
    

    나는 SBT 어셈블리 플러그인을 사용하여 내 응용 프로그램의 지방 항아리를 만들었지 만 사용하여 실행할 때 오류와 함께 실패 불꽃을 제출했습니다 :

    java.lang.NoClassDefFoundError: rx/Completable$OnSubscribe
        at com.couchbase.spark.connection.CouchbaseConnection.streamClient(CouchbaseConnection.scala:154)
    

    클래스 내 지방 항아리에 있는지 난 볼 수 있습니다 :

    jar tf target/scala-2.11/spark-samples-assembly-1.0.jar | grep 'Completable$OnSubscribe'
    rx/Completable$OnSubscribe.class
    

    확실하지 무슨 일이 내가 여기에 단서를 놓친 거지?

  8. from https://stackoverflow.com/questions/41383460/resolving-dependency-problems-in-apache-spark by cc-by-sa and MIT license