Spark - Illegal pattern component: XXX 与org.apache.commons.lang3.time.FastDateFormat incompatible

简介: 使用 sparkSession 读文件时出现java.lang.IllegalArgumentException: Illegal pattern component: XXX 报错,解决后又出现java.io.InvalidClassException: org.apache.commons.lang3.time.FastDateFormat; local class incompatible: stream classdesc serialVersionUID = 2,下面解决一下。...

一.引言

使用 sparkSession 读文件时出现 java.lang.IllegalArgumentException: Illegal pattern component: XXX 报错,解决后又出现 java.io.InvalidClassException: org.apache.commons.lang3.time.FastDateFormat; local class incompatible: stream classdesc serialVersionUID = 2, local class serialVersionUID = 1 报错,下面整理下解决方案。

二.Illegal pattern component: XXX

1.问题描述

val spark = SparkSession
      .builder
      .config(conf)
      .getOrCreate() 
    val df = spark.read
                .option("header", "false")
                .option("delimiter", "\t")
                .csv(input)

image.gif

使用 SparkSession 读取 gz 文件时出现下述报错:

image.gif编辑

2.问题解决

上述异常栈定位到 org.apache.commons.lang3.time.FastDataFormat,看着是时间格式化的问题,但是我的小伙伴运行上述代码没有问题,很奇怪,看了网上大神们的解决方案,主要有以下两种:

val df = spark.read
                .option("timestampFormat", "yyyy/MM/dd HH:mm:ss ZZ")
                .option("header", "false")
                .option("delimiter", "\t")
                .csv(input)

image.gif

或者是:

val df = spark.read
                .option("timestampFormat", "MM/dd/yyyy")
                .option("header", "false")
                .option("delimiter", "\t")
                .csv(input)

image.gif

二者类似,主要是定义了上面 XXX 对应的 TimeFormat,楼主尝试了一下,两种 TimeFormat 的 option 都可以解决问题。

三.org.apache.commons.lang3.time.FastDateFormat; local class incompatible

1.问题描述

sqlContext.createDataFrame(rowRdd, TABLE_SCHEME)
        .write.mode(SaveMode.Overwrite)
        .option("timestampFormat", "MM/dd/yyyy")
        .format("parquet")
        .save(output + "/split" + i + ".parquet")

image.gif

代码整体逻辑为读取文件并保存为 parquet,parquet 相关内容可以参考: Spark - 一文搞懂 parquet。添加 timestampFormat 后读取和上述保存代码运行正常,spark 任务状态为 SUCCESS,但是观察 yarn 日志发现有很多 Failed 的节点,影响任务执行效率:

image.gif编辑

观察节点日志发现均为如下报错:

image.gif编辑

可以看到 Failed 节点上的报错又是 commons.lang3.time.FastDateFormat,和上面 java.lang.IllegalArgumentException: Illegal pattern component: XXX 异常栈指向的是同一个类即 org.apache.commons.lang3.time.FastDateFormat 类。

2.问题解决

报错显示了两种不同的 serialVersionUID = 2 和 serialVersionUID = 1,很有可能是依赖冲突导致,所以首先遍历当前代码环境下有多少 commons.lang3.time.FastDateFormat,这里使用 IDEA 的查询功能:

image.gif编辑

DailyTool 为我自己的项目,所以主要查下面的项目:

commons.lang3-3.3.3.jar /time/FastDateFormat.class:

image.gif编辑

jasper/util/FastDateFormat:

image.gif编辑

hive-exec:0.13.1 FastDateFormat.class:

image.gif编辑

只有 Hive common.lang3 对应的 serialVersionUID = 1L,所以锁定目标为该 jar,去除该 jar 运行任务即可。

3.其他解决方案

如果有童鞋没有安装 IDEA 可以使用 mvn tree 定位 common.lang3 的位置:

mvn -Dverbose dependency:tree > mvnTree

image.gif

image.gif编辑

cat + grep 可以大致看下有多少 jar 包内包含,通过 jar 包内的代码一次寻找即可:

cat ~/Desktop/mvnTree| grep commons.lang3

image.gif

image.gif编辑

mvn-tree 的更多使用也可以参考:Java - java.lang.NoSuchMethodError: xxx 错误详解

四.总结

java.lang.IllegalArgumentException: Illegal pattern component: XXX 以及其对应的 FastDateFormat 带来的报错大致解决了,但是还没有搞懂为什么其他童鞋不配置这个 option 也可以正常运行,后面再去整理下环境相关的问题,找到了继续更新。

