Amazon EMR does not currently support use of the Apache Hadoop S3A file system, The s3a:// URI is not compatible with Amazon EMR说:我和Spark一起开发了Amazon EMR,基于亚马逊(https://aws.amazon.com/premiumsupport/knowledge-center/emr-file-system-s3/)的这篇文档。
但是,我可以使用"s3a://“在spark作业中进行读写,而不会出现问题。(注意:我使用的是"com.amazonaws" % "aws-java-sdk-s3" % "1.11.286",EMR版本是emr-5.11.0)。我做了一些搜索,但仍然发现自己对当前建议与EMR一起使用的文件系统感到困惑。
任何帮助都将不胜感激。
发布于 2018-07-31 05:00:33
编辑:忘记说明这一点,但这是使用Spark版本2.3.0构建的。
AWS EMR有三个可用于Spark s3a、s3e和s3的策略。s3a和s3e是相对较旧的策略,用于连接到可以在亚马逊网络服务内外使用的环境。然而,s3是专门为连接到s3的AWS EMR构建的策略。通过测试,我发现使用s3策略的读写速度更快,而且与其他策略不同的是,您不需要传递用户/密码/密钥/库。唯一需要的是,当spark shell处于活动状态时,VPC或其他环境中的用户可以访问存储桶和spark。下面是使用S3进行读写的方法:
spark-shell
///In this case I am reading a csv from a bucket called myBucket into the environment
val inputDF = spark.read.format("csv").option("header","true").load("s3://myBucket/fooBar.csv")
///I am then writing that file back out using the s3 policy back to the environment
inputDF.write.format("csv").save("s3://myBucket/ODS/")从spark读取加载时,你会看到最大的问题是partitions,这意味着在读取之前,Spark决定在object元素上拥有多少部分文件。如果您希望提高读写速度,则可能需要考虑实现重新分区策略。
导入org.apache.spark.util.SizeEstimator
val inputDF2 : Long = SizeEstimator.estimate(inputDF.rdd)
//find its appropiate number of partitions
val numPartitions : Long = (inputDF2/134217728) + 1
//write it out with that many partitions
val outputDF = inputDF.repartition(numPartitions.toInt)发布于 2019-11-13 02:22:42
"s3a“是Apache Hadoop的一部分,因此在电子病历中仍然可用。
电子病历中推荐的s3客户端是EMRFS,因此您仍然可以使用s3a (Apache Hadoop)或s3/s3n (EMRFS)。最后一种有它自己的优势,比如一致的观点。
https://stackoverflow.com/questions/51600859
复制相似问题