2016-09-29 8 views
0

スカラアプリケーションを使用してamazon s3バケットにアクセスしたいとします。私はEclipseの中でスケーラIDEをセットアップしました。しかし、ローカル(Run As - > Scala Application)で>アプリケーションを実行しようとすると、コンソール上で次のようなエラーが発生します。エラー:メインクラスorg.test.spark1.testを見つけることができませんでした。私はS3バケットに格納されているファイルにアクセスして別のファイルに結果を格納している単純なワードカウントアプリケーションを実行しようとしていました。何が問題なのか理解してください。スカラアプリケーションを使用してs3バケットにアクセスしようとしています

注:私はeclipse mavenプロジェクトを使用しています。私のScalaアプリケーションのコードです:私が出会った

package org.test.spark1 
import com.amazonaws._ 
import com.amazonaws.auth._ 
import org.apache.spark.SparkConf 
import org.apache.spark.SparkContext 
import com.amazonaws.services.s3._ 
import com.amazonaws.services.s3.model.GetObjectRequest 
import java.io.File; 
object test extends App { 
def main(args: Array[String]) { 
val myAccessKey = "here is my key" 
val mySecretKey = "here is my secret key" 
val bucket = "nlp.spark.apps" 
val conf = new SparkConf().setAppName("sample") 
val sc = new SparkContext(conf) 
val yourAWSCredentials = new BasicAWSCredentials(myAccessKey, mySecretKey) 
val amazonS3Client = new AmazonS3Client(yourAWSCredentials) 
// This will create a bucket for storage 
amazonS3Client.createBucket("nlp-spark-apps2") 
val s3data = sc.textFile("here is my url of text file") 
s3data.flatMap(line => 
    line.split(" ")) 
    .map(word => 
    (word, 1)) 
    .reduceByKey(_ * _) 
    .saveAsTextFile("/home/hadoop/cluster-code2.txt") 
}}  
+0

'test extends App'と' main'メソッドの両方の必要はありません。いずれかを選択します。 –

+0

コードからアプリを削除しましたが、まだエラーがあります –

答えて

0

可能な解決策は、ScalaのIDEが自動的にあなたのメインクラス検出されないということです:メニューに

  1. ゴー - >「ファイル名を指定して実行」 - > "実行コンフィギュレーション"
  2. "Scala application"と "New launch configuration"のアイコンをクリック
  3. プロジェクトのプロジェクトとメインクラス(何らかの理由で自動検出されません)を手動で入力してくださいあなたの場合)org.test.spark1.test
  4. が適用され、ファイル名を指定して実行

OR

あなたが火花提出を使って日食せずにローカルでスパークジョブを実行しようとすることができます。

spark-submit --class org.test.spark1.test --master local[8] {path to assembly jar} 

もう1つのことは、決してAWS資格情報をハードコードするべきではありません。 InstanceProfileCredentialsProviderを使用することをお勧めします。この資格情報は、EC2インスタンスのIAMロールに関連付けられたインスタンスメタデータに存在します。

関連する問題