--- title: "Spark Scala Job の送信" slug: "hadoop-chadoop-4-5" updated: 2026-09-17T09:25:49Z published: 2026-09-17T09:25:49Z canonical: "guide.ncloud-docs.com/hadoop-chadoop-4-5" 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 の送信 Classic環境で利用できます。 このガイドでは、Spark Scala Jobを作成してCloud Hadoopクラスタに送信する方法について説明します。 ## Scalaコードの作成とコンパイル SparkアプリケーションをScalaで作成してjarにパッケージングする方法は、以下のように2つです。 1. [ターミナルでScalaを使用](/docs/ja/hadoop-chadoop-4-5#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-chadoop-4-5#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_ja.png](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-26T15%3A27%3A09Z&se=2026-10-26T16%3A27%3A09Z&sr=c&sp=r&sig=wYmXN8wZlMRYzTrZLsHc%2Bo%2B0Rba2johN3rCJZ7mQJz8%3D) 2. プラグインを反映するためには、再起動する必要があります。 **[Restart IDE]** ボタンをクリックして、IntelliJを再起動します。 ![chadoop-4-6-restart_ja.png](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-26T15%3A27%3A09Z&se=2026-10-26T16%3A27%3A09Z&sr=c&sp=r&sig=wYmXN8wZlMRYzTrZLsHc%2Bo%2B0Rba2johN3rCJZ7mQJz8%3D) 3. ホーム画面左側のメニューで**Projects**をクリックし、**New Project**をクリックします。 ![chadoop-4-6-003_ja.png](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-26T15%3A27%3A09Z&se=2026-10-26T16%3A27%3A09Z&sr=c&sp=r&sig=wYmXN8wZlMRYzTrZLsHc%2Bo%2B0Rba2johN3rCJZ7mQJz8%3D) 4. 以下のように**Scala**と**SBT**を選択し、 **[Create]** ボタンをクリックします。 - プロジェクト名:`WordCount`に指定 - **Scala**と**SBT**バージョンを選択 ![chadoop-4-6-004_ja.png](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-26T15%3A27%3A09Z&se=2026-10-26T16%3A27%3A09Z&sr=c&sp=r&sig=wYmXN8wZlMRYzTrZLsHc%2Bo%2B0Rba2johN3rCJZ7mQJz8%3D) 5. プロジェクトが正常に作成されたか確認します。 - プロジェクトが作成されると、基本的に以下のような構造を持つディレクトリとファイル情報が確認できます。 - **.idea**:IntelliJの構成ファイル - **project**:コンパイルに用いられるファイル - **src**:ソースコード。 アプリケーションコードの大半は`src/main`に位置する必要がある。 `src/test`はテストスクリプト用のスペース。 - **target**:プロジェクトをコンパイルすると、この場所に保存 - **build.sbt**:SBTの構成ファイル ![chadoop-4-6-006_ja.png](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-26T15%3A27%3A09Z&se=2026-10-26T16%3A27%3A09Z&sr=c&sp=r&sig=wYmXN8wZlMRYzTrZLsHc%2Bo%2B0Rba2johN3rCJZ7mQJz8%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_ja.png](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-26T15%3A27%3A09Z&se=2026-10-26T16%3A27%3A09Z&sr=c&sp=r&sig=wYmXN8wZlMRYzTrZLsHc%2Bo%2B0Rba2johN3rCJZ7mQJz8%3D) 2. **Target > build.sbt**をクリックし、スクリプト画面に以下のような内容を追加します。 ``` libraryDependencies += "org.apache.spark" %% "spark-core" % "1.6.0" ``` 1. ライブラリが正常にインポートされたのか、Buildコンソールで確認します。 ![chadoop-4-6-007_ja.png](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-26T15%3A27%3A09Z&se=2026-10-26T16%3A27%3A09Z&sr=c&sp=r&sig=wYmXN8wZlMRYzTrZLsHc%2Bo%2B0Rba2johN3rCJZ7mQJz8%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-26T15%3A27%3A09Z&se=2026-10-26T16%3A27%3A09Z&sr=c&sp=r&sig=wYmXN8wZlMRYzTrZLsHc%2Bo%2B0Rba2johN3rCJZ7mQJz8%3D)をダウンロードして`src/main/resources`に保存します。 - Cloud Hadoopクラスタでこのアプリケーションを実行する際には、S3バケットまたはHDFSにデータセットをアップロードして使用します。 ![chadoop-4-6-009_ja.png](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-26T15%3A27%3A09Z&se=2026-10-26T16%3A27%3A09Z&sr=c&sp=r&sig=wYmXN8wZlMRYzTrZLsHc%2Bo%2B0Rba2johN3rCJZ7mQJz8%3D) 2. `src > main`を選択してディレクトリを拡張し、`scala`ディレクトリをマウス右クリックして**New > Scala Class**をクリックします。 3. `WordCount/src/main/scala`の下に新しいクラスを作成します。 - **Kind**: `Object` ![chadoop-4-6-010_ja.png](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-26T15%3A27%3A09Z&se=2026-10-26T16%3A27%3A09Z&sr=c&sp=r&sig=wYmXN8wZlMRYzTrZLsHc%2Bo%2B0Rba2johN3rCJZ7mQJz8%3D) 4. 正常に設定されたのか確認するには、`WordCount.scala`に以下のサンプルコードを作成して実行します。 ``` object WordCount { def main(args: Array[String]): Unit = { println("This is WordCount application") } } ``` 1. 以下のように正常に出力されたか確認します。 ![chadoop-4-6-011_ja.png](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-26T15%3A27%3A09Z&se=2026-10-26T16%3A27%3A09Z&sr=c&sp=r&sig=wYmXN8wZlMRYzTrZLsHc%2Bo%2B0Rba2johN3rCJZ7mQJz8%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で使用できる最大限のプロセッサの分だけのスレッドを使用) - **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_ja.png](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-26T15%3A27%3A09Z&se=2026-10-26T16%3A27%3A09Z&sr=c&sp=r&sig=wYmXN8wZlMRYzTrZLsHc%2Bo%2B0Rba2johN3rCJZ7mQJz8%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_ja.png](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-26T15%3A27%3A09Z&se=2026-10-26T16%3A27%3A09Z&sr=c&sp=r&sig=wYmXN8wZlMRYzTrZLsHc%2Bo%2B0Rba2johN3rCJZ7mQJz8%3D) ## Cloud HadoopクラスタにSpark Jobを送信 ローカルで作成したSparkアプリケーション(.jar)をCloud Hadoopに配布して送信する方法を説明します。 #### Object Storageにjarをアップロード 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_ja.png](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-26T15%3A27%3A09Z&se=2026-10-26T16%3A27%3A09Z&sr=c&sp=r&sig=wYmXN8wZlMRYzTrZLsHc%2Bo%2B0Rba2johN3rCJZ7mQJz8%3D) #### Jobの送信 JARファイルをクラスタに送信する2つの方法について説明します。 参考 以下のようなpropertyが`spark-defaults.conf`に正しく設定されている必要があります。 ``` spark.hadoop.fs.s3a.access.key= spark.hadoop.fs.s3a.endpoint=http://kr.objectstorage.ncloud.com spark.hadoop.fs.s3a.secret.key= spark.hadoop.fs.s3a.impl=org.apache.hadoop.fs.s3a.S3AFileSystem ``` - HUEの**Spark Submit Jar**を利用 ![chadoop-4-6-014_ja.png](https://cdn.document360.io/6998976f-9d95-4df8-b847-d375892b92c2/Images/Documentation/chadoop-4-6-014-vpc_ja.png?sv=2026-02-06&spr=https&st=2026-10-26T15%3A27%3A09Z&se=2026-10-26T16%3A27%3A09Z&sr=c&sp=r&sig=wYmXN8wZlMRYzTrZLsHc%2Bo%2B0Rba2johN3rCJZ7mQJz8%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-vpc_ja.png](https://cdn.document360.io/6998976f-9d95-4df8-b847-d375892b92c2/Images/Documentation/chadoop-4-6-015-vpc_ja.png?sv=2026-02-06&spr=https&st=2026-10-26T15%3A27%3A09Z&se=2026-10-26T16%3A27%3A09Z&sr=c&sp=r&sig=wYmXN8wZlMRYzTrZLsHc%2Bo%2B0Rba2johN3rCJZ7mQJz8%3D) 参考 **Deploy mode**は、配布環境でドライバー(SparkContext)が実行される場所によって決まります。 モードには、以下のようなオプションがあります。 - `client`(デフォルト値):Sparkアプリケーションが実行されるマシンでドライバーが実行される - `cluster`:クラスタ内のランダムなノードでドライバーが実行される `spark-submit`コマンドの`--deploy-mode` CLIオプション、またはSpark property構成で`spark.submit.deployMode`に変更できます。