尝试使用scala应用程序访问s3存储桶

时间:2016-09-29 05:18:34

标签: java scala maven apache-spark amazon-s3

我想使用scala应用程序访问amazon s3存储桶。我在日食中设置了scala IDE。但是,当我尝试在我的本地(运行方式 - > Scala应用程序)上运行>应用程序时,它在控制台上给出以下>错误。错误:无法找到或加载主类org.test.spark1.test我试图运行一个简单的wordcount应用程序,我在其中访问存储在我的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")
}}      

1 个答案:

答案 0 :(得分:0)

我遇到的一个可能的解决方案是Scala IDE不会自动检测您的主类:

  1. 转到菜单 - > "运行" - > "运行配置"
  2. 点击" Scala应用程序"并在"新启动配置"的图标上;
  3. 对于项目选择您的项目和主类(由于某种原因未自动检测)手动输入(在您的情况下)org.test.spark1.test
  4. 申请并运行
  5. 您可以尝试使用spark-submit在没有eclipse的情况下在本地运行Spark作业。

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

    另外,您不应该硬编码您的AWS凭据。我建议你使用InstanceProfileCredentialsProvider。此凭据存在于与EC2实例的IAM角色关联的实例元数据中。