복붙노트

[HADOOP] 모 놀리 식 항아리 만드는 법. 파일?

HADOOP

모 놀리 식 항아리 만드는 법. 파일?

mahout과 다른 라이브러리를 사용하는 hadoop 작업 jar 파일을 만들어야합니다. 나는 모든 jar 파일을 필요로하지 않고 작업을 수행 할 수 있어야한다. 어떻게 할 수 있습니까?

해결법

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

    1.참조 된 모든 클래스를 빌드 디렉토리에 복사하도록 빌드 파일을 구성하십시오. 예를 들어, 개미 :

    참조 된 모든 클래스를 빌드 디렉토리에 복사하도록 빌드 파일을 구성하십시오. 예를 들어, 개미 :

        <path id="classpathunjar">
            <fileset dir="${lib.dir}" includes="*.jar" excludes="sqljdbc4.jar"/>
        </path>
    
    
        <target name="compile" depends="clean">
            ...
            <unjar dest="${build.dir}">
                <path refid="classpathunjar" />
            </unjar>
            ...
       </target>
    

    그러나 이것을하지 않고 관리 할 수 ​​있다면 더 좋습니다. hadoop 클러스터에서 mapreduce 작업을 실행하는 경우 libjars 기능을 사용하여 모든 노드에 jar를로드하십시오.

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

    2.Hadoop에는 jars-in-jar를 읽을 수있는 기능이 있습니다. Ant 스크립트를 수정하여 lib라는 폴더에 모든 종속성 jar를 포함시키고이 lib 폴더를 출력 Jar에 추가하십시오. jar 빌드 시간이 줄어들어 더 큰 jar 수가 많으면 더 나은 선택이 될 수 있습니다.

    Hadoop에는 jars-in-jar를 읽을 수있는 기능이 있습니다. Ant 스크립트를 수정하여 lib라는 폴더에 모든 종속성 jar를 포함시키고이 lib 폴더를 출력 Jar에 추가하십시오. jar 빌드 시간이 줄어들어 더 큰 jar 수가 많으면 더 나은 선택이 될 수 있습니다.

    hadoop과 함께 써드 파티 라이브러리를 사용할 때 가질 수있는 여러 가지 옵션에 대한이 기사를 참조하십시오.

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

    3.Jar는 단지 Zip 컨테이너 일뿐입니다.

    Jar는 단지 Zip 컨테이너 일뿐입니다.

    필요한 클래스를 사용하여 Jar 파일을 수동으로 압축을 풀고 수정하거나 Maven 빌드 시스템의 jar-with-dependencies 설명자를 사용할 수 있습니다.

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

    4.일반적으로 JAR 파일에는 특정 위치에 있어야하는 자원이 있으므로 충돌 할 수도 있지만 필요한 두 가지 자원으로 인해 조합이 방해받을 수 있습니다 (Think META-INF / MANIFEST.MF).

    일반적으로 JAR 파일에는 특정 위치에 있어야하는 자원이 있으므로 충돌 할 수도 있지만 필요한 두 가지 자원으로 인해 조합이 방해받을 수 있습니다 (Think META-INF / MANIFEST.MF).

    그러나 많은 경우에 매우 쉽습니다. 기본적으로 추가 할 JAR 파일 (zip 파일 형식)의 압축을 풀고 클래스와 무언가를 기존 JAR 파일에 "추가"합니다.

    실행 가능한 JAR 파일을 만드는 경우 시작하는 MANIFEST.MF에 ClassPath 항목을 추가하고 추가 된 ClassPath 항목과 호환되는 디렉토리 구조에 두 개의 JAR 파일을 모두 제공하는 것이 더 좋습니다.

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

    5.추가 jar는 lib / 서브 디렉토리 (예, jar 파일 내의 jar) 아래에 놓아야합니다. 나는 다른 곳에서 찾은 다음 메이븐 어셈블리를 사용한다.

    추가 jar는 lib / 서브 디렉토리 (예, jar 파일 내의 jar) 아래에 놓아야합니다. 나는 다른 곳에서 찾은 다음 메이븐 어셈블리를 사용한다.

    <assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
      <id>job</id>
      <formats>
        <format>jar</format>
      </formats>
      <includeBaseDirectory>false</includeBaseDirectory>
      <dependencySets>
        <dependencySet>
          <unpack>false</unpack>
          <scope>runtime</scope>
          <outputDirectory>lib</outputDirectory>
          <excludes>
            <exclude>org.apache.hadoop:hadoop-core</exclude>
            <exclude>${artifact.groupId}:${artifact.artifactId}</exclude>
          </excludes>
        </dependencySet>
        <dependencySet>
          <unpack>false</unpack>
          <scope>system</scope>
          <outputDirectory>lib</outputDirectory>
          <excludes>
            <exclude>${artifact.groupId}:${artifact.artifactId}</exclude>
          </excludes>
        </dependencySet>
      </dependencySets>
      <fileSets>
        <fileSet>
          <directory>${basedir}/target/classes</directory>
          <outputDirectory>/</outputDirectory> 
          <excludes>
            <exclude>*.jar</exclude>
          </excludes>
        </fileSet>
      </fileSets>
    </assembly>
    
  6. from https://stackoverflow.com/questions/9829477/how-to-make-a-monolithic-jar-file by cc-by-sa and MIT license