先补充spark的博客链接,没在目录显示
Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统。
使用hdfs进行客户需要的指定域名时间打包日志 以及原始日志存储进行离线计算
在这一步遇到的一个重要的问题:
问题:从kafka中日志直接按域名时间分类存入hdfs时速度不够,主要时数据量太大,当数据量减少到1/10的时候满足要求。
试过:
spark:从kafka取出数据日志解析存入hdfs
logstash: 从kfaka中取出数据,然后自定义conf配置文件,按域名按小时直接存入hdfs
flume: flume自定义filter插件(java写的),将原始日志按照时间域名分类存入hdfs
发现这些东西都是存入hdfs速度不够,当然同时也看hdfs日志,hdfs本来就是适合大文件存储,同时每条日志存储有自己的路径有namenode datanode,现在这样一条日志或者百千条日志就进行一次日志存储的效率明显很低。
进行速度测试:
spark - kafka -logstash:从spark从kafka中取出原始日志然后将结果写入kafka的另一个topic这样的速度是OK的, 然后尝试结果数据再次通过logstash从kafka取出写入hdfs速度是跟不上的。
flume: 直接从kafka中取出然后按域名时间分类,写入本地或者直接屏幕上打印速度都是可以的。
最后的解决是:
flume自定义fliter插件(java),outPutSink插件(java),写入本地(这样已经测试速度是OK的,时间域名分割存储还未OK),本地形成大文件后写入hdfs(这里可以直接通过hdfs的api实现,linux定时脚本调用即可)
当然也可以直接用hbase进行原始日志的存储
git地址示例:
https://github.com/penghaoyou5/Flume-plug-in-log
ubuntu@sp26:~/apps/hadoop-2.6.4/etc/hadoop$ cat core-site.xml
ubuntu@sp26:~/apps/hadoop-2.6.4/etc/hadoop$ cat hadoop-env.sh
export JAVA_HOME=/home/ubuntu/apps/jdk1.7.0_45
ubuntu@sp26:~/apps/hadoop-2.6.4/etc/hadoop$ cat hdfs-site.xml
ubuntu@sp26:~/apps/hadoop-2.6.4/etc/hadoop$ cat slaves
sp27
sp28
sp29
sp30