linux上安裝配置flume1.8.0過程

轉自:https://segmentfault.com/a/1190000011881177

記一次linux上安裝配置flume1.8.0過程

1、安裝jdk

需要1.6以上版本
參考文章 https://segmentfault.com/a/11...

2、下載flume

從官網下載壓縮包:http://flume.apache.org/downl...
clipboard.png

選擇apache-flume-1.8.0-bin.tar.gz,選擇鏡像地址開始下載,如:
wget http://mirrors.tuna.tsinghua.edu.cn/apache/flume/1.8.0/apache-flume-1.8.0-bin.tar.gz

3、解壓並安裝

  • 解壓tar -zxvf apache-flume-1.8.0-bin.tar.gz
    clipboard.png
  • 安裝:mv apache-flume-1.8.0-bin /opt/flume-1.8.0(放到想要安裝的目錄下,目錄名保存爲flume-1.8.0,如/opt)
    clipboard.png

4、配置

  • 修改配置文件:vi /opt/flume-1.8.0/conf/flume.conf
    clipboard.png

    此配置文件,配置了兩個source:s1和s2,一個channel,一個sink。s1監聽目錄/data/log目錄,並把信息寫入c1,s2監聽本機所有ip(0.0.0.0)的80端口,信息也寫入c1,k1從c1讀取數據,寫入flume的日誌。

  • 配置文件說明:
配置項名稱 作用 舉例
agent1 flume節點名稱,啓動時通過參數命令-name指定  
agent1.sources 監聽的源,可以有多個,空格隔開即可,用於收集數據併發送到channel agent1.sources=s1 s2
agent1.channels 臨時通道,可以有多個,空格隔開,存放source收集的數據,sink從這裏讀取數據 agent1.channels=c1
agent1.sinks 接收器,可以有多個,空格隔開,從channel讀取數據,併發送給目標 (比如kafka 或者hdfs或者另一個flume) agent1.sinks=k1
agent.sources.s1.type 源的類型,s1是源名稱,可以是目錄、日誌文件、或者監聽端口等。 常用的source的類型包括avro、exec、netcat、spooldir和syslog等. 具體請參考官網http://flume.apache.org/Flume... agent.sources.s1.type=spooldir agent.sources.s2.type=avro
agent1.sources.s1.channels 監聽數據要寫入的channel名稱 agent1.sources.s1.channels=c1
agent1.channels.c1.type 通道的類型,c1爲通道名稱,此處memory表示爲常用的memory-channel, 同時也有其他類型的channel,如JDBC、file-channel、custom-channel等, 具體請參考官網http://flume.apache.org/Flume... agent1.channels.c1.type=memory
agent1.sinks.k1.type 接收器類型,k1爲接收器名稱,此處logger表示直接寫入日誌, 常用的包括avro、logger、HDFS、Hbase以及file-roll等, 具體參考官網http://flume.apache.org/Flume... agent1.sinks.k1.type=logger

5、啓動

/opt/flume-1.8.0/bin/flume-ng agent --conf conf --conf-file conf/flume.conf --name agent1 -Dflume.root.logger=INFO,console
  • 啓動命令參數說明:
參數 作用 舉例
–conf 或 -c 指定配置文件夾,包含flume-env.sh和log4j的配置文件 –conf conf
–conf-file 或 -f 配置文件地址 --conf-file conf/flume.conf
–name 或 -n agent(flume節點)名稱 --name agent1

6、錯誤說明

  • 監聽端口被佔用:
    java.net.BindException:地址已在使用

    clipboard.png


  • 接收協議與client發送數據協議不一致:

    clipboard.png
    設置爲avro 時,可能會出現這樣的錯誤。比如:flume接收avro,client發送tcp,可把avro改爲netcat
    clipboard.png


  • sink讀不到數據:

       若兩個sink讀取同一個c1   同一個消息,每次只有一個sink讀取成功。
       channel 的內容只輸出一次,同一個event 如果sink1 輸出,sink2 不輸出;如果sink1 輸出,sink1 不輸出。 
       最終 sink1+sink2=channel 中的數據
       ![clipboard.png](/img/bVX0Vf)
    

錯誤記錄

1、Caused by: java.lang.NullPointerException:Excepted timestamp in the Flume event headers, but it was null...
clipboard.png

  • 原因:
    寫入到hdfs時使用到了時間戳來區分目錄結構,flume的消息組件event在接受到之後在header中沒有發現時間-戳參數,導致該錯誤發生
  • 解決辦法:
    有三種解決辦法:(重啓生效)

    • 爲source添加timestamp攔截器,沒調event頭中加入時間戳(效率會慢點)agent1.sources.source1.interceptors.t1.type=timestamp
    • 爲sink使用本地時間戳agent1.sinks.sink1.hdfs.useLocalTimeStamp=true即可(如果客戶端與flume集羣時間不一致,數據時間會不準確)
    • 在想source發送event時,講時間戳參數添加到event的header中即可,header是一個map,添加時mapkey爲timestamp

2、org.apache.hadoop.security.AccessControlException: Permission denied: user=flume, access=WRITE, inode="/flume":hdfs:supergroup:drwxr-xr-xr...
clipboard.png

  • 原因:
    flume用戶沒有hdfs讀寫權限,查看hdfs目錄發現沒有/flume:clipboard.png
  • 解決辦法:

    • 新建hdfs存儲目錄,如/flume (需要先su hdfs 否則沒有權限)clipboard.png
    • 授權:用戶權限和讀寫權限
      clipboard.png
      hadoop fs -chown -R flume:flume /flume
      hadoop fs -chmod -R 777 /flume

3、Configuration must specify a spooling derectory
clipboard.png

  • 原因:
    spoolDir=/data/... spoolDir區分大小寫

參考文章:http://blog.csdn.net/a921122/...

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章