无需Hadoop,FlinkSQL读取Parquet文件遇类找不到错误求解决
解决Flink SQL读取Parquet时无Hadoop依赖的ClassNotFoundException问题
你遇到的java.lang.ClassNotFoundException: org.apache.hadoop.conf.Configuration是因为默认的Flink Parquet格式依赖Hadoop相关类,要实现无Hadoop环境读取Parquet,需改用无Hadoop依赖的Parquet Avro格式,操作步骤如下:
- 下载与你的Flink版本匹配的
flink-sql-parquet-avrojar包,将其放入flink/lib目录(建议移除之前的普通parquet jar,避免依赖冲突)。 - 停止当前Flink集群:
./flink/bin/stop-cluster.sh,再重新启动集群:./flink/bin/start-cluster.sh,启动SQL客户端:./flink/bin/sql-client.sh。 - 修改建表语句,将格式指定为
parquet-avro(该格式基于Flink自身实现,不依赖Hadoop):
create TABLE test2 ( order_time TIMESTAMP(3), product STRING, feature INT, WATERMARK FOR order_time AS order_time ) WITH ( 'connector'='filesystem', 'path'='/home/ubuntu/test.parquet', 'format'='parquet-avro' );
- 执行查询语句
select count(*) from test2;,即可正常读取Parquet文件。
注意:parquet-avro格式要求Parquet文件的Schema兼容Avro规范,若你的Parquet文件是通过其他方式生成的,需确保Schema可被Avro解析。
内容的提问来源于stack exchange,提问作者bumpbump
相关产品推荐
相关产品推荐

