2016-06-20 10 views
1

まだmavenに精通し、ソースコードをspark-submit用のjarファイルにコンパイルしようとしています。私はIntelliJの使い方を知っていますが、これが実際にどのように機能するかを理解したいと思います。私はsparkやscalaのような最新のソフトウェアをすべてインストールしたEC2サーバを持っていて、今はmavenでコンパイルしたいSparkPi.scalaソースコードのサンプルを持っています。私のばかげた質問は第一に、mavenリポジトリから依存関係を取得するのではなく、コードを構築するために私のインストールしたソフトウェアを使うことができますか、そして、適切な要件を追加するための基本的なpom.xmlテンプレートから始めるにはどうすればいいですか?私は、Mavenが正確に何をしているのかを完全に理解していません。私のソースコードのコンパイルをテストするにはどうしたらいいですか? 私はそれを理解しているので、標準のディレクトリ構造src/main/scalaを持っていて、mvn packageを実行したいだけです。また、私はsbtではなくmavenでテストしたいと思います。インストール済みのsparkとmavenを使用してSpark Scalaプログラムをjarファイルにコンパイル

+0

あなたが達成しようとしているものによって異なります。ローカルマシンでサンプルを実行するか、クラスタ上でサンプルを実行します。 –

+0

EC2のスパーククラスタで例を実行しようとしています。私はIntelliJでローカルにコンパイルする方法を知っていますが、サーバー上でソースコードをコンパイルする正しい方法は何ですか。 – horatio1701d

答えて

1

追加以下の手順に従ってpom.xmlmvn clean packageを使用してください。 pom.xmlbuildと表示されていることを確認してfat-jarにしてください。詳細については

<build><sourceDirectory>src</sourceDirectory> 
     <plugins><plugin> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>3.0</version> 
      <configuration> 
       <source>1.7</source> 
       <target>1.7</target> 
      </configuration> 
     </plugin> 
      <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <version>2.4</version> 
      <configuration> 
       <descriptorRefs> 
        <descriptorRef>jar-with-dependencies</descriptorRef> 
       </descriptorRefs> 
      </configuration> 
      <executions> 
       <execution> 
        <id>assemble-all</id> 
        <phase>package</phase> 
        <goals> 
         <goal>single</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin></plugins> 
    </build> 

(これは私が瓶を作ってるんだか、私の場合です):あなたはsbt projectを持っている場合はlinkfat-jarを作るためにsbt clean assemblyを使用しています。そのために、あなたはまた、のようなplugin.sbtbuild.sbt

assemblyJarName := "WordCountSimple.jar" 
// 
val meta = """META.INF(.)*""".r 

assemblyMergeStrategy in assembly := { 
    case PathList("javax", "servlet", [email protected]_*) => MergeStrategy.first 
    case PathList([email protected]_*) if ps.last endsWith ".html" => MergeStrategy.first 
    case n if n.startsWith("reference.conf") => MergeStrategy.concat 
    case n if n.endsWith(".conf") => MergeStrategy.concat 
    case meta(_) => MergeStrategy.discard 
    case x => MergeStrategy.first 
} 

の例として、以下の設定が必要になります。もっとthisthisを参照してください

addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.13.0") 

について。

ここまでの目標は、ターゲットフォルダ内のすべての依存関係でfat-jarを取得することです。このように、クラスタで実行するには、そのjarファイルを使用します。

[email protected]:/usr/local/spark$ ./bin/spark-submit --class com.hastimal.wordcount --master yarn-cluster --num-executors 15 --executor-memory 52g --executor-cores 7 --driver-memory 52g --driver-cores 7 --conf spark.default.parallelism=105 --conf spark.driver.maxResultSize=4g --conf spark.network.timeout=300 --conf spark.yarn.executor.memoryOverhead=4608 --conf spark.yarn.driver.memoryOverhead=4608 --conf spark.akka.frameSize=1200 --conf spark.io.compression.codec=lz4 --conf spark.rdd.compress=true --conf spark.broadcast.compress=true --conf spark.shuffle.spill.compress=true --conf spark.shuffle.compress=true --conf spark.shuffle.manager=sort /users/hastimal/wordcount.jar inputRDF/data_all.txt /output 

は、ここで私が inputRDF/data_all.txt /output二つの引数を持っています。また、ツールの観点から私はIDEとして Intellijにビルドしています。

+0

ありがとうございます。基本的に私はそれを理解しています。 pom.xmlにsparkやscalaの依存関係を含める必要はありませんか?私がpom.xmlの中のすべてのソフトウェアの依存関係を、あなたが示したように放置するのを見かける理由を理解したいのですが。 IntelliJでコードを作成するときは、単にsparkとscalaをモジュールとして追加し、基本的なmavenビルドを実行してspark-submit用のfat-jarを作成するだけですか? – horatio1701d

+0

@ prometheus2305あなたの質問への簡単な答え:1.はい、 'build.sbt'または' pom.xml'にAppに必要なすべての依存関係が必要です。 2.私はScala-SBTプロジェクトを作ってから、 'build.sbt'と' plugin.sbt'に物を追加しています。それが私の知識のための最も簡単な方法です。上記のリンクを使用してください。 – ChikuMiku

+0

まだ少し混乱しています。既にsparkを持っている独立したリモートクラスタ上でspark-submitを実行するためにプロジェクトをjarにパッケージ化する必要があるのであれば、pom.xmlにsparkとscalaを明示的に追加する必要があります。コンパイルとjarファイルの作成に必要な最小限のmavenが必要ですか? – horatio1701d

0

あなたはmvn projectを持っている場合は、@Krishna、 へ

# create assembly jar upon code change 
sbt assembly 

# transfer the jar to a cluster 
scp target/scala-2.10/myproject-version-assembly.jar <some location in your cluster> 

# fire spark-submit on your cluster 
$SPARK_HOME/bin/spark-submit --class not.memorable.package.applicaiton.class --master yarn --num-executor 10 \ 
    --conf some.crazy.config=xyz --executor-memory=lotsG \ 
    myproject-version-assembly.jar \ 
    <glorious-application-arguments...> 
関連する問題