尝试使用本地spark从s3读取和写入镶木地板文件

时间:2017-12-05 11:16:06

标签: scala apache-spark amazon-s3 spark-dataframe

我正在尝试使用spark从本地计算机读取和写入镶木地板文件到S3。但我似乎无法正确配置我的spark会话。显然有一些配置要做,但我找不到如何做的明确参考。

目前我的火花会议读取当地的镶木地板嘲笑,并定义如下:

val sparkSession = SparkSession.builder.master("local").appName("spark session example").getOrCreate()

2 个答案:

答案 0 :(得分:3)

我将不得不稍微纠正himanshuIIITian的帖子,(对不起)。

  1. 使用s3a连接器,而不是旧的,过时的,未维护的s3n。 S3A是:更快,适用于较新的S3集群(首尔,法兰克福,伦敦......),规模更大。 S3N具有基本的性能问题,只有通过完全删除该连接器才能在最新版本的Hadoop中修复。继续前进。

  2. 您不能安全地使用s3作为Spark查询的直接目标。而不是使用当前可用的经典“FileSystem”提交程序。写入本地文件://然后使用AWS CLI界面复制数据。您将获得更好的性能以及通常期望从IO

  3. 获得可靠写入的保证

答案 1 :(得分:2)

要使用本地Spark从S3读取和编写镶木地板文件,您需要在sbt项目中添加以下2个依赖项 -

"com.amazonaws" % "aws-java-sdk" % "1.7.4"
"org.apache.hadoop" % "hadoop-aws" % "2.7.3"

我假设它是一个sbt项目。如果其mvn然后添加以下依赖项 -

<dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-java-sdk</artifactId>
    <version>1.7.4</version>
</dependency>

<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-aws</artifactId>
    <version>2.7.3</version>
</dependency>

然后您需要在sparkSession中设置S3凭据,如下所示 -

val sparkSession = SparkSession.builder.master("local").appName("spark session example").getOrCreate()
sparkSession.sparkContext.hadoopConfiguration.set("fs.s3n.impl", "org.apache.hadoop.fs.s3native.NativeS3FileSystem")
sparkSession.sparkContext.hadoopConfiguration.set("fs.s3n.awsAccessKeyId", "s3AccessKey")
sparkSession.sparkContext.hadoopConfiguration.set("fs.s3n.awsSecretAccessKey", "s3SecretKey")

完成了。现在,您可以将Parquet文件读/写到S3。例如:

sparkSession.read.parquet("s3n://bucket/abc.parquet")    //Read
df.write.parquet("s3n://bucket/xyz.parquet")    //Write

我希望它有所帮助!