基于 Flume 和 EMR 构建低成本大数据应用

1 摘要

Flume 是一个分布式的日志收集系统,它可以将应用服务器产生的日志、消息中间件 (比如 kafka) 的消息等其他数 据串联起来发送到指定的存储以供数据分析使用。EMR 是腾讯云提供的托管 Hadoop 服务,相比自建 hadoop 集群 EMR 提供了完善的集群管理、服务监控、安全管理、以及存储分离等特性,区别于自建 EMR 在计算存储分离方便 做了大量优化工作以降低在使用 Hadoop 相关服务时候的成本,本文核心介绍如何使用 Flume、EMR、对象存储

(COS)来构建低成本数据仓库应用, 总体应用架构图如下:

Flume数据流

如果上图所示,需要分析的数据可能来自如下几个地方:

1. 应用服务产生的日志 2. kafka 等消息中间件 3. 其他数据源比如 http,或者网络服务器

flume 在接受到这些数据之后可以根据您的需要选择输出目的目的地,本篇文章主要介绍三种类型的存储

• HDFS 常规的分布式文件系统 • COS 对象存储 • CFS 文件存储

如果您对成本非常敏感,建议您设置输出目的地为 COS,本文也会着重介绍如何将基于 COS 的 Sink 设置。

2 安装 Flume

2.1 下载 Flume 您可以使用如下命令来获取 Flume,本文以 1.7.0 为例

         git clone -b release-1.7.0 https://github.com/apache/flume.git  

2.2 编译安装 Flume 使用如下命令编译 Flume,因为 EMR 的 hadoop 是 2.7.3,因此在编译的时候需要指定基于 hadoop2 进行编译。

  mvn package -Dmaven.javadoc.skip=true -DskipTests -Dtar -Dhadoop2.version=2.7.3  -Phadoop-2

编译成功后将 flume-ng-dist/target/apache-flume-1.7.0-bin.tar.gz 解压到安装目录

2.3 兼容性处理

进入到 flume 的目录后执行如下命令

rm -rf ./lib/httpclient-4.2.1.jar
rm -rf ./lib/httpcore-4.1.3.jar

删除这两个 jar 的原因是会和 hadoop 中的 httpclient 库冲突,当然您也可以删除前备份这两个 jar

3 配置 Flume

3.1 拷贝 Hadoop 登录任意一台 EMR 集群节点,将 hadoop 拷贝到 Flume 所在的服务器

#JDK路径,EMR使用的JDK强制在该路径下
 ls -al /usr/local/jdk/ 
#在Flume节点执行如下命令
mkdir -p /data/emr/hdfs/logs
mkdir -p /data/emr/hdfs/tmp
#hadoop 在EMR所在路径为
ls -al /usr/local/service/hadoop

拷贝过来后务必确认以下要点: • JDK 路径和 EMR 节点保持完全一致 • 创建/data/emr/hdfs/logs 和/data/emr/hdfs/tmp 目录 • hadoop 路径务必和 EMR 节点路径一致在/usr/local/service/hadoop

3.2 确认 COS 配置项 在 hadoop 相关软件拷贝成功后,确认 hadoop 中的 cos 配置文件中存在以下配置,具体路径为:/usr/local/service/hadoop/etc/hadoop/core-site.xml

     <property>
       <name>fs.cos.userinfo.secretId</name>
       <value>秘钥</value>
     </property>
     <property>
       <name>fs.cos.userinfo.appid</name>
       <value>账户ID</value>
     </property>
     <property>
       <name>fs.cos.userinfo.secretKey</name>
       <value>秘钥key</value>
     </property>
     <property>
       <name>fs.cosn.block.size</name>
       <value>1048576</value>
     </property>
     <property>
       <name>fs.cosn.impl</name>
       <value>org.apache.hadoop.fs.cosnative.NativeCosFileSystem</value>
     </property>
     <property>
       <name>fs.cosn.userinfo.region</name>
       <value>ap-guangzhou</value>
     </property>
     <property>
       <name>fs.cosn.local_block_size</name>
       <value>2097152</value>
     </property>

说明:如果在创建 EMR 集群的时候选择了 COS,那么这些配置将会自动生成,具体值项不清楚怎么获取可以提工 单或者咨询客服。

3.3 Flume 配置 在 flume 的 conf 目录下新增加测试配置,demo.conf 内容如下

     #agent and component of agent
     search.sources = so
     search.sinks = si
     search.channels = sc

     # Configure a channel that buffers events in memory:
     search.channels.sc.type = memory
     search.channels.sc.capacity = 20000
     search.channels.sc.transactionCapacity = 100


     # Configure the source:
     search.sources.so.channels = sc
     search.sources.so.type = exec
     search.sources.so.command = tail -F /data/logs/demo.log

     # Describe the sink:
     search.sinks.si.channel = sc
     search.sinks.si.type = hdfs
     search.sinks.si.hdfs.path = cosn://bucketname/demo
     search.sinks.si.hdfs.writeFormat = Text
     search.sinks.si.hdfs.fileType = DataStream
     search.sinks.si.hdfs.rollSize=0
     search.sinks.si.hdfs.rollCount = 10000
     search.sinks.si.hdfs.batchSize=1000
     search.sinks.si.rollInterval=1

更多详细配置,请参考https://flume.apache.org/FlumeUserGuide.html#hdfs-sink

4 启动服务并验证

4.1 启动 flume 的 agent 服务 进入 flume 安装目录,执行如下命令启动服务:

bin/flume-ng agent -c conf -f ./conf/demo.conf --name demo

启动服务后观察日志是否存在异常,如果有如下异常请忽略

4.2 验证日志是否生成成功 在 flume 启动成功后,您可以使用如下命令来查看文件是否生成成功

         hadoop fs -ls cosn://bucket/demo

5 启动分析任务

在日志推送成功后,您可以通过如下的方式进行数据分析

• 把日志推送到 hive 表的 storageLocation 下进行 ETL

• 直接生产 ORC 格式的数据然后通过 Presto 来进行查询

• 通过 spark 或者 MR 写程序分析

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏吴生的专栏

SpringBoot整合RabbitMQ之典型应用场景实战一

实战前言 RabbitMQ 作为目前应用相当广泛的消息中间件,在企业级应用、微服务应用中充当着重要的角色。特别是在一些典型的应用场景以及业务模块中具有重要的作用...

13900
来自专栏c#开发者

企业库推广

企业库推广  阿新 1. 概述 可重用的程序块库,用于解决共性的企业级开发过程中所面临的挑战 l 较低风险(经过实践验证的、精准的) l 降低成本(可充用) ...

366130
来自专栏Zchannel

3个方法解决百度网盘限速

44350

扩展CakePHP的CacheHelper以使用缓存引擎

CakePHP是一个MVC设计模式下的PHP框架,它使得您的生活更加简单并且让您的开发工作更上一层楼。尽管它被认为是一个相对缓慢的框架,(因为)它带有的大量缓存...

23790
来自专栏SpringBoot 核心技术

第四十章:基于SpringBoot & Quartz完成定时任务分布式多节点负载持久化

492120
来自专栏漫漫全栈路

Windows Server下IIS安装PHP+MySql环境

前几天看了几个动漫和电影,稍微有点感触,就想着写点影评,很多东西就开始从脑海里往外冒。之前说过要做个微信订阅号的,也就有了Gamean这个公众微信,当初是打算...

1.2K40
来自专栏Kirito的技术分享

浅析分布式下的事件驱动机制(PubSub模式)

上一篇文章《浅析Spring中的事件驱动机制》简单介绍了Spring对事件的支持。Event的整个生命周期,从publisher发出,经过application...

430100
来自专栏数据和云

【云端起舞】快速查找Oracle公有云服务上VM服务器的IP地址

编辑手记:在使用SSH连接数据库的时候,大多数的公有云服务通过IP地址与对应的VM服务器关联,这篇文章将会引导你查找Oracle公有云服务上连接到VM实例的IP...

38960
来自专栏源码之家

如何通过SSH更改Linux系统下文件(或文件夹)的拥有者

31030
来自专栏学习力

《Java从入门到放弃》框架入门篇:hibernate基本配置

20850

扫码关注云+社区

领取腾讯云代金券