Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hadoop s3上的Spark数据集拼花地板分区创建临时文件夹_Hadoop_Apache Spark_Amazon S3_Spark Dataframe_Apache Spark Dataset - Fatal编程技术网

Hadoop s3上的Spark数据集拼花地板分区创建临时文件夹

Hadoop s3上的Spark数据集拼花地板分区创建临时文件夹,hadoop,apache-spark,amazon-s3,spark-dataframe,apache-spark-dataset,Hadoop,Apache Spark,Amazon S3,Spark Dataframe,Apache Spark Dataset,Spark(版本=2.2.0)没有DirectParquetOutputCommitter。作为替代,我可以使用 dataset .option("mapreduce.fileoutputcommitter.algorithm.version", "2")//magic here .parquet("s3a://...") 为了避免在S3上创建\u临时的文件夹 在我将partitionBy设置到数据集之前,一切都正常 dataset .partitionBy("a",

Spark
(版本=2.2.0)
没有DirectParquetOutputCommitter。作为替代,我可以使用

dataset
    .option("mapreduce.fileoutputcommitter.algorithm.version", "2")//magic here
    .parquet("s3a://...")
为了避免在
S3
上创建
\u临时的
文件夹

在我将
partitionBy
设置到数据集之前,一切都正常

dataset
    .partitionBy("a", "b")
    .option("mapreduce.fileoutputcommitter.algorithm.version", "2")//magic stop working creating _temporary on S3
    .parquet("s3a://...")
也尝试添加,但没有成功

spark.conf.set("mapreduce.fileoutputcommitter.algorithm.version", "2")
使用Spark Dataset上的
partitionBy
,它将创建
\u临时文件
,并移动文件,这将是一个非常缓慢的操作

是否有任何替代配置或缺少配置?

替代配置(按推荐+易用-顶部为最佳顺序):

  • 使用Netflix的S3Committer:
  • 写入HDFS,然后复制到S3(例如通过s3distcp)
  • 不要使用partitionBy,而是迭代所有分区排列,并将结果动态写入每个分区目录
  • 编写自定义文件提交程序

  • Hadoop 3.1的s3a将内置一个零重命名提交器(va Hadoop-13786)。在此之前,你可以利用它的前身


    请注意,“算法2”并不是消除_tempdir的神奇步骤,只是在单个任务提交时将任务输出直接重命名为目标。如果目录列表中存在延迟一致性,并且仍然是O(数据),则仍然容易出错。您无法安全地将v1或v2提交程序直接与S3一起使用,而不是与Hadoop 2.x中提供的S3A连接器一起使用。嗯,我想避免从Scala代码调用Bash命令完全理解,那么使用s3distcp的#1就不存在了#2是最好的选择,除非您想通过使用spark以BLOB/bytes的形式读写s3来达到黑客目的。我已经有一段时间没有玩过使用Algo2分区的s3提交了,特别是以一种无菌的(非专有的云优化)方式。你可以在spark中重新实现基本的distcp,不用花太多力气:是的,S3Committer!