--- title: "Spark Scala Job の提出" slug: "hadoop-vpc-16" updated: 2026-09-17T09:25:51Z published: 2026-09-17T09:25:51Z canonical: "guide.ncloud-docs.com/hadoop-vpc-16" stale: true --- > ## Documentation Index > Fetch the complete documentation index at: https://guide.ncloud-docs.com/llms.txt > Use this file to discover all available pages before exploring further. # Spark Scala Job の提出 VPC環境で利用できます。 本ガイドでは、Spark Scala Jobを作成した後、Cloud Hadoopクラスタに提出する方法について説明します。 ## Scalaコードの作成とコンパイル Scalaで Sparkアプリケーションを作成し、jarファイルとしてパッケージ化する方法には、以下のような2つの方法があります。 1. [ターミナルで Scalaを使用する](/docs/ja/hadoop-vpc-16#1-%ED%84%B0%EB%AF%B8%EB%84%90%EC%97%90%EC%84%9C-scala-%EC%82%AC%EC%9A%A9) 2. [IntelliJ SBTプラグインを使用する](/docs/ja/hadoop-vpc-16#2-intellij-sbt-%ED%94%8C%EB%9F%AC%EA%B7%B8%EC%9D%B8-%EC%82%AC%EC%9A%A9) ### 1.ターミナルで Scalaを使用する ターミナルで `HelloScala`を出力する Scalaコードを作成し、コンパイルして jarファイルにパッケージ化する例を挙げて説明します。 #### Scalaバイナリファイルのダウンロード [Scalaバイナリ](https://www.scala-lang.org/download/)をダウンロードして圧縮を解凍します。 MacOSで Homebrewを使用している場合は、以下のようにインストールできます。 ``` brew install scala ``` #### 環境変数設定 次のコマンドを使用して、実行ファイル(例: `.bashrc`)に `SCALA_HOME` 環境変数を設定し、`PATH`に `$SCALA_HOME`を追加します。 ``` export SCALA_HOME=/usr/local/share/scala export PATH=$PATH:$SCALA_HOME/ ``` #### Sparkアプリケーション作成 Sparkアプリケーションを作成する方法は、次の通りです。 1. scala REPLを実行して、`scala`を実行します。 ``` ❯ scala # Welcome to Scala version ... # Type in expressions to have them evaluated. # Type :help for more information. # scala> ``` 1. 次のように HelloWorld.scala classを作成して保存します。 ``` object HelloWorld { def main(args: Array[String]): Unit = { println("Hello, world!") } } ``` ``` scala> :save HelloWorld.scala scala> :q ``` 1. 以下のコマンドを使用して `scalac`にコンパイルします。 ``` ❯ scalac HelloWorld.scala ``` 1. `ls` コマンドを使用して、正常にコンパイルされたかを.classファイルで確認します。 ``` ❯ ls HelloWorld*.class HelloWorld$.class HelloWorld.class ``` #### jarファイル作成 jarファイルを作成する方法は、次の通りです。 参考 jarコマンドを実行するには、Java SE、JREがインストールされている必要があります。 1. HelloWorld*.classファイルがあるディレクトリに移動した後、次のコマンドを使用してクラスファイルを jarファイルにパッケージ化します。 ``` ❯ jar cvfe HelloWorld.jar HelloWorld HelloWorld*.class added manifest adding: HelloWorld$.class(in = 670) (out= 432)(deflated 35%) adding: HelloWorld.class(in = 645) (out= 524)(deflated 18%) ``` 1. パッケージ化された jarファイル内で、HelloWorld classがアプリケーションの entry pointとして設定されているかを MANIFEST.MFで確認します。 ``` ❯ unzip -q -c HelloWorld.jar META-INF/MANIFEST.MF Manifest-Version: 1.0 Created-By: 1.8.0_181 (Oracle Corporation) Main-Class: HelloWorld # entry point ``` ### 2.IntelliJ SBTプラグインを使用する 本ガイドでは、Sparkアプリケーションの開発およびデバッグを行うための環境を IntelliJに設定し、Hello Scalaという WordCount Jobを構築する方法を例に挙げて説明します。 - ビルドマネージャ: SBT - 作成環境の例: Windows OS、IntelliJ Ultimate 2022.1.4 #### プロジェクト作成 プロジェクトを作成する方法は、次の通りです。 IntelliJを実行します。 1. 左側の **Plugins**メニューから Scalaを検索してインストールします。 ![chadoop-4-6-002_ko](https://cdn.document360.io/6998976f-9d95-4df8-b847-d375892b92c2/Images/Documentation/chadoop-4-6-002_ja.png?sv=2026-02-06&spr=https&st=2026-10-26T14%3A33%3A27Z&se=2026-10-26T15%3A33%3A27Z&sr=c&sp=r&sig=Lfm%2Fl5attWnyPrhnVe%2Fh7vqg8TBurygCnT7nraD8FfA%3D) 2. プラグインを反映させるには再起動が必要です。**[Restart IDE]** ボタンをクリックして、IntelliJを再起動します。 ![chadoop-4-6-restart_ko](https://cdn.document360.io/6998976f-9d95-4df8-b847-d375892b92c2/Images/Documentation/chadoop-4-6-restart_ja.png?sv=2026-02-06&spr=https&st=2026-10-26T14%3A33%3A27Z&se=2026-10-26T15%3A33%3A27Z&sr=c&sp=r&sig=Lfm%2Fl5attWnyPrhnVe%2Fh7vqg8TBurygCnT7nraD8FfA%3D) 3. ホーム画面左側のメニューから **Projects**をクリックし、**New Project**をクリックします。 ![chadoop-4-6-003_ko](https://cdn.document360.io/6998976f-9d95-4df8-b847-d375892b92c2/Images/Documentation/chadoop-4-6-003_ja.png?sv=2026-02-06&spr=https&st=2026-10-26T14%3A33%3A27Z&se=2026-10-26T15%3A33%3A27Z&sr=c&sp=r&sig=Lfm%2Fl5attWnyPrhnVe%2Fh7vqg8TBurygCnT7nraD8FfA%3D) 4. 次のように **Scala**と **sbt**を選択し、 **[Create]** ボタンをクリックします。 - プロジェクト名: WordCountに指定 - Scalaと sbtのバージョンを選択 ![chadoop-4-6-004_ko](https://cdn.document360.io/6998976f-9d95-4df8-b847-d375892b92c2/Images/Documentation/chadoop-4-6-004_ja.png?sv=2026-02-06&spr=https&st=2026-10-26T14%3A33%3A27Z&se=2026-10-26T15%3A33%3A27Z&sr=c&sp=r&sig=Lfm%2Fl5attWnyPrhnVe%2Fh7vqg8TBurygCnT7nraD8FfA%3D) 5. プロジェクトが正常に作成されたか確認します。 - プロジェクトが作成されると、デフォルトでは次のような構造のディレクトリおよびファイル情報を確認できます。 - **.idea**: IntelliJ構成ファイル - **project**: コンパイルに使用されるファイル - **src**: ソースコード。アプリケーションコードのほとんどは src/mainに配置する必要がある。src/testはテストスクリプトのためのスペース - **target**: プロジェクトをコンパイルするとこの場所に保存 - **build.sbt**: SBT構成ファイル ![chadoop-4-6-006_ko](https://cdn.document360.io/6998976f-9d95-4df8-b847-d375892b92c2/Images/Documentation/chadoop-4-6-006_ja.png?sv=2026-02-06&spr=https&st=2026-10-26T14%3A33%3A27Z&se=2026-10-26T15%3A33%3A27Z&sr=c&sp=r&sig=Lfm%2Fl5attWnyPrhnVe%2Fh7vqg8TBurygCnT7nraD8FfA%3D) #### SBTライブラリのインポート IntelliJが Sparkコードを認識するには、spark-coreライブラリとドキュメントをインポートする必要があります。 参考 - spark-coreライブラリは特定のバージョンの Scalaと互換性があるため、ライブラリをインポートする場合は spark-coreと Scalaのバージョンをそれぞれご確認ください。 1. [mvn repository](https://mvnrepository.com/artifact/org.apache.spark/spark-core)で、spark-coreライブラリと Artifact Idと併せて互換性のある Scalaのバージョンを確認します。 ![chadoop-4-6-008_ko](https://cdn.document360.io/6998976f-9d95-4df8-b847-d375892b92c2/Images/Documentation/chadoop-4-6-008_ja.png?sv=2026-02-06&spr=https&st=2026-10-26T14%3A33%3A27Z&se=2026-10-26T15%3A33%3A27Z&sr=c&sp=r&sig=Lfm%2Fl5attWnyPrhnVe%2Fh7vqg8TBurygCnT7nraD8FfA%3D) 2. **Target > build.sbt**をクリックし、スクリプトウィンドウに以下の内容を追加します。 ``` libraryDependencies += "org.apache.spark" %% "spark-core" % "1.6.0" ``` 1. ライブラリが正常にインポートされたか、Buildコンソールで確認します。 ![chadoop-4-6-007_ko](https://cdn.document360.io/6998976f-9d95-4df8-b847-d375892b92c2/Images/Documentation/chadoop-4-6-007_ja.png?sv=2026-02-06&spr=https&st=2026-10-26T14%3A33%3A27Z&se=2026-10-26T15%3A33%3A27Z&sr=c&sp=r&sig=Lfm%2Fl5attWnyPrhnVe%2Fh7vqg8TBurygCnT7nraD8FfA%3D) 参考 SBTでライブラリをインポートする際は、以下の構文(syntax)を使用してください。 ``` Group Id %% Artifact Id % Revision ``` #### Sparkアプリケーション作成 ここでは、シェイクスピアのソネットのテキストファイル(shakespeare.txt)をデータセットとして使用し、ソネットに含まれる単語を数える WordCountアプリケーションの作成方法を例に挙げて説明します。 1. [shakespeare.txt](https://cdn.document360.io/6998976f-9d95-4df8-b847-d375892b92c2/Images/Documentation/shakespeare.txt?sv=2026-02-06&spr=https&st=2026-10-26T14%3A33%3A27Z&se=2026-10-26T15%3A33%3A27Z&sr=c&sp=r&sig=Lfm%2Fl5attWnyPrhnVe%2Fh7vqg8TBurygCnT7nraD8FfA%3D)をダウンロードして src/main/resourcesに保存します。 - Cloud Hadoopクラスタでこのアプリケーションを実行する際は、S3バケットまたは HDFSにデータセットをアップロードして使用します。 ![chadoop-4-6-009_ko](https://cdn.document360.io/6998976f-9d95-4df8-b847-d375892b92c2/Images/Documentation/chadoop-4-6-009_ja.png?sv=2026-02-06&spr=https&st=2026-10-26T14%3A33%3A27Z&se=2026-10-26T15%3A33%3A27Z&sr=c&sp=r&sig=Lfm%2Fl5attWnyPrhnVe%2Fh7vqg8TBurygCnT7nraD8FfA%3D) 2. **src** > **main**を選択してディレクトリを拡張し、**scala**ディレクトリを右クリックして **New** > **Scala Class**をクリックします。 3. WordCount/src/main/scalaの下位に新しいクラスを作成します。 - Kind: Object ![chadoop-4-6-010_ko](https://cdn.document360.io/6998976f-9d95-4df8-b847-d375892b92c2/Images/Documentation/chadoop-4-6-010_ja.png?sv=2026-02-06&spr=https&st=2026-10-26T14%3A33%3A27Z&se=2026-10-26T15%3A33%3A27Z&sr=c&sp=r&sig=Lfm%2Fl5attWnyPrhnVe%2Fh7vqg8TBurygCnT7nraD8FfA%3D) 4. 正しく設定されているか確認するため、WordCount.scalaに以下のサンプルコードを作成して実行します。 ``` object WordCount { def main(args: Array[String]): Unit = { println("This is WordCount application") } } ``` 1. 結果が正常に出力されているか確認します。 ![chadoop-4-6-011_ko](https://cdn.document360.io/6998976f-9d95-4df8-b847-d375892b92c2/Images/Documentation/chadoop-4-6-011_ja.png?sv=2026-02-06&spr=https&st=2026-10-26T14%3A33%3A27Z&se=2026-10-26T15%3A33%3A27Z&sr=c&sp=r&sig=Lfm%2Fl5attWnyPrhnVe%2Fh7vqg8TBurygCnT7nraD8FfA%3D) 2. WordCount.scalaに適用していたサンプルコードを削除した後、シェイクスピアのソネットのテキストファイルの単語数を数えるコードを以下のように作成します。 ``` import org.apache.spark.{SparkConf, SparkContext} object WordCount { def main(args: Array[String]) : Unit = { //Create a SparkContext to initialize Spark val conf = new SparkConf() conf.setMaster("local") conf.setAppName("Word Count") val sc = new SparkContext(conf) // Load the text into a Spark RDD, which is a distributed representation of each line of text val textFile = sc.textFile("src/main/resources/shakespeare.txt") //word count val counts = textFile.flatMap(line => line.split(" ")) .map(word => (word, 1)) .reduceByKey(_ + _) counts.foreach(println) System.out.println("Total words: " + counts.count()) counts.saveAsTextFile("/tmp/sonnetWordCount") } } ``` 参考 Master URLs Sparkのリリース環境によって、Master URLが異なります。 - Local(pseudo-cluster): `local`、`local[N]`、`local[*]`(使用する thread数に応じて分類、「*」は JVMが使用可能な最大数のプロセッサ分だけ threadsを使用) - Clustered Spark Standalone: `spark://host:port,host1:port1...` Spark on Hadoop YARN: `yarn` Spark on Apache Mesos: `mesos://` 1. WordCount.scalaを実行して出力結果を確認します。 ![chadoop-4-6-012_ko](https://cdn.document360.io/6998976f-9d95-4df8-b847-d375892b92c2/Images/Documentation/chadoop-4-6-012_ja.png?sv=2026-02-06&spr=https&st=2026-10-26T14%3A33%3A27Z&se=2026-10-26T15%3A33%3A27Z&sr=c&sp=r&sig=Lfm%2Fl5attWnyPrhnVe%2Fh7vqg8TBurygCnT7nraD8FfA%3D) #### jarファイル作成 1. Object Storageのバケットにデータセットをアップロードした後、ソースコード内の resourceファイルパスを次のように変更します。 - データセットを HDFSにアップロードして使用する場合は、`s3a://` の代わりに `hdfs://`を使用します。 ``` // FROM conf.setMaster("local") // TO conf.setMaster("yarn-cluster") // FROM val textFile = sc.textFile("src/main/resources/shakespeare.txt") // TO val textFile = sc.textFile("s3a://deepdrive-hue/tmp/shakespeare.txt") // FROM counts.saveAsTextFile("/tmp/sonnetWordCount"); // TO counts.saveAsTextFile("s3a://deepdrive-hue/tmp/sonnetWordCount"); ``` 参考 本ガイドは Spark 1.6を基準としているため、`conf.setMaster()`を `yarn-cluster`に指定する必要があります。Spark 2からは `yarn`で使用可能です。 1. ターミナルコンソールで次のコマンドを使用して、アップデートしたコードを Cloud Hadoopクラスタに提出できるよう、compiled jarとしてパッケージ化します。 - jarファイルには、アプリケーションコードと build.sbtで定義されたすべての dependenciesが含まれています。 - `sbt package` コマンドは `$PROJECT_HOME/target/scala-2.11` の下位に wordcount_2.11-0.1.jarファイルを作成します。 ``` > cd ~/IdeaProjects/WordCount # PROJECT_HOME > sbt package ``` ![chadoop-4-6-terminal_ko](https://cdn.document360.io/6998976f-9d95-4df8-b847-d375892b92c2/Images/Documentation/chadoop-4-6-terminal_ja.png?sv=2026-02-06&spr=https&st=2026-10-26T14%3A33%3A27Z&se=2026-10-26T15%3A33%3A27Z&sr=c&sp=r&sig=Lfm%2Fl5attWnyPrhnVe%2Fh7vqg8TBurygCnT7nraD8FfA%3D) ## Cloud Hadoopクラスタへの Spark Job提出 ローカルで作成した Sparkアプリケーション(.jar)を Cloud Hadoopにリリースして実行する方法について説明します。 ### Object Storageへの jarsアップロード Hueの S3ブラウザまたは Object Storageコンソールを使用して、shakespeare.txtと jarを Object Storageバケットにコピーします。 - Hueへのアクセスおよび使用方法の詳細は、[Hue を使用する](/docs/ja/hadoop-vpc-18)ガイドをご参照ください。 - Object Storageバケットに関する詳細は、[Object Storage の概要](/docs/ja/storage-storage-6-1)ガイドをご参照ください。 ![chadoop-4-6-013_ko](https://cdn.document360.io/6998976f-9d95-4df8-b847-d375892b92c2/Images/Documentation/chadoop-4-6-013_ja.png?sv=2026-02-06&spr=https&st=2026-10-26T14%3A33%3A27Z&se=2026-10-26T15%3A33%3A27Z&sr=c&sp=r&sig=Lfm%2Fl5attWnyPrhnVe%2Fh7vqg8TBurygCnT7nraD8FfA%3D) ### Job提出 jarファイルをクラスタに提出する2つの方法について説明します。 参考 spark-defaults.confに、以下のような propertyが正しく設定されている必要があります。 ``` spark.hadoop.fs.s3a.access.key spark.hadoop.fs.s3a.endpoint kr.objectstorage.ncloud.com spark.hadoop.fs.s3a.secret.key ``` - Hueでの Spark Submit Jar利用 ![chadoop-4-6-014_ko](https://cdn.document360.io/6998976f-9d95-4df8-b847-d375892b92c2/Images/Documentation/chadoop-4-6-014_ja.png?sv=2026-02-06&spr=https&st=2026-10-26T14%3A33%3A27Z&se=2026-10-26T15%3A33%3A27Z&sr=c&sp=r&sig=Lfm%2Fl5attWnyPrhnVe%2Fh7vqg8TBurygCnT7nraD8FfA%3D) - Sparkクライアントノードからの提出 1. Sparkクライアントがインストールされているクラスタノードで、次のように `spark-submit` コマンドを実行します。 ``` spark-submit --class WordCount --master yarn-cluster --deploy-mode cluster s3a://deepdrive-hue/tmp/wordcount_2.11-0.1.jar ``` 1. Jobの実行が完了したら、以下のように結果が指定したバケットパス内に保存されているか確認します。 ![chadoop-4-6-015_ko](https://cdn.document360.io/6998976f-9d95-4df8-b847-d375892b92c2/Images/Documentation/chadoop-4-6-015_ja.png?sv=2026-02-06&spr=https&st=2026-10-26T14%3A33%3A27Z&se=2026-10-26T15%3A33%3A27Z&sr=c&sp=r&sig=Lfm%2Fl5attWnyPrhnVe%2Fh7vqg8TBurygCnT7nraD8FfA%3D) 参考 Deploy modeはリリース環境においてドライバ(SparkContext)が実行される場所によって決まります。モードには以下のようなオプションがあります。 - `client` (デフォルト値): Sparkアプリケーションが実行されているマシン上でドライバが実行 - `cluster`: クラスタ内のランダムなノードでドライバが実行 `spark-submit` コマンドの `--deploy-mode` CLIオプション、または Spark propertyの構成で `spark.submit.deployMode`に変更できます。