目录
相关文章
|
6月前
|
分布式计算 大数据 数据处理
Apache Spark:提升大规模数据处理效率的秘籍
【4月更文挑战第7天】本文介绍了Apache Spark的大数据处理优势和核心特性,包括内存计算、RDD、一站式解决方案。分享了Spark实战技巧,如选择部署模式、优化作业执行流程、管理内存与磁盘、Spark SQL优化及监控调优工具的使用。通过这些秘籍,可以提升大规模数据处理效率,发挥Spark在实际项目中的潜力。
494 0
|
1月前
|
分布式计算 大数据 Apache
利用.NET进行大数据处理:Apache Spark与.NET for Apache Spark
【10月更文挑战第15天】随着大数据成为企业决策和技术创新的关键驱动力,Apache Spark作为高效的大数据处理引擎,广受青睐。然而,.NET开发者面临使用Spark的门槛。本文介绍.NET for Apache Spark,展示如何通过C#和F#等.NET语言,结合Spark的强大功能进行大数据处理,简化开发流程并提升效率。示例代码演示了读取CSV文件及统计分析的基本操作,突显了.NET for Apache Spark的易用性和强大功能。
37 1
|
4月前
|
分布式计算 大数据 Spark
Spark大数据处理:技术、应用与性能优化(全)PDF书籍推荐分享
《Spark大数据处理:技术、应用与性能优化》深入浅出介绍Spark核心,涵盖部署、实战与性能调优,适合初学者。作者基于微软和IBM经验,解析Spark工作机制,探讨BDAS生态,提供实践案例,助力快速掌握。书中亦讨论性能优化策略。[PDF下载链接](https://zhangfeidezhu.com/?p=347)。![Spark Web UI](https://img-blog.csdnimg.cn/direct/16aaadbb4e13410f8cb2727c3786cc9e.png#pic_center)
150 1
Spark大数据处理:技术、应用与性能优化(全)PDF书籍推荐分享
|
3月前
|
分布式计算 Hadoop 大数据
大数据处理框架在零售业的应用:Apache Hadoop与Apache Spark
【8月更文挑战第20天】Apache Hadoop和Apache Spark为处理海量零售户数据提供了强大的支持
66 0
|
3月前
|
分布式计算 Serverless 数据处理
EMR Serverless Spark 实践教程 | 通过 Apache Airflow 使用 Livy Operator 提交任务
Apache Airflow 是一个强大的工作流程自动化和调度工具,它允许开发者编排、计划和监控数据管道的执行。EMR Serverless Spark 为处理大规模数据处理任务提供了一个无服务器计算环境。本文为您介绍如何通过 Apache Airflow 的 Livy Operator 实现自动化地向 EMR Serverless Spark 提交任务,以实现任务调度和执行的自动化,帮助您更有效地管理数据处理任务。
205 0
|
4月前
|
分布式计算 Apache Spark
|
5月前
|
分布式计算 大数据 数据处理
Apache Spark在大数据处理中的应用
Apache Spark是大数据处理的热门工具,由AMPLab开发并捐赠给Apache软件基金会。它以内存计算和优化的执行引擎著称,提供比Hadoop更快的处理速度,支持批处理、交互式查询、流处理和机器学习。Spark架构包括Driver、Master、Worker Node和Executor,核心组件有RDD、DataFrame、Dataset、Spark SQL、Spark Streaming、MLlib和GraphX。文章通过代码示例展示了Spark在批处理、交互式查询和实时数据处理中的应用,并讨论了其优势(高性能、易用性、通用性和集成性)和挑战。【6月更文挑战第11天】
142 6
|
5月前
|
分布式计算 Spark 大数据
深入探究Apache Spark在大数据处理中的实践应用
【6月更文挑战第2天】Apache Spark是流行的开源大数据处理框架,以其内存计算速度和低延迟脱颖而出。本文涵盖Spark概述、核心组件(包括Spark Core、SQL、Streaming和MLlib)及其在数据预处理、批处理分析、交互式查询、实时处理和机器学习中的应用。通过理解Spark内部机制和实践应用,可提升大数据处理效率,发挥其在各行业的潜力。
|
5月前
|
消息中间件 分布式计算 关系型数据库
使用Apache Spark从MySQL到Kafka再到HDFS的数据转移
使用Apache Spark从MySQL到Kafka再到HDFS的数据转移
|
6月前
|
消息中间件 分布式计算 Serverless
CDC一键入湖:当 Apache Hudi DeltaStreamer 遇见 Serverless Spark
CDC一键入湖:当 Apache Hudi DeltaStreamer 遇见 Serverless Spark
117 2

推荐镜像

更多