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.shcd /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就配置完成了