开发者学堂课程【新电商大数据平台2020最新课程:电商项目之 flume 数据同步总结】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/640/detail/10514
电商项目之 flume 数据同步总结
内容简介
一、flume 数据同步
二、常见问题处理
一、flume 数据同步
上节我们讲了 flume 数据采集,将本地文件采集到 ads 中。上节课也做了测试,针对上节课空值没有导进来,是因为没有时间这一列,所以说这个不影响。
从本地文件夹采集我们的 hdys 通过 telldl 的方式,这样会在 hdys 生成一个文件。这样我们的数据就有了,也就是20200321这一天采集过来的,那么我们这个时候按照分局域去处理,那个 web 数据就处理完成了。
日志数据处理:
数据采集回顾:数据采集文档中有个高可用搭建,文档里有参考内容,配置文件也是高考用的。在这大家可以尝试搭建采集。
下面有一个字段稍微修改了下,最好用数据仓库里的文件进行覆盖一下。
然后导入下,修改好时间,每天处理一次动态参修改。滚动次数和大小可以修改为零。我们可以执行我们的任务,比如数据导入任务,数据采集。
创建表结构时,设置字段划分规则,ROW FORMAT DELIMITED FIELDS TERMINATED BY;以逗号分隔,因为在 HDFS数据导入过来后,文件内每个字段是,分隔,在进行导入。
例如:
alter table ods_nshop.ods_nshop_o1_releasedatas add partition (bdp_day='20190926');在进行查询即可
最后我们开发肯定会遇到的问题,比如小文件过多,但在这上面肯定不会有整个问题,因为已经设置成0了,就是将它的 Count 滚动次数和 Size 大小都设置成0,不管有多大的文件都形成一个文件夹。
二、常见问题处理
[ERROR-org.apache.thrift.server.AbstractNonblockingServer$FrameBuffer.invoke(AbstractNonblockingServer.java:484)] Unexpectedthrowablewhile invoking!java.lang.OutOfMemoryError: Java heap space
原因:
flume 启动时的默认最大的堆内存大小是20M,实际环境中数据量较大时,很容易出现 OOM 问题,在 flume 的基础配置文件 conf 下的 flume-env.sh 中添加。
export JAVA_OPTS="-Xms2048m -Xmx2048m -Xss256k -Xmn1g-XX:+UseParNewGC-XX:+UseConcMarkSweepGC -XX:-UseGCOverheadLimit"
并且在 flume 启动脚本 flume-ng 中,
1. 修改 JAVA_OPTS="-Xmx20m"为 JAVA_OPTS="-Xmx2048m"此处我们将堆内存的阈值跳转到了2G,实际生产环境中可以根据具体的硬件情况作出调整
2.
[ERROR-org.apache.thrift.server.TThreadedSelectorServer$SelectorThread.run(TThreadedSelectorServer.java:544)]run() exiting due to uncaught error java.lang.OutOfMemoryError: unable to create new native thread
原因:
如果 App 给 flume 的 thrift source 发送数据时,采用短连接,会无限地创建线程,使用命令pstree 时发现 java 的线程数随着发送数据量的增长在不停增长,最终达到了65500多个,超过了 linux 系统对线程的限制,解决方法是在thrift source 配置项中增加一个线程数的限制。
3. agent.sources.r1.threads = 50重新启动 agent 发现 java 的线程数达到70多就不再增长了
4.
Caused by: org.apache.flume.ChannelException:Put queue for MemoryTransaction of capacity 100 full,consider committing more frequently, increasing capacity or increasing thread count
原因:
这是 memory channel 被占满导致的错误,memory channel 默认最多只缓存100条数据,在生产环境中明显不够,需要将 capacity 参数加大,还有其他问题,大家在以后的运用途中如果发生可以参考,也有解决方案。传输使用AVRO Source 方式进行传播的。这样数据传输过来之后再进行操作。
这样 flume 的采集就完成了,它会按照事先设置好的程序定时去操作,只要有数据过来就会落地,每天都会形成一个大的文件。