首页 > 其他分享 >解决Spark读取tmp结尾的文件报错的问题

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

时间:2023-04-14 11:34:10浏览次数:33  
标签:tmp -- hadoop 报错 apache org Spark spark

业务场景

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")

标签:tmp,--,hadoop,报错,apache,org,Spark,spark
From: https://www.cnblogs.com/30go/p/17317801.html

相关文章

  • idea中运行各种报错,基本上可能的处理。
    1、如果报 找不到或无法加载主类1)可能是没有选择pom.xml导入。2)环境出了问题,在打包的时候报错,然后处理了一下,发现libraries下的jar包全没有了。  处理:点了一下invalidatecaches/Restart没起太大作用,然后下面操作生效了。 点一下,然后重启下就可以了应该。 2、打......
  • locust安装后报错:ImportError: DLL load failed while importing _greenlet: 找不到指
    需要安装msvc-runtimepipinstallmsvc-runtime这个问题很神奇,因为别人没有,按照官网上的介绍python3使用pip3installlocust就可以使用了,但是我的运行脚本就报错。为什么会出现这个问题可以参考matplotlibvscode在导入matplotlib.pyplot的时候。matplotlib报错:ImportEr......
  • Linux中使用ntpdate同步失败报错:14 Apr 08:42:12 ntpdate[1255]: the NTP socket is i
    报错信息: 报错原因:1、可能是因为同步的域名信息没有解析到。2、可能是因为服务的问题导致没有同步成功。 解决方法:1、先关闭ntpd服务。[root@k8s-master01~]#servicentpdstopRedirectingto/bin/systemctlstopntpd.service 2、重新同步。[root@k8s-maste......
  • nginx报错504 Geteway Timeout的处理
    后端开发同事反馈从页面导入大数据量表格,有时候响应正常,有时候接口返回504 GetewayTimeout报错,通过查看nginx日志报错基本上都是60s左右,原因是:问了开发同事说有时候后端程序处理导入的数据然后落库操作会很慢,即程序执行时间过长,由于proxy_read_timeout参数默认60s,由于后端服......
  • vm装win11[添加TMP]
    初建环境【可直接选ueif启动】 开启ueif的安全启动  添加安全模块......
  • Mogdb - copy 报错 ERROR: missing data for column
    Mogdb-copy报错ERROR:missingdataforcolumn本文出处:https://www.modb.pro/db/419967故障现象使用copy命令在进行数据导入时,出现报错:ERROR:missingdataforcolumn“c2” 故障原因在测试库上模拟重建故障环境droptableifexistssaferpt.crb_g02_002;CREATETABLE......
  • 报错信息如下:出现身份验证错误。要求的函数不受支持。可能是由于CredSSP加密数据库修
    微软官方已出补丁包:CVE-2018-0886的CredSSP更新WindowsServer2016,alleditions、WindowsServer2012R2Standard、WindowsServer2012Standard、Windows8.1、Windows10、Windows7这是由于凭据安全支持提供程序协议(CredSSP)是处理加密Oracle修正所导致。(详细......
  • windows上编写shell拷到linux执行报错
    1.最近随手在windows写了个自动安装docker的shell脚本,然后传到linux服务器执行竟然报以下错  2.进入vim查看突然看到下截图红色框地方 最后查阅资料发现,这个标志的产生原因是因为在windows下,文件的换行符是\r\n,而在linux下换行符是\n,所以,使用cat-Ainstall_docker.sh......
  • es 同步索引报错:ElasticSearch ClusterBlockException[blocked by: [FORBIDDEN/12/ind
    es同步索引报错:ElasticSearchClusterBlockException[blockedby:[FORBIDDEN/12/indexread-only/allowdelete(api)]原因:网上有的解决方式是方法一,我试过,没有生效使用的是方法二方法一curl-XPUT-H"Content-Type:application/json"https://localhost:9200/_all/_set......
  • webServlet添加数据报错500
     新建数据库文件,之后跳转出现问题,发现是数据库问题。字符不匹配 代码里是utf-8,将字符修改为utf-8,顺序为utf8之后可以 ......