1. 程式人生 > 實用技巧 >CentOS 7 配置hadoop(六) 配置flume(偽分佈)錯誤: 找不到或無法載入主類 org.apache.flume.tools.GetJavaProperty

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::$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 檔案 (touchdir-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就配置完成了