CentOS 7 配置hadoop(六) 配置flume(伪分布)错误: 找不到或无法加载主类 org.apache.flume.tools.GetJavaProperty

一.环境准备:linux + java的Jdk1.6以上版本

二.安装包下载地址:https://flume.apache.org/download.html

(下文我会用下载的apache-flume-1.6.0-bin.tar.gz包为例进行安装

三.进行安装flume,解压安装包,配置flume环境变量。

1.解压安装包到/app目录下,解压并且修改文件名为flume-1.6(简单好记)

mkdir ./flume-1.6 && tar -xzvf apache-flume-1.6.0-bin.tar.gz -C ./flume-1.6  --strip-components 1 

2. 配置环境变量

在 vi /etc/profile末尾追加

vi /etc/profile

export FLUME_HOME=/root/app/flume-1.6
export FLUME_CONF_DIR=$FLUME_HOME/conf
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$FLUME_HOME/bin

source /etc/profile

3.配置flume配置文件的环境变量

把flume-env.sh.template拷贝并重命名为flume-env.sh

  cd /root/app/flume-1.6/conf/

cp flume-env.sh.template flume-env.sh

 进入 flume-env.sh将export JAVA_OPTS 的  #  号去掉,并在末尾追加  jdk  的路径

 

 :wq! 保存并退出

4.进到flume目录下 bin 目录 创建 dir-hdfs.conf 文件 (touch dir-hdfs.conf), 文件内容是下方的代码 

#定义三大组件的名称
ag1.sources = source1
ag1.sinks = sink1
ag1.channels = channel1

# 配置source组件
ag1.sources.source1.type = spooldir
ag1.sources.source1.spoolDir = /root/data/log
ag1.sources.source1.fileSuffix=.FINISHED
ag1.sources.source1.inputCharset=utf-8
ag1.sources.source1.deserializer.maxLineLength=5120

# 配置sink组件
ag1.sinks.sink1.type = hdfs
ag1.sinks.sink1.hdfs.path =hdfs://master/access_log/%y-%m-%d/%H-%M
ag1.sinks.sink1.hdfs.filePrefix = app_log
ag1.sinks.sink1.hdfs.fileSuffix = .log
ag1.sinks.sink1.hdfs.batchSize= 100
ag1.sinks.sink1.hdfs.fileType = DataStream
ag1.sinks.sink1.hdfs.writeFormat =Text

## roll:滚动切换:控制写文件的切换规则
 ## 按文件体积(字节)来切   
ag1.sinks.sink1.hdfs.rollSize = 512000   
 ## 按event条数切
ag1.sinks.sink1.hdfs.rollCount = 1000000 
 ## 按时间间隔切换文件
ag1.sinks.sink1.hdfs.rollInterval = 60   

## 控制生成目录的规则(round回滚)
ag1.sinks.sink1.hdfs.round = true
ag1.sinks.sink1.hdfs.roundValue = 10
ag1.sinks.sink1.hdfs.roundUnit = minute
ag1.sinks.sink1.hdfs.useLocalTimeStamp = true

# channel组件配置
ag1.channels.channel1.type = memory
 ## event条数
ag1.channels.channel1.capacity = 500000  
##flume事务控制所需要的缓存容量600条event
ag1.channels.channel1.transactionCapacity = 600  

# 绑定source、channel和sink之间的连接
ag1.sources.source1.channels = channel1
ag1.sinks.sink1.channel = channel1

上方两个蓝色标记地方需要注意 :第一个是我们本地要采集的信息存放地址

                          第二个是我们信息输出的hdfs的地址   (ip的地方写上你的主机名)

               添加内容时记得把注解去掉

5.创建 源目录log 给与777权限 并且在log目录下存放需要采集的数据 a.log b.log c.log  (创建的地址就是你的第一个修改的采集信息存放的地址)

创建 log文件夹   cd /root/data/    mkdir log 

给log赋予权限 chmod 777 log      在log文件夹同级目录创建 hello.txt ,内容 hello world !!!

mkdir log

chmod 777 log/

touch hello.txt

echo hello world ! ! ! > hello.txt

cat hello.txt

6.验证flume的版本   

flume-ng version

7. 启动flume 在flume的目录下执行 下面命令

bin/flume-ng agent -c conf/ -f dir-hdfs.conf -n ag1 -Dflume.root.logger=INFO,console

四.但是我在配置完flume的时候发现验证flume版本与启动flume的时候发现报了异常

然后我上网搜了搜解决方法,下面给大家分享一下:

错误: 找不到或无法加载主类 org.apache.flume.tools.GetJavaProperty

 

我是通过第二种方法解决的,第一种方法我也用了,但是不知道为什么没有解决。

具体原因我也不清楚,如果知道的大佬知道具体原因,希望指点一下。

1,第一种解决方法

(1),jdk冲突

卸载自带的openjdk

安装jdk1.8   

(2),配置安装了hbase之后 冲突就会报错

将 hbase 的 hbase.env.sh 的一行配置注释掉
#Extra Java CLASSPATH elements. Optional.
#export HBASE_CLASSPATH=/home/hadoop/hbase/conf
4、或者将 HBASE_CLASSPATH 改为 JAVA_CLASSPATH, 配置如下
#Extra Java CLASSPATH elements. Optional.
export JAVA_CLASSPATH=.:JAVAHOME/lib/dt.jar:JAVA_HOME/lib/dt.jar:JAVAHOME/lib/dt.jar:JAVA_HOME/lib/tools.jar

 

第二种:

flume自身的问题,脚本问题

解决办法:

修改 

vi flume-ng

在HBASE这个地方增加图中红色框框内容

/dev/null是一个特殊的设备文件,这个文件接收到任何数据都会被丢弃。因此,null这个设备通常也被称为位桶(bit bucket)或黑洞。

所以,2>/dev/null的意思就是将标准错误stderr删掉。

 

 再次检测flume版本

 到这里我们的flume就配置完成了

 

 

作者:旧歌
链接: https://www.cnblogs.com/wdyjt/p/14179778.html
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利

posted @ 2020-12-23 17:22  旧歌  阅读(502)  评论(0编辑  收藏  举报