Apache Flume 教程:什么是 Archi架构与 Hadoop 示例
Hadoop 中的 Apache Flume 是什么?
阿帕奇水槽 是一个可靠的分布式系统,用于收集、聚合和移动大量日志数据。它具有基于流数据流的简单而灵活的架构。Apache Flume 用于从 Web 服务器收集日志文件中的日志数据并将其聚合到 HDFS 中进行分析。
Hadoop 中的 Flume 支持多种来源,例如 -
- ‘tail’(将数据从本地文件传输并通过 Flume 写入 HDFS,类似于 Unix 命令‘tail’)
- 系统日志
- Apache log4j (使能够 Java 应用程序通过 Flume 将事件写入 HDFS 中的文件)。
水槽 Archi质地
A 水槽代理 是一个 JVM 该过程包含三个部分 –水槽源, 水槽通道 和 水槽水槽– 事件在外部源发起后通过它传播。
- 在上图中,外部源(WebServer)生成的事件被Flume Data Source消费,外部源以目标源可识别的格式将事件发送到Flume Source。
- Flume Source 接收事件并将其存储到一个或多个通道中。通道充当存储,保存事件直到被 Flume Sink 消费。此通道可以使用本地文件系统来存储这些事件。
- Flume 接收器从通道中移除事件并将其存储到外部存储库(例如 HDFS)。可能有多个 Flume 代理,在这种情况下,Flume 接收器会将事件转发到流中的下一个 Flume 代理的 Flume 源。
FLUME的一些重要特性
- Flume 具有基于流数据流的灵活设计。它具有容错性和稳定性,具有多种故障转移和恢复机制。Flume Big Data 具有不同级别的可靠性,包括 “尽力递送” 和 “端到端交付”. 尽力而为 不能容忍任何 Flume 节点故障,而 “端到端交付” 模式即使出现多个节点故障也能保证交付。
- Flume 在源和接收器之间传输数据。数据收集可以是计划的,也可以是事件驱动的。Flume 拥有自己的查询处理引擎,可以轻松转换每一批新数据,然后再将其移动到目标接收器。
- 可能 水槽 包括 高密度文件系统 和 HBase的Flume Hadoop还可用于传输事件数据,包括但不限于网络流量数据、社交媒体网站生成的数据和电子邮件消息。
Flume、库和源代码设置
在开始实际操作之前,请确保您已安装 Hadoop。将用户更改为“hduser”(Hadoop 配置时使用的 ID,您可以切换到 Hadoop 配置期间使用的用户 ID)
步骤1) 创建一个名为“FlumeTutorial”的新目录
sudo mkdir FlumeTutorial
- 授予读取、写入和执行权限
sudo chmod -R 777 FlumeTutorial
- 复制档案 我的TwitterSource.java 和 MyTwitterSourceForFlume.java 在这个目录中。
检查所有这些文件的文件权限,如果缺少“读取”权限,则授予相同的权限-
步骤2) 从网站下载“Apache Flume” https://flume.apache.org/download.html
本 Flume 教程中使用了 Apache Flume 1.4.0。
下一步点击
步骤3) 将下载的 tarball 复制到您选择的目录中,然后使用以下命令提取内容
sudo tar -xvf apache-flume-1.4.0-bin.tar.gz
此命令将创建一个名为 Apache-flume-1.4.0-bin 并将文件提取到其中。此目录将称为 在文章的其余部分。
步骤4) Flume 库设置
复制 twitter4j-core-4.0.1.jar、flume-ng-配置-1.4.0.jar、flume-ng-core-1.4.0.jar、flume-ng-sdk-1.4.0.jar 至
/lib/
复制的 JAR 中的一个或全部可能需要执行权限。这可能会导致代码编译出现问题。因此,请撤销此类 JAR 的执行权限。
就我而言 twitter4j-core-4.0.1.jar 原为 必须执行权限。我撤销了它,如下所示:
sudo chmod -x twitter4j-core-4.0.1.jar
此命令授予“读取”权限后 twitter4j-core-4.0.1.jar 对所有人。
sudo chmod +rrr /usr/local/apache-flume-1.4.0-bin/lib/twitter4j-core-4.0.1.jar
请注意,我已经下载-
– twitter4j-core-4.0.1.jar 在 https://mvnrepository.com/artifact/org.twitter4j/twitter4j-core
– 所有火焰罐,即 flume-ng-*-1.4.0.jar 在 http://mvnrepository.com/artifact/org.apache.flume
使用 Flume 从 Twitter 加载数据
步骤1) 转到包含源代码文件的目录。
步骤2) 在 类路径 包含装有 /lib/* 和 〜/ FlumeTutorial / flume / mytwittersource / *
export CLASSPATH="/usr/local/apache-flume-1.4.0-bin/lib/*:~/FlumeTutorial/flume/mytwittersource/*"
步骤3) 使用以下命令编译源代码:
javac -d . MyTwitterSourceForFlume.java MyTwitterSource.java
步骤4)创建一个 jar
首先,建立 清单.txt 使用您选择的文本编辑器打开文件并在其中添加以下行 -
Main-Class: flume.mytwittersource.MyTwitterSourceForFlume
.. 这里 flume.mytwittersource.MyTwitterSourceForFlume 是主类的名称。请注意,您必须在此行末尾按回车键。
现在,创建 JAR'MyTwitterSourceForFlume.jar' 作为-
jar cfm MyTwitterSourceForFlume.jar Manifest.txt flume/mytwittersource/*.class
步骤5) 将此 jar 复制到 /lib/
sudo cp MyTwitterSourceForFlume.jar <Flume Installation Directory>/lib/
步骤6) 进入Flume的配置目录, /conf
如果flume.conf不存在,则复制flume-conf.properties.template并重命名为flume.conf
sudo cp flume-conf.properties.template flume.conf
If flume-env.sh 不存在,则复制 flume-env.sh.模板 并将其重命名为 flume-env.sh
sudo cp flume-env.sh.template flume-env.sh
创建 Twitter 应用程序
步骤1) 通过登录创建 Twitter 应用程序 https://developer.twitter.com/
步骤2) 在MyCAD中点击 软件更新 “我的申请” (此选项在以下情况下会被删除: '蛋' 点击右上角的按钮)
步骤3) 单击创建新应用程序 “创建新应用程序”
步骤4) 填写应用程序详细信息,指定应用程序名称、描述和网站。您可以参考每个输入框下方的注释。
步骤5) 向下滚动页面并通过标记接受条款 '是的我同意' 并点击按钮“创建你的 Twitter 应用程序”
步骤6) 在新创建的应用程序窗口中,转到选项卡, “API 密钥” 向下滚动页面并点击按钮 “创建我的访问令牌”
步骤7) 刷新页面。
步骤8) 点击 “测试 OAuth”. 这将显示 “OAuth” 应用程序的设置。
步骤9) 修改 ‘flume.conf’ 使用这些 OAuth 设置. 修改步骤 ‘flume.conf’ 下面给出。
我们需要复制消费者密钥、消费者机密、访问令牌和访问令牌机密来更新“flume.conf”。
注意:这些值属于用户,因此是机密的,不应共享。
修改 flume.conf 文件
步骤1) 可选 ‘flume.conf’ 处于写入模式并设置以下参数的值-
sudo gedit flume.conf
复制以下内容-
MyTwitAgent.sources = Twitter MyTwitAgent.channels = MemChannel MyTwitAgent.sinks = HDFS MyTwitAgent.sources.Twitter.type = flume.mytwittersource.MyTwitterSourceForFlume MyTwitAgent.sources.Twitter.channels = MemChannel MyTwitAgent.sources.Twitter.consumerKey = <Copy consumer key value from Twitter App> MyTwitAgent.sources.Twitter.consumerSecret = <Copy consumer secret value from Twitter App> MyTwitAgent.sources.Twitter.accessToken = <Copy access token value from Twitter App> MyTwitAgent.sources.Twitter.accessTokenSecret = <Copy access token secret value from Twitter App> MyTwitAgent.sources.Twitter.keywords = guru99 MyTwitAgent.sinks.HDFS.channel = MemChannel MyTwitAgent.sinks.HDFS.type = hdfs MyTwitAgent.sinks.HDFS.hdfs.path = hdfs://localhost:54310/user/hduser/flume/tweets/ MyTwitAgent.sinks.HDFS.hdfs.fileType = DataStream MyTwitAgent.sinks.HDFS.hdfs.writeFormat = Text MyTwitAgent.sinks.HDFS.hdfs.batchSize = 1000 MyTwitAgent.sinks.HDFS.hdfs.rollSize = 0 MyTwitAgent.sinks.HDFS.hdfs.rollCount = 10000 MyTwitAgent.channels.MemChannel.type = memory MyTwitAgent.channels.MemChannel.capacity = 10000 MyTwitAgent.channels.MemChannel.transactionCapacity = 1000
步骤2) 另外,设定 TwitterAgent.sinks.HDFS.hdfs.path 如下,
TwitterAgent.sinks.HDFS.hdfs.path = hdfs:// : / /flume/推文/
要知道 , 和 ,查看参数值 ‘fs.defaultFS’ 设置在 $HADOOP_HOME/etc/hadoop/核心站点.xml
步骤3) 为了将数据刷新到 HDFS,当它出现时,删除以下条目(如果存在),
TwitterAgent.sinks.HDFS.hdfs.rollInterval = 600
示例:使用 Flume 传输 Twitter 数据
步骤1) 可选 ‘flume-env.sh’ 处于写入模式并设置以下参数的值,
JAVA_HOME=<Installation directory of Java>
FLUME_CLASSPATH="<Flume Installation Directory>/lib/MyTwitterSourceForFlume.jar"
步骤2) 启动 Hadoop
$HADOOP_HOME/sbin/start-dfs.sh
$HADOOP_HOME/sbin/start-yarn.sh
步骤3) Flume 压缩包中的两个 JAR 文件与 Hadoop 2.2.0 不兼容。因此,我们需要按照此 Apache Flume 示例中的以下步骤使 Flume 与 Hadoop 2.2.0 兼容。
a. 移动 protobuf-java-2.4.1.jar 位客人评分中获得平均 ‘ /lib'。
在MyCAD中点击 软件更新 ‘ /lib'
光盘/lib
sudo mv protobuf-java-2.4.1.jar ~/
b. 查找 JAR 文件“guava”,如下所示
find . -name "guava*"
移动 guava-10.0.1.jar 位客人评分中获得平均 ‘ /lib'。
sudo mv guava-10.0.1.jar ~/
c. 下载 guava-17.0.jar 在 http://mvnrepository.com/artifact/com.google.guava/guava/17.0
现在,将下载的 jar 文件复制到 ‘ /lib'
步骤4) 在MyCAD中点击 软件更新 ‘ /垃圾桶' 并启动 Flume 作为-
./flume-ng agent -n MyTwitAgent -c conf -f <Flume Installation Directory>/conf/flume.conf
flume 正在获取推文的命令提示符窗口-
从命令窗口消息中我们可以看到输出写入 /用户/hduser/flume/推文/ 目录。
现在,使用 Web 浏览器打开此目录。
步骤5) 要查看数据加载的结果,请使用浏览器打开 http://localhost:50070/ 并浏览文件系统,然后转到已加载数据的目录,即-
/flume/推文/