解决Spark读取tmp结尾的文件报错的问题

业务场景

flume采集文件到hdfs中,在采集中的文件会添加.tmp后缀。一个批次完成提交后,会将.tmp后缀重名名,将tmp去掉。
所以,当Spark程序读取到该hive外部表映射的路径时,在出现找不到xxx.tmp文件的问题出现。

解决思路:

Hdfs提供了读取文件筛选的接口PathFilter。
image
这个接口在hadoop-common包中,所以我们实现这个接口即可。

解决方法:

1.实现PathFilter接口,添加过滤文件后缀的逻辑。

新建了一个项目HdfsFileFilter,在项目中新建了一个类ExcludeTmpFile,如下

package org.apache.hadoop.hdfs;

import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.PathFilter;

/**
 * @Author: KingWang
 * @Date: 2023/4/13
 * @Desc: 解决读取hive外部表时,过滤tmp后缀的文件
 **/
class ExcludeTmpFile implements PathFilter {

    @Override
    public boolean accept(Path path) {

        return !path.getName().startsWith("_") && !path.getName().startsWith(".") && !path.getName().endsWith(".tmp");
    }
}

在Pom中引入

    <dependencies>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-common</artifactId>
            <version>3.0.0-cdh6.3.1</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>

    <repositories>
        <repository>
            <id>cloudera</id>
            <url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
                <updatePolicy>always</updatePolicy>
                <checksumPolicy>fail</checksumPolicy>
            </snapshots>
        </repository>
    </repositories>

2.打包部署

生成的包文件HdfsFileFilter-1.0.0.jar,然后上传到服务器。
我的目录是/home/hadoop/extra-jars/HdfsFileFilter-1.0.0.jar

3. 使用方法

在执行程序中引入包:

spark-shell --master yarn \
--queue root.users.hadoop \
--driver-memory 8G --executor-memory 8G \
--num-executors 50 --executor-cores 2  \
--jars /home/hadoop/extra-jars/HdfsFileFilter-1.0.0.jar \
--conf spark.driver.maxResultSize=20G \
--conf spark.port.maxRetries=16 \
--conf spark.executor.memoryOverhead=5120 \
--conf spark.dynamicAllocation.enabled=false \
--name testSparkShell

在程序中添加以下配置

spark.conf.set("mapred.input.pathFilter.class","org.apache.hadoop.hdfs.ExcludeTmpFile")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

硅谷工具人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值