限制Spark往HDFS写出数据时,生成_SUCCESS文件

用 Hive 生成数据的时候,是没有 _SUCCESS 文件的。

但是我们在跑完 MR 或者 Spark 程序时,会发现数据输出目录一般都会有一个 _SUCCESS 的空文件。这个 _SUCCESS 空文件用来表示该任务运行成功。

举个例子,比如我们有两个 Spark 任务:A 任务和 B 任务。B 任务依赖于 A 任务,也就是说 B 任务要根据 A 任务的结果再判断是否运行。这时我们就可以根据 A 任务的输出目录下是否有 _SUCCESS 文件来判断 A 任务是否运行成功。

但是在用 DataX 读取 HDFS 中的数据时,有 _SUCCESS 文件会使任务报错,因此可以在 Spark 代码中加以限制,不生成 _SUCCESS 文件即可。

在 Spark 的 Driver 端参数里加上如下参数即可。

sc.hadoopConfiguration.set("mapreduce.fileoutputcommitter.marksuccessfuljobs", "false")

或者在 Spark SQL 中设置如下参数:

set mapreduce.fileoutputcommitter.marksuccessfuljobs = false;

参考文章:

https://blog.csdn.net/wx1528159409/article/details/104779519

了解为什么 Hive 生成数据的时候,是没有 _SUCCESS 文件的:点击查看原因

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如何将数据限制 SparkHDFS 生成 success 文件? 可以使用以下命令: ``` spark-submit your_script.py \ --master yarn \ --deploy-mode client \ --conf spark.yarn.submit.waitAppCompletion=false \ --conf spark.hadoop.fs.defaultFS=hdfs://your-hdfs-name-node:8020 \ --conf spark.hadoop.fs.permissions.umask-mode=022 \ --conf spark.hadoop.mapreduce.fileoutputcommitter.algorithm.version=2 \ --conf spark.speculation=false \ --name your-app-name \ --num-executors num_of_executors \ --executor-memory executor_memory \ --executor-cores num_of_cores_per_executor \ --conf spark.executor.heartbeatInterval=300s \ --conf spark.network.timeout=600s \ --conf spark.yarn.maxAppAttempts=1 \ --conf spark.dynamicAllocation.enabled=false \ --conf spark.shuffle.service.enabled=false \ --conf spark.sql.shuffle.partitions=1000 \ --py-files python_packages.zip \ --archives python_venv.zip \ --conf spark.yarn.appMasterEnv.PYSPARK_PYTHON=./python_venv.zip/python_venv/bin/python \ --conf spark.executorEnv.PYTHON_EGG_CACHE=./ \ --conf spark.pyspark.driver.python=./python_venv.zip/python_venv/bin/python \ --conf spark.pyspark.python=./python_venv.zip/python_venv/bin/python \ --conf spark.driver.maxResultSize=4g \ --conf spark.driver.memory=4g \ --conf spark.executor.memoryOverhead=4g \ --conf spark.driver.cores=2 \ --conf spark.default.parallelism=1000 \ --conf spark.sql.files.maxPartitionBytes=134217728 \ --conf spark.hadoop.validateOutputSpecs=false \ --conf spark.hadoop.mapreduce.output.fileoutputformat.suppressoutput=true \ --conf spark.hadoop.mapreduce.output.fileoutputformat.outputdir=hdfs://your-hdfs-name-node:8020/your-output-path \ --conf spark.hadoop.mapreduce.job.outputformat.class=org.apache.hadoop.mapreduce.lib.output.TextOutputFormat \ --conf spark.hadoop.mapreduce.outputcommitter.factory.scheme=hdfs \ --conf spark.hadoop.mapreduce.lazyOutput.format=true \ && hdfs dfs -touchz hdfs://your-hdfs-name-node:8020/your-output-path/success.txt ``` 说明: - `your_script.py`: 你想要提交的 Python 脚本。 - `your-app-name`: Spark 应用程序的名称。 - `num_of_executors`: Spark 应用程序使用的执行者数。 - `executor_memory`: 每个执行者可用的内存量。 - `python_packages.zip`: 如果程序依赖其他 Python 包,该文件应该包含这些包。更多信息,请参阅 PySpark 文档。 - `python_venv.zip`: 如果程序使用虚拟环境,该文件应该包含虚拟环境。更多信息,请参阅 PySpark 文档。 - `your-hdfs-name-node`: 你的 HDFS 名称节点。 - `your-output-path`: 文件的路径。 以上命令将指定的脚本使用 Spark 在 YARN 上运行,并将输HDFS 指定的路径。成功运行后,命令会在指定路径生成 success.txt 文件

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值