(1)Flume
Flume是Apache旗下的一款开源、高可靠、高扩展、容易管理、支持客户扩展的数据采集系统。Flume使用JRuby来构建,所以依赖Java运行环境。
它的工作原理有点类似于一节一节的水管。每一节水管(Agent)的结构如图3.4所示。
Source定义进口,进口可以是日志目录或某个日志文件,也可以是另一节水管的出口;Sink定义出口,出口可以是某个文件系统(比如HDFS),也是可以是另一节水管进口;Channel就是水管体,里面可以储水,也就是数据。所要做的就是配置好相关的参数,定义好源头(数据源)和储水池(文件系统),把一节节水管连接起来,保证水的源头产生水源(日志文件或目录产生变更),经过管道(Agent),流进储水池(HDFS)即可。
(2)Kafka
Kafka是一种高吞吐量的分布式发布订阅消息系统。它的工作原理类似于微博的订阅,原理图如图3.5所示。
这里只需要关注三个概念:Producer、Topic和Consumer。Producer(生产者)相当于微博中的博主,他们是生产内容(消息)的,Topic(话题)就相当于微博中的某个话题,Consumer(消费者)自然就相当于用户。工作流程就是,我们(Consumer)订阅某个话题(Topic),如果有博主(Producer)发布了对应话题的内容,就保存起来。我们(Consumer)空闲的时候,就去查看相应的内容(处理消费相应的数据内容)。这样做主要是为了解决生产者产生内容的速度和消费者处理数据的速度不同步的问题。
(3)Sqoop
Sqoop是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(MySQL、Postgresql…)间进行数据的传递,可以将一个关系型数据库(例如,MySQL、Oracle、Postgresql等)中的数据导入Hadoop的HDFS中,也可以将HDFS的数据导入关系型数据库中。