使用Apache Flume将本地日志传输到HDFS时堆内存溢出如何解决
解决方法
报错java.lang.OutOfMemoryError: Java heap space的直接原因是启动参数中JVM最大堆内存仅设置为20M,无法支撑Flume进程运行;你修改flume-env.sh未生效是因为启动时没有指定Flume配置目录,进程没有加载你修改的配置文件。
- 第一步:确认
flume-env.sh配置正确
找到Flume安装路径下的conf目录,将flume-env.sh.template重命名为flume-env.sh(如果还没重命名的话),编辑文件添加或修改内存配置:
最低建议配置最大堆内存不低于512M,可根据实际负载调整。export JAVA_OPTS="-Xms256m -Xmx1024m" - 第二步:启动时指定配置目录
启动命令添加--conf参数指向Flume的conf目录,假设你的Flume安装在/home/samar/flume,启动命令修改为:
该参数会让Flume加载对应目录下的flume-ng agent -n NetcatAgent -f net.conf --conf /home/samar/flume/confflume-env.sh配置,你设置的内存参数才会生效。 - 临时测试方案:如果不想修改配置文件,也可以直接在启动命令中指定内存参数:
flume-ng agent -n NetcatAgent -f net.conf --conf /home/samar/flume/conf -Xmx1024m - 可选:解决SLF4J包冲突警告
报错中的SLF4J绑定冲突是因为Flume和Hadoop自带了相同的日志绑定包,不影响功能运行,你可以删除任意一个路径下的slf4j-log4j12Jar包即可消除警告。
补充说明:你当前的配置是netcat源+logger sink的测试配置,后续要实现本地日志传输到HDFS,需要把source类型改成
spooldir或taildir读取本地日志文件,sink类型改成hdfs配置对应的HDFS存储路径即可。
内容的提问来源于stack exchange,提问作者Samar Pratap Singh
相关产品推荐
相关产品推荐

