Storm常見問題及解決方案總結
摘要 Storm 是一個開源的、大數據處理系統,與其他大數據解決方案的不同之處在于它的處理方式。Hadoop 在本質上是一個批處理系統。數據被引入 Hadoop 文件系統 (HDFS) 并分發到各個節點進行處理。當處理完成時,結果數據返回到 HDFS 供始發者使用。Storm 支持創建拓撲結構來轉換沒有終點的數據流。不同于 Hadoop 作業,這些轉換從不停止,它們會持續處理到達的數據。
1、storm集群配置JDK環境變量問題
問題分析:在linux系統下配置JDK后一般修改/etc/profile值進行環境變量配置,但是安裝storm集群時會出現問題
問題解決:需要在/etc/.bashrc文件中也加入環境變量不然安裝的JDK無法使用。
2、supervisor相關問題
1)安裝后supervisor名稱相同并且啟動報錯問題
問題分析:supervisor.cji中有行代碼如下:
此代碼是在啟動supervisor時會找本機的hostname。
問題解決:修改每天機器的hostname與其相對應即可。
2)啟動Supervisor 時,出現java.lang.UnsatisfiedLinkError異常
具體錯誤信息如下:
啟動Supervisor 時,出現java.lang.UnsatisfiedLinkError: /usr/local/lib/libjzmq.so.0.0.0: libzmq.so.1: cannot open shared object file: No such file or directory 異常。
問題分析:未找到zmq 動態鏈接庫。
問題解決1:配置環境變量 export LD_LIBRARY_PATH=/usr/local/lib
問題解決2:編輯/etc/ld.so.conf 文件,增加一行:/usr/local/lib,再次執行即可
使用sudo ldconfig 命令,重啟Supervisor
3、發布topologies時,序列化log4j.Logger異常
問題分析:日志系統無法正確正確處理序列化操作
問題解決:使用slf4j替換log4j日志jar包處理
4、提交topology時出現如下異常:
Exception in thread "main" java.lang.IllegalArgumentException: xxx host is not set at backtype.storm.utils.NimbusClient.<init>(NimbusClient.java:30) at backtype.storm.utils.NimbusClient.getConfiguredClient(NimbusClient.java:17) at backtype.storm.StormSubmitter.submitJar(StormSubmitter.java:78) at backtype.storm.StormSubmitter.submitJar(StormSubmitter.java:71) at backtype.storm.StormSubmitter.submitTopology(StormSubmitter.java:50)
問題分析:啟動nimbus沒有問題,異常原因是conf_dir路徑設置錯誤
問題解決:修改bin/storm腳本,增加如下代碼:
CONF_DIR = STORM_DIR + "/conf"
5、在使用storm0.7一下版本時,時間長會出現outofmenmory
問題分析:低于storm0.7版本的沒觸發一個tuple會創建一個hashmap存儲該tuple所在的消息樹結構,長時間會給gc造成巨大的壓力導致出現outofmemory
問題解決:升級storm版本即可解決問題。
6、storm連接mysql數據庫報異常
連接遠程mysql數據庫時報如下錯誤:
message from server:"Host FILTER" is not allowed to connect to this MySQL server
問題分析:可能是沒有給其IP訪問Mysql數據庫權限導致
問題解決:登錄mysql數據庫,執行如下命令:
grant all on *.* to root@'%' identified by "123456";
此操作是給任意IP地址賦予訪問權限(命令中*.*是通配任何IP,可指定IP 用戶名:root 密碼:123456)