2014-07-14 1 views
3

저는 로컬에서 디버깅하고 클러스터에 배포 할 수있는 Apache Spark 응용 프로그램을 빌드하고 있습니다. 이렇게하려면 다음 요구 사항을 충족시키기 위해 spark-core (Java/scala 라이브러리)에 대한 종속성을 정의해야합니다. 컴파일에 더해어셈블리, 패키징이 아닌 compile, run, test에 라이브러리를 포함하도록 maven의 종속성 범위를 정의하는 방법은 무엇입니까?

제공된 스파크 코어 클러스터에 배포 조립체 (배제 (로컬 디버깅 유닛 테스트)를 실행 및 테스트 포함 (다른 현명한 컴파일 실패)이 감소 항아리 크기별 70M, maven-assembly를 사용하여 해결할 수없는 jar hell 문제가 있으므로 maven-shade 플러그인을 사용 중입니다.

불행히도 maven이 기본적으로 지원하지 않는 사용자 정의 범위 인 것처럼 보입니다. . 일부 플러그인을 사용하여 활성화 할 수있는 방법이 있습니까?

+0

http://stackoverflow.com/questions/18838944/sbt-how (모든 스파크 이적 종속성 최종 항아리에 추가) -with-add-supplied-dependencies-back-to-run-test-tasks-classpath 즉, sbt 대신에 maven을 사용하여 동일한 결과를 얻고 싶습니다. – tribbloid

+0

실제 문제는 무엇입니까? maven을 사용하여 문제없이 불꽃을 실행하십시오 – aaronman

답변

1

우리는 Maven 빌드에서 정확히 수행합니다. Spark 어셈블리가 작업 어셈블리에 포함되지 않도록 제외하십시오. 플러그인 구성에 maven-shade 제외 규칙을 추가합니다.

<configuration> 
    <shadedArtifactAttached>true</shadedArtifactAttached> 
    <shadedClassifierName>jar-with-dependencies</shadedClassifierName> 
     <artifactSet> 
      <excludes> 
       <exclude>org.apache.spark:spark-assembly</exclude> 
      </excludes> 
     </artifactSet> 
... 
</configuration> 
+0

고마워요! 내가 먼저 시도해 보자. – tribbloid

+0

OK 나는 그것을 시험해 보았다. 매우 효과적이지는 않다. 52M에서 105M으로 병 크기가 증가했다.이 예외는 전 이적이지 않다. (spark-assembly의 모든 전이 의존성은 jar에 유지된다.) – tribbloid

+0

우리는 이 규칙에 따라 효과적으로 배제되는 스파크 어셈블리 uber-jar. 그렇지 않으면 모든 종속성을 제외해야합니다. – maasg

0

종속성을 위해 scope 속성 (제공됨)을 사용할 수 있습니다.

이것은 컴파일과 매우 비슷하지만 런타임시 JDK 또는 컨테이너가 종속성을 제공 할 것으로 예상한다는 것을 나타냅니다. 예를 들어, Java Enterprise Edition 용 웹 응용 프로그램을 빌드 할 때 웹 컨테이너가 해당 클래스를 제공하기 때문에 Servlet API 및 관련 Java EE API에 대한 종속성을 제공된 범위로 설정합니다. 이 범위는 컴파일 및 테스트 클래스 경로에서만 사용할 수 있으며 변환하지 않습니다.

참조 : http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Dependency_Scope

예 :

<dependency> 
    <groupId>group-a</groupId> 
    <artifactId>artifact-b</artifactId> 
    <version>1.0</version> 
    <type>bar</type> 
    <scope>provided</scope> 
</dependency> 
+0

불행히도 아무 것도 할 수 없으며 실행 및 테스트 시간에도 종속성을 제외합니다. 우리가 단지 어셈블리 시간에 제외시키고 자하는 우리의 경우 – tribbloid

+0

왜 이것을 표시했는지 이해할 수 없다. 이것은 빌드의 일부로 로컬 및 유닛 테스트를 지원하는 Spark Maven 빌드를 구성하는 방법이며, 프로덕션을위한 패키지 JAR이다. 배포에는 Spark 라이브러리가 포함되어 있지 않습니다. – Brad

0

당신은이 개 프로파일을 작성해야합니다. 1은 컴파일 범위에서 스파크 (기본값), 빌드 중에 사용 된 범위 (제공된 범위 사용)를 나타냅니다.

<profiles> 
    <profile> 
     <id>default-without-spark</id> 
     <activation> 
      <activeByDefault>true</activeByDefault> 
     </activation> 
     <dependencies> 
      <dependency> 
       <groupId>org.apache.spark</groupId> 
       <artifactId>spark-core_2.11</artifactId> 
       <scope>provided</scope> 
      </dependency> 
     </dependencies> 
    </profile> 
    <profile> 
     <id>dev</id> 
     <dependencies> 
      <dependency> 
       <groupId>org.apache.spark</groupId> 
       <artifactId>spark-core_2.11</artifactId> 
      </dependency> 
     </dependencies> 
    </profile> 
</profiles> 

당신은 @maasg 솔루션의 단점없이 당신이 원하는 것을 얻을 수 있습니다

관련 문제