广州市建设集团网站首页,wap网站部署,济南网站建设老威,512内存 wordpress目录
Apache Hadoop生态-目录汇总-持续更新
一#xff1a;安装包准备
二#xff1a;安装与常用配置
2.1#xff1a;下载解压安装包
2.2#xff1a;解决guava版本问题
2.3#xff1a;修改配置
三#xff1a;修复Taildir问题
3.1#xff1a;Taildir Source能断点续…目录
Apache Hadoop生态-目录汇总-持续更新
一安装包准备
二安装与常用配置
2.1下载解压安装包
2.2解决guava版本问题
2.3修改配置
三修复Taildir问题
3.1Taildir Source能断点续传的原因 3.2Taildir Source滚动文件的问题
3.3修改源码解决滚动文件的问题
修改TailFile.java文件
修改ReliableTaildirEventReader.java文件
3.4打包重新发布 Apache Hadoop生态-目录汇总-持续更新
系统环境centos7
Java环境Java8
一安装包准备
方式1官网下载http://archive.apache.org/dist/flume/ 方式2安装包--百度网盘
链接https://pan.baidu.com/s/1rF5zGnZ72Yxq32re-hASbQ?pwdyyds
提取码yyds 二安装与常用配置
2.1下载解压安装包
cd /tmp
wget http://archive.apache.org/dist/flume/1.9.0/apache-flume-1.9.0-bin.tar.gz
或者百度网盘下载上传到这个目录下sudo tar -zxf /tmp/apache-flume-1.9.0-bin.tar.gz -C /usr/local/
sudo mv /usr/local/apache-flume-1.9.0-bin /usr/local/flume-1.9.0
2.2解决guava版本问题
Exception in thread SinkRunner-PollingRunner-DefaultSinkProcessor java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)V
# 解决guava版本问题
rm /usr/local/flume-1.9.0/lib/guava-11.0.2.jar
与hadoop统一版本
cp $HADOOP_HOME/share/hadoop/common/lib/guava-27.0-jre.jar /usr/local/flume-1.9.0/lib/
2.3修改配置
cp /usr/local/flume-1.9.0/conf/flume-env.sh.template /usr/local/flume-1.9.0/conf/flume-env.sh
vim /usr/local/flume-1.9.0/conf/flume-env.sh
export JAVA_HOME/usr/local/jdk1.8.0
三修复Taildir问题
所需的文件在百度网盘里都有
3.1Taildir Source能断点续传的原因
Taildir Source 维护了一个 json 格式的 position File其会定期的往 position File中更新每个文件读取到的最新的位置因此能够实现断点续传。
Position File 的格式如下
[{inode:52580042,pos:2,file:/tmp/flume/files/files1.txt}]
解释inode是linux服务器对文件的标识
注Linux 中储存文件元数据的区域就叫做 inode每个inode都有一个号码操作系统用inode号码来识别不同的文件Unix/Linux 系统内部不使用文件名而使用 inode 号码来标记文件 3.2Taildir Source滚动文件的问题
Taildir Source 使用 inode 绝对路径的方式记录读取的位置 一旦遇到文件会定时滚动更新导致文件被重复读取。
比如 hive.log每晚会更新为hive.log.xx.xx, 重建一个新的hive.log就导致新产生的hive.log.xx.xx文件会被再次上传一次修改文件名称 inode不变但是文件路径变了
3.3修改源码解决滚动文件的问题
解决思路修改源码只监控inode
下载flume的源码包http://archive.apache.org/dist/flume/1.9.0/ 目录apache-flume-1.9.0-src\apache-flume-1.9.0-src\flume-ng-sources\flume-taildir-source 修改TailFile.java文件
修改flume-ng-sources\flume-taildir-source\src\main\java\org\apache\flume\source\taildir\TailFile.java文件
修改TailFile.java文件 122行
public boolean updatePos(String path, long inode, long pos) throws IOException {
// if (this.inode inode this.path.equals(path)) { # 原先的if (this.inode inode) { // 修改为setPos(pos);updateFilePos(pos);logger.info(Updated position, file: path , inode: inode , pos: pos);return true;}return false;
}
修改ReliableTaildirEventReader.java文件
修改flume-ng-sources\flume-taildir-source\src\main\java\org\apache\flume\source\taildir\ReliableTaildirEventReader.java文件
修改ReliableTaildirEventReader.jar 254行TailFile tf tailFiles.get(inode);
// if (tf null || !tf.getPath().equals(f.getAbsolutePath())) { 原先的if (tf null) { // 修改为long startPos skipToEnd ? f.length() : 0;tf openFile(f, headers, inode, startPos);} else {
3.4打包重新发布 重新发布
把原来的jar包改个名字备份一下
mv /usr/local/flume-1.9.0/lib/flume-taildir-source-1.9.0.jar /usr/local/flume-1.9.0/lib/flume-taildir-source-1.9.0.jar.bak进入服务器客户端flume安装位置进入lib目录把打包好的flume-taildir-source-1.9.0.jar包上传上去