SBT项目使用AvroParquetWriter报错:HADOOP_HOME未设置(无集群)
解决AvroParquetWriter报错"java.io.FileNotFoundException: HADOOP_HOME unset"(无需部署Hadoop集群)
我之前在做Avro转Parquet的操作时也踩过这个坑!虽然你没部署Hadoop集群,但AvroParquetWriter底层依赖的Parquet库会调用Hadoop的文件系统工具类,哪怕只是引入Hadoop相关依赖,程序也会尝试读取HADOOP_HOME的配置,这就导致了这个报错。不用慌,完全不用去搭Hadoop集群,下面两个方法就能解决:
方法一:手动设置Hadoop系统属性(最直接)
在初始化AvroParquetWriter之前,直接通过代码设置hadoop.home.dir系统属性,指定任意一个本地已存在的目录就行——不需要是Hadoop安装目录,只是给程序一个合法路径用来做临时文件操作:
// 替换成你本地任意存在的目录,比如Linux/macOS下的"/tmp",Windows下的"C:/temp" System.setProperty("hadoop.home.dir", "/tmp"); // 如果是Windows环境,可额外设置这个避免后续权限问题 System.setProperty("HADOOP_USER_NAME", "your-username");
设置完再初始化AvroParquetWriter,这个报错就会消失。
方法二:Windows环境补充处理(如果适用)
如果你在Windows上运行程序,除了上述设置,可能还会碰到winutils.exe相关错误。这时候需要:
- 下载和你依赖的Hadoop版本匹配的
winutils.exe - 把
winutils.exe放到你指定的hadoop.home.dir目录下的bin文件夹里(比如C:/temp/bin/winutils.exe)
Linux/macOS环境则不需要这一步,因为系统本身有对应的文件工具。
额外说明
不用觉得必须部署Hadoop集群才能用这些工具,Parquet只是借用了Hadoop的文件系统抽象层,我们只要给它一个合法的本地路径就能绕过集群依赖检查,完全不影响Avro转Parquet的核心功能。
内容的提问来源于stack exchange,提问作者NateH06
相关产品推荐
相关产品推荐

