• 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
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利

  • 相关阅读:
    虚拟DOM和diff算法
    面向对象之封装
    面向对象之类和函数的属性
    面向对象之__init__方法
    面向对象之初始类和对象
    面向对象与面向过程详解
    CSS高级技巧
    CSS定位
    模块之re模块详解
    模块之logging模块详解
  • 原文地址:https://www.cnblogs.com/wdyjt/p/14179778.html
Copyright © 2020-2023  润新知