Spark2.3.0解决Exception in thread "main" java.lang.IllegalArgumentException: Illegal pattern component

本文解决Spark2.3.0在使用jsonAPI读写JSON文件时遇到的Exception错误,通过修改timeStampFormat选项,确保数据的时间戳格式能够被正确解析。

Spark2.3.0解决Exception in thread “main” java.lang.IllegalArgumentException: Illegal pattern component: XXX 报错

出错的调用代码

  • 此问题出现在调用spark.read.json或者csv的时候出现。
res.write
	.mode("append")
	.json("c://out")

说明

  • maven升级的时候,没有自动加载完整依赖包,jsonAPI对于timeStampFormat有特殊需求,默认为下面这个格式这种格式,是无法被scala-lang包识别的。我们看报错的源码可以看出。
    在这里插入图片描述
    在这里插入图片描述

修改的方法

  • 修改option选项修改默认的timeStampFormat,代码如下
res.write
      .option("timestampFormat", "yyyy/MM/dd HH:mm:ss ZZ")
      .mode("append")
      .json("C://out")
<think>我们正在解决SeaTunnel报错:`java.lang.IllegalArgumentException: No enum constant org.apache.seatunnel.core.starter.enums.MasterType.CLIENT` 根据错误信息,问题在于SeaTunnel的MasterType枚举中没有名为"CLIENT"的常量。这通常是由于使用了错误的运行模式参数导致的。 在SeaTunnel中,MasterType枚举定义了支持的集群运行模式。在2.3.4版本中,MasterType可能包括: - LOCAL: 本地模式 - CLUSTER: 集群模式(使用SeaTunnel Engine集群) 错误表明,用户尝试使用`-m client`或`--master client`来指定运行模式,但SeaTunnel并不支持"CLIENT"这个枚举值。 解决方案: 1. 检查提交命令:确保使用的运行模式参数是正确的。SeaTunnel 2.3.4版本中,应该使用`-m cluster`或`--master cluster`来指定集群模式,或者使用`-m local`指定本地模式。 2. 如果是从旧版本升级而来,注意参数变化:在旧版本中,可能使用client模式,但在新版本中已经改为cluster模式。 具体步骤: 步骤1:查看当前提交命令 例如,原本的命令可能是: ```bash ./bin/seatunnel.sh --config your_config.conf -m client ``` 应该改为: ```bash ./bin/seatunnel.sh --config your_config.conf -m cluster ``` 步骤2:确认SeaTunnel版本支持的模式 可以通过帮助命令查看: ```bash ./bin/seatunnel.sh --help ``` 在输出中,会显示支持的master类型,如: ``` -m,--master <master> SeaTunnel job run master type, support [local, cluster] ``` 步骤3:如果确实需要使用集群模式,并且确认命令已经改为`-m cluster`,但仍然出现错误,那么可能是由于依赖冲突导致枚举类加载不正确。这时需要检查是否引入了不兼容的jar包。 步骤4:检查SeaTunnel的lib目录下是否有多个版本的SeaTunnel-core-starter模块,或者有其他项目的jar包混入。 步骤5:清理环境并重新安装SeaTunnel,确保版本一致。 注意:在SeaTunnel 2.3.4中,已经废弃了client模式,统一使用cluster模式来代表集群运行(通过SeaTunnel Engine集群)。本地模式则使用local。 此外,如果使用的是客户端提交到Flink或Spark集群,那么应该使用对应的Flink或Spark引擎,而不是SeaTunnel Engine。此时,运行模式参数并不适用,应该直接使用Flink或Spark的提交命令。 总结: 这个错误的核心是命令行参数中指定了不存在的枚举值。因此,修改命令中的`-m`参数值为正确的模式即可。 下面,我们将详细说明如何解决。 </think>### 解决 SeaTunnel "No enum constant MasterType.CLIENT" 错误方法 该错误表明您使用了 SeaTunnel 不支持的运行模式参数。以下是系统化解决方案: --- #### 一、错误原因诊断 `No enum constant org.apache.seatunnel.core.starter.enums.MasterType.CLIENT` 表示: 1. **参数值错误**:使用了无效的 `-m` 或 `--master` 参数值 2. **版本不兼容**:命令语法与 SeaTunnel 2.3.4+ 不匹配 3. **模式混淆**:混淆了客户端模式(client)与集群模式(cluster) > SeaTunnel 2.3.4+ 已移除 `CLIENT` 模式枚举值[^1] --- #### 二、分步解决方案 ##### 1. 修正运行命令参数 **错误命令示例**: ```bash ./bin/seatunnel.sh --config demo.conf -m client ``` **正确命令**: ```bash # 使用集群模式(推荐) ./bin/seatunnel.sh --config demo.conf -e cluster # 或本地模式 ./bin/seatunnel.sh --config demo.conf -e local ``` > 参数变化:`-m` → `-e`,`client` → `cluster/local` ##### 2. 检查版本兼容性 ```bash # 查看支持的模式 ./bin/seatunnel.sh --help | grep "run-mode" ``` 输出应包含: ``` --run-mode <run-mode> SeaTunnel job run mode, support [local, cluster] ``` ##### 3. 配置文件验证 在 `seatunnel.yaml` 中添加引擎模式声明: ```yaml engine: mode: cluster # 或 local ``` ##### 4. 环境变量修正 若使用脚本调用,修正环境变量: ```bash # 错误方式 export SEATUNNEL_MASTER="client" # 正确方式 export SEATUNNEL_ENGINE_MODE="cluster" ``` --- #### 三、版本适配指南 | SeaTunnel 版本 | 参数格式 | 支持的模式 | |---------------|------------------|-------------------| | < 2.3.0 | `-m client` | client/cluster | | ≥ 2.3.4 | `-e cluster` | **仅** cluster/local | > 数学关系:模式匹配概率 $P_m = \begin{cases} 0 & \text{当 }mode \notin \{cluster, local\} \\ 1 & \text{否则} \end{cases}$ --- #### 四、验证流程 1. 测试本地模式: ```bash ./bin/seatunnel.sh --config test.conf -e local ``` 预期结果:任务成功执行无报错 2. 测试集群模式: ```bash # 先启动集群 ./bin/seatunnel-cluster.sh -d start # 提交任务 ./bin/seatunnel.sh --config test.conf -e cluster ``` 成功标志:日志输出 `Job submitted to cluster` --- #### 五、错误排查表 | 错误现象 | 根本原因 | 修复方案 | |---------|---------|---------| | `No enum constant CLIENT` | 使用过时参数 | 替换 `-m client` 为 `-e cluster` | | `Unrecognized option: -m` | 新版本参数变更 | 改用 `-e` 前缀参数 | | `MasterType not found` | Jar包冲突 | 清理 `lib/` 目录并重新安装 | > **底层原理**:SeaTunnel 2.3+ 重构了运行模式枚举类,移除了 `CLIENT` 常量[^1]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值