轉載文檔:Storm實戰常見問題及解決方案

来源:http://www.cnblogs.com/zpfbuaa/archive/2016/10/15/5964536.html
-Advertisement-
Play Games

Storm集群部署以及使用Storm中產生的問題以及相應的解決方案 ...


該文檔為實實在在的原創文檔,轉載請註明:

http://blog.sina.com.cn/s/blog_8c243ea30101k0k1.html

類型

詳細

備註

該文檔是群里幾個朋友在storm實戰中遇到的一些問題,及其對應解決辦法。

 

 

相關描述

²  其他相關文檔請參考新浪博客http://blog.sina.com.cn/huangchongyuan

²  有任何其他想法,可以郵件[email protected]

² 文檔及相關資料下載請個人360雲盤http://yunpan.cn/QGf2GDaRFpcDt及百度文庫、新浪愛問搜索。

²  部分文檔涉及到源碼,有需要的博客留言,關註我的博客。

² 歡迎加入storm-分散式-IT技術交流群(191321336,群中有詳細的資料),一起討論技術,一起分享代碼,一起分享設計。

 

 

目錄

文檔說明... 2

問題錦集... 2

1 關於Storm集群... 2

1.1 關於storm集群的環境變數配置問題... 2

1.2 關於zookeeper集群安裝問題... 2

1.3 關於Storm中tuple 的可靠處理問題... 2

1.4 關於storm計算結果的存放問題... 3

1.5 關於Storm如何處理重覆的tuple問題... 3

1.6 關於task與executor的關係問題... 3

1.7 關於Storm UI顯示內容的問題... 3

1.8 關於Storm的ack和fail問題... 3

1.9 關於IRichBolt與IBasicBolt介面的區別... 4

2 關於Topology發佈... 4

2.1 發佈topologies 到遠程集群時,出現Nimbus host is not set 異常... 4

2.2 發佈topology到遠程集群時,出現AlreadyAliveException(msg: xxx is alreadyactive)異常    4

2.3 啟動Supervisor 時,出現java.lang.UnsatisfiedLinkError. 4

2.4 發佈topologies 時,出現不能序列化log4j.Logger 的異常... 4

2.5 bolt 在處理消息時,worker 的日誌中出現Failing message. 5

2.6 在打包toplogy工程的時候, 如果採用assembly方式, 對於相關的依賴的配置一般要這樣: 5

2.7 在提交topology的時候有時可能出現如下異常: 5

3 關於DRPC. 6

3.1 發佈drpc 類型的topologies 到遠程集群時,出現空指針異常,連接drpc伺服器失敗... 6

3.2 客戶端調用drpc 服務時,worker 的日誌中出現Failingmessage,而bolt都未收到數據    6

4 關於jzmq安裝... 6

4.1 storm 啟動時報no jzmq in java.library.path 錯誤... 6

4.2 安裝jzmq 時遇到No rule to make target ‘classdist_noinst.stamp’的make錯誤... 7

4.3 安裝jzmq 時遇到cannot access org.zeromq.ZMQ 的make 錯誤... 7

4.4  在部署storm節點的時候需要安裝jzmq和zeromq, 在安裝這兩個依賴包之後,需要執行sudo -u root ldconfig. 否則會出現異常: 7

5 關於Storm的配置問題... 7

6 關閉storm相關進程... 8

6.1 關閉nimbus相關進程: 8

6.2 幹掉supervisor上的所有storm進程: 8

7 關於Topology發佈之後的log. 8

8 關於maven打包問題... 9

8.1 首先maven的pom文件中的storm依賴,要麼加excludestorm的相關語句(github有說明),要麼加<scope>,如下:    9

8.2 使用maven插件,在打jar包時,包含依賴。... 9

8.3 依賴的jar衝突問題... 10

9 關於nimbus的啟動問題... 10

9.1 Storm nimbus啟動失敗... 10

10 Storm使用JVM參數... 11

11 關於spout/bolt的生命周期... 11

12  關於storm與spring框架集成問題... 11

13 關於java.lang.NoClassDefFoundError: clojure.core.protocols$.12

14 關於storm連接Mysql 13

15 關於metaq啟動的出現服務拒絕連接的問題... 13

16 關於topology的spout與bolt. 13

17 關於shell腳本編碼格式問題... 13

17.1 解決方案(一):... 13

17.2 解決方案(二)... 13 

 

文檔說明

該文檔包涵了storm實戰中經常遇到一些問題,及對應解決方案。這個文檔是群里一個朋友在學習storm,並實戰storm中遇到的一些問題,及和群里其他朋友一起交流給出的對應解決方案,並由他整理好,委托我發佈出來(也算是交流者之一),供大家參考,希望能對大家有所幫助。

感謝 某某(哈哈 鑒於部分原因,不便透露名字~~~~!)…

 

問題錦集

 

1關於Storm集群

 

1.1關於storm集群的環境變數配置問題

安裝好JDK後,需要配置環境變數,通常情況下出於經驗,我們往往會修改/etc/profile的值進行環境變數配置,但這在安裝JDK以及後面安裝的storm集群、zookeeper集群以及metaq集群時會出問題,這時候我們需要在/etc/.bashrc文件中加入環境變數,不然安裝的Java和ZK集群等就無法使用,尤其這個問題在我用shell寫調度腳本去啟動storm集群的時候就遇到過,如果沒有將java的環境變數配置在/etc/.bashrc文件中,就會報一個錯,這個問題在後面我會提到。

1.2關於zookeeper集群安裝問題

記得剛剛接觸storm,在安裝zookeeper集群的時候有這樣的考慮:為什麼不可以把zookeeper只安裝在nimbus上,然後讓其他的supervisor來它這裡讀取任務?如果在每台機器上都安裝zookeeper,那nimbus分配任務的時候,是每台機器上的zookeeper都收到同一份的任務,還是只是將分配給每個supervisor節點的那部分寫到同一節點上的zookeeper中?

 

有朋友解答說:ZK也是以集群的方式工作的,ZK集群內部有他自己的一套相互通信機制,而storm正是要藉助其通訊機制,例如任務下發等,往往在執行一個任務的時候,storm會把任務及相關執行的代碼經過序列化之後發送到各個ZK節點供supervisor去下載,然後才會各自執行自己部分的代碼或者任務。說的直接一點就是每個ZK節點收到的任務是一樣的,而supervisor只需要下載屬於自己的任務即可。

1.3關於Storm中tuple 的可靠處理問題

Storm 為了保證tuple 的可靠處理,需要保存tuple 信息,這樣會不會導致記憶體泄漏?

關於這個問題,其實網上是有資料進行了詳細的解釋的。這裡只是大概將一下,如果還不明白,可以上網搜搜“storm可靠處理”。Storm為了保證tuple 的可靠處理,acker 會保存該節點創建的tuple id的xor (異或)值,這個值稱為ackvalue,那麼每ack 一次,就將tuple id 和ack value做異或(xor)。當所有產生的tuple 都被ack的時候,ack value 必定為0。這是個很簡單的策略,對於每一個tuple 也只要占用約20個位元組的記憶體。對於100萬tuple,也才20M 左右,所以一般情況下是不用考慮記憶體泄漏問題的。

1.4關於storm計算結果的存放問題

很多人在剛剛學習Storm 的時候都會有這個問題:storm處理後的結果保存在哪裡? 記憶體中?還是其他地方?

官方解釋說: Storm是不負責保存計算結果的,這是應用程式里需要負責的事情,如果數據不大,你可以簡單地保存在記憶體里,也可以每次都更新資料庫,也可以採用NoSQL存儲。storm並沒有像s4 那樣提供一個PersistAPI,根據時間或者容量來做存儲輸出。這部分事情完全交給用戶。數據存儲之後的展現,也是你需要自己處理的,storm UI只提供對topology 的監控和統計。

1.5關於Storm如何處理重覆的tuple問題

有人問到Storm 是怎麼處理重覆的tuple?

因為Storm 要保證tuple 的可靠處理,當tuple 處理失敗或者超時的時候,spout 會fail並重新發送該tuple,那麼就會有tuple 重覆計算的問題。這個問題是很難解決的,storm也沒有提供機制幫助你解決。不過也有一些可行的策略:

(1)不處理,這也算是種策略。因為實時計算通常並不要求很高的精確度,後

續的批處理計算會更正實時計算的誤差。

(2)使用第三方集中存儲來過濾,比如利用MySQL、MemCached 或者Redis 根據邏輯主鍵來去重。

(3)使用bloom filter 做過濾,簡單高效。

1.6關於task與executor的關係問題

在storm的學習過程中,有許多人問到task與executor的關係問題。

在我們安裝配置storm的時候,不知大家是否主要到了一個問題,就是我們在配置的時候會加幾個worker的埠(supervisor.slots.ports:),比如眾多文檔中提到的6700/6701等等類似的東西。沒錯,這就是我們定義了該supervisor最多的worker數,worker中執行一個bolt或者spout線程,我們就稱之為task,而executor是物理上的線程概念,我們可以將其稱為執行線程;而task更多是邏輯概念上的,有時候bolt與spout的task會共用一個executor,特別是在系統負荷比較高的時候。

1.7關於Storm UI顯示內容的問題

Storm UI 里spout 統計的complete latency 的具體含義是什麼?為什麼emit 的數目會是acked的兩倍?

簡單地說,complete latency 表示了tuple 從emit 到被acked 經過的時間,可以認為是tuple以及該tuple 的後續子孫(形成一棵樹)整個處理時間。其次spout 的emit 和transfered 還統計了spout和acker 之間內部的通信信息,比如對於可靠處理的spout 來說,會在emit 的時候同時發送一個_ack_init給acker,記錄tuple id 到task id 的映射,以便ack 的時候能找到正確的acker task。

1.8關於Storm的ack和fail問題

在學習storm的過程中,有不少人對storm的Spout組件中的ack及fail相關的問題存在困惑,這裡做一個簡要的概述。

Storm保證每一個數據都得到有效處理,這是如何保證的呢?正是ack及fail機制確保數據都得到處理的保證,但是storm只是提供給我們一個介面,而具體的方法得由我們自己來實現。例如在spout下一個拓撲節點的bolt上,我們定義某種情況下為數據處理失敗,則調用fail,則我們可以在fail方法中進行數據重發,這樣就保證了數據都得到了處理。其實,通過讀storm的源碼,裡面有講到,有些類(BaseBasicBolt?)是會自動調用ack和fail的,不需要我們程式員去ack和fail,但是其他Bolt就沒有這種功能了。

1.9關於IRichBolt與IBasicBolt介面的區別

首先從類的組成上進行分析可以看到,IBasicBolt介面只有execute方法和declareOutputFields方法,而IRichBolt介面上除了以上幾個方法還有prepare方法和cleanup及map方法。而且其中execute方法是有些不一樣的,其參數列表不同。

總體來說Rich方法比較完善,我們可以使用prepare方法進行該Bolt類的初始化工作,例如我們鏈接資料庫時,需要進行一次資料庫連接操作,我們就可以把該操作放入prepare中,只需要執行一次就可以了。而cleanup方法能在該類調用結束時進行收尾工作,往往在處理數據的時候用到,例如在寫hdfs(Hadoop的文件系統)數據的時候,在結束時需要進行數據clear,則需要進行數據收尾。當然,根據官網及實際的測驗,該方法往往是執行失敗的。

 

2關於Topology發佈

 

2.1發佈topologies 到遠程集群時,出現Nimbus host is not set 異常

原因是Nimbus 沒有被正確啟動起來,可能是storm.yaml 文件沒有配置,或者配置有問題。

解決方法:打開storm.yaml 文件正確配置:nimbus.host: "xxx.xxx.xxx.xxx",重啟nimbus後臺程式即可。

2.2發佈topology到遠程集群時,出現AlreadyAliveException(msg: xxx is alreadyactive)異常

原因是提供的topology 與已經在運行的topology 重名。

解決方法:發佈時換一個拓撲名稱即可。

2.3啟動Supervisor 時,出現java.lang.UnsatisfiedLinkError

具體信息:啟動Supervisor 時,出現java.lang.UnsatisfiedLinkError:

/usr/local/lib/libjzmq.so.0.0.0: libzmq.so.1: cannot open sharedobject

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。

2.4發佈topologies 時,出現不能序列化log4j.Logger 的異常

原因是日誌系統無法正確支付序列化。

解決方法:使用slf4j 代替log4j。

2.5bolt 在處理消息時,worker 的日誌中出現Failing message

原因:可能是因為Topology 的消息處理超時所致。

解決方法:提交Topology 時設置適當的消息超時時間,比預設消息超時時間(30

秒)更長。比如:

conf.setMessageTimeoutSecs(60);

2.6在打包toplogy工程的時候, 如果採用assembly方式,對於相關的依賴的配置一般要這樣: 

Xml代碼  

1. <dependencySets>  

2.         <dependencySet>  

3.             <outputDirectory>/</outputDirectory>  

4.             <unpack>true</unpack>  

5.             <excludes>  

6.                 <exclude>storm:storm</exclude>  

7.             </excludes>  

8.         </dependencySet>  

9.     </dependencySets>  

 

wiki上說可以用<scope>compile</scope>。然後將storm依賴設置為runtime,貌似不行。 另外就是所有的依賴包將全部解壓,然後將所有依賴的配置和class文件生成一個文件。這個是通過<unpack>true</unpack>參數來控制的。

2.7在提交topology的時候有時可能出現如下異常: 

Exception in thread "main"java.lang.IllegalArgumentException: Nimbus host is notset 
       atbacktype.storm.utils.NimbusClient.<init>(NimbusClient.java:30) 
       atbacktype.storm.utils.NimbusClient.getConfiguredClient(NimbusClient.java:17) 
       atbacktype.storm.StormSubmitter.submitJar(StormSubmitter.java:78) 
       atbacktype.storm.StormSubmitter.submitJar(StormSubmitter.java:71) 
       atbacktype.storm.StormSubmitter.submitTopology(StormSubmitter.java:50) 
       atcom.taobao.kaleidoscope.storm.IcdbTopology.main(IcdbTopology.java:59)

 

但是啟動nimbus是沒有問題的, 這個主要因為conf_dir路徑設置不正確,在bin/storm腳本中需要加上這樣一句: 

Python代碼  

1. CONF_DIR = STORM_DIR + "/conf"  

 

 

3關於DRPC

 

3.1發佈drpc 類型的topologies 到遠程集群時,出現空指針異常,連接drpc伺服器失敗

原因是未正確配置drpc 伺服器地址。

解決方法:在conf/storm.yaml 文件中增加drpc 伺服器配置,啟動配置文件中

指定的所有drpc 服務。內容如下:

drpc.servers:

- "drpc 伺服器ip"

3.2客戶端調用drpc 服務時,worker 的日誌中出現Failing message,而bolt都未收到數據

錯誤日誌如下所示:

2011-12-02 09:59:16 task [INFO] Failing message

backtype.storm.drpc.DRPCSpout$DRPCMessageId@3770bdf7: source:1:27,

stream: 1, id: {-5919451531315711689=-5919451531315711689},

[foo.com/blog/1, {"port":3772,"id":"5","host":"10.0.0.24"}]

 

原因是主機名,功能變數名稱,hosts 文件配置不正確會引起這類錯誤。

解決方法:檢查並修改storm 相關機器的主機名,功能變數名稱,hosts 文件。重啟網路服務:service networkrestart。重啟storm,再次調用drpc 服務,成功。Hosts 文件中必須包含如下

內容:

[nimbus 主機ip] [nimbus 主機名] [nimbus 主機別名]

[supervisor 主機ip] [supervisor 主機名] [supervisor 主機別名]

[zookeeper 主機ip] [zookeeper 主機名] [zookeeper 主機別名]

 

4關於jzmq安裝

 

4.1storm 啟動時報no jzmq in java.library.path 錯誤

原因是找不到jzmq,預設情況下在執行install_zmq.sh 時,那些.so 文件

安裝路徑在/usr/local/lib,但是實際安裝時可能裝在其他的路徑下了。

解決方法:在storm.yaml 中添加:

java.library.path:

"/opt/storm/jzmq/lib:/opt/storm/zeromq/lib:/usr/local/lib:/opt/local/

lib:/usr/lib"

4.2安裝jzmq 時遇到No rule to make target ‘classdist_noinst.stamp’的make錯誤

具體的make 錯誤信息:

make[1]: *** No rule to make target`classdist_noinst.stamp',needed by `org/zeromq/ZMQ.class'.Stop.

解決方法:手動創建classdist_noinst.stamp 空文件。

touch src/classdist_noinst.stamp

4.3安裝jzmq 時遇到cannot access org.zeromq.ZMQ 的make 錯誤

具體的make 錯誤信息:

error: cannot access org.zeromq.ZMQ class file fororg.zeromq.ZMQ not found

javadoc: error - Class org.zeromq.ZMQ not found.

解決方法:手動編譯,然後重新make 即可通過。

cd src

javac -d . org/zeromq/*.java

cd ..

4.4 在部署storm節點的時候需要安裝jzmq和zeromq, 在安裝這兩個依賴包之後,需要執行sudo -u root ldconfig. 否則會出現異常: 

2012-02-24 16:30:30 worker [ERROR] Error oninitialization of server mk-worker 
java.lang.UnsatisfiedLinkError: /usr/local/lib/libjzmq.so.0.0.0:libzmq.so.1: cannot open shared object file: No such fileor 
directory 
       at java.lang.ClassLoader$NativeLibrary.load(NativeMethod) 
       atjava.lang.ClassLoader.loadLibrary0(ClassLoader.java:1803) 
       atjava.lang.ClassLoader.loadLibrary(ClassLoader.java:1728) 
       atjava.lang.Runtime.loadLibrary0(Runtime.java:823) 
       atjava.lang.System.loadLibrary(System.java:1028) 
       atorg.zeromq.ZMQ.<clinit>(ZMQ.java:34)

 

5關於Storm的配置問題

 

1.       yaml跟我們一般用的屬性配置文件有所不同, 它的要求更嚴格一些,因此在往conf/storm.yaml中添加配置的時候必須註意,比如必須註意開始位置和冒號後面的空格, 否則配置不會生效。

2.       如何檢查配置是否生效?

可以使用命令: storm localconfvalue 配置關鍵字

 但是這個命令只能在nimbus上生效, 在supervisor看到的還是預設值.不知道為什麼 。

 

6關閉storm相關進程

 

6.1關閉nimbus相關進程: 

kill `ps aux | egrep '(daemon\.nimbus)|(storm\.ui\.core)' |fgrep -v egrep | awk '{print $2}'` 

備註:這是在網上看到的,沒有經過實際測試,有興趣的朋友可以自己測試一下。

6.2幹掉supervisor上的所有storm進程: 

kill `ps aux | fgrep storm | fgrep -v 'fgrep' | awk '{print$2}'` 

備註:這是在網上看到的,沒有經過實際測試,有興趣的朋友可以自己測試一下。

 

7關於Topology發佈之後的log

 

1)       用storm jar...將項目提交給storm集群後,想查看本項目的log信息,要到supervisor機器的:storm安裝路徑/logs/worker-number.log(其中的number視實際情況而定)中查看。

2)       如果是用daemontools啟動的storm,daemontools監控的目錄是/service/storm,那麼到/service/storm/logs中查看worker-number.log日誌。

3)       若要更改log的級別,是debug還是info等,在storm安裝路徑/log4j下有個配置文件,按需要修改即可。

4)       Storm的debug模式下,它本身的log非常龐大,所以我覺得自己的代碼中有些重要的信息,用info比較好,這樣將storm的log級別調整為info比較方便查看。

 

8關於maven打包問題

 

8.1首先maven的pom文件中的storm依賴,要麼加excludestorm的相關語句(github有說明),要麼加<scope>,如下:

                  <dependency>

                           <groupId>storm</groupId>

                           <artifactId>storm</artifactId>

                           <scope>test</scope>

                  </dependency>

加scope可以使打jar包時,不包含storm。如果包含了storm,那麼提交到storm集群,會運行出錯。官方要求打jar包時,要去除storm的依賴。

8.2使用maven插件,在打jar包時,包含依賴。

在pom中加入:

<plugin>

      <artifactId>maven-assembly-plugin</artifactId>

      <configuration>

             <descriptorRefs>

                    <descriptorRef>jar-with-dependencies</descriptorRef>

             </descriptorRefs>

             <archive>

                    <manifest>

                           <mainClass>com.path.to.main.Class</mainClass>

                    </manifest>

             </archive>

      </configuration>

</plugin>

打jar包時使用命令:mvn assembly:assembly

8.3依賴的jar衝突問題

如果本地依賴的jar與storm的lib下的jar有衝突,即都用了一個jar,但是版本不同,那麼貌似目前只能改為跟storm保持統一。官方的討論組是這樣說的。

 

9關於nimbus的啟動問題

 

9.1 Stormnimbus啟動失敗

在使用了storm一段時間後,需要重新部署storm的集群,主要是想將storm部署在其它機器上。做了以下錯誤操作:

        1) 沒有kill 正在運行的topology,kill nimbus和supervisor的storm進程

        2) 刪除了配置中"storm.local.dir"的文件夾內的內容

        3) 啟動storm nimbus

報錯:
backtype.storm.daemon.nimbus 
$fn__2692$exec_fn__945__auto____2693$this__2731@62135133 
java.io.FileNotFoundException: File'/opt/apps-install/storm/ 
storm_local/nimbus/stormdist/appFailed-6-1325065153/stormconf.ser' 
does not exist 
       at 
org.apache.commons.io.FileUtils.openInputStream(FileUtils.java:137) 
       at 
org.apache.commons.io.FileUtils.readFileToByteArray(FileUtils.java: 
1135) 
       atbacktype.storm.daemon.nimbus 
$read_storm_conf.invoke(nimbus.clj:128) 
       atbacktype.storm.daemon.nimbus 
$compute_new_task__GT_node_PLUS_port.invoke(nimbus.clj:244) 
       atbacktype.storm.daemon.nimbus 
$mk_assignments.invoke(nimbus.clj:288) 
       atbacktype.storm.daemon.nimbus 
$fn__2692$exec_fn__945__auto____2693$this__2731.invoke(nimbus.clj:460) 
       atbacktype.storm.event$event_manager 
$fn__2068$fn__2069.invoke(event.clj:25) 
       atbacktype.storm.event$event_manager 
$fn__2068.invoke(event.clj:22) 
       atclojure.lang.AFn.run(AFn.java:24) 
       atjava.lang.Thread.run(Thread.java:662) 
2011-12-29 16:15:02 util [INFO] Halting process: ("Errorwhen 
processing an event") 
報錯原因:因為沒有先killtopology,所以在啟動nimbus時,zookeeper中依然保留了上次運行著的topology的信息。

解決辦法:用zookeeper的zkCli.sh清理一下,我直接重裝了zookeeper。但是據說在storm0.6.1中解決了該bug。而我用的是storm 0.6.0。

 

10Storm使用JVM參數

 

在配置文件storm.yaml中,有:

# to nimbus 
nimbus.childopts: "-Xmx1024m" 

# to supervisor 
supervisor.childopts: "-Xmx1024m" 

# to worker 
worker.childopts: "-Xmx768m" 
如果worker在運行時,需要用指定的JVM參數,那麼可以像這樣配置:
worker.childopts: "-Dworker=worker -Xmx768m -Xdebug –Xnoagent-Djava.compiler=NONE-Xrunjdwp:transport=dt_socket,address=8111,suspend=y,server=y" 

 

11關於spout/bolt的生命周期

 

一般來說spout/bolt的生命周期如下:

1      在提交了一個topology之後(在nimbus所在的機器),創建spout/bolt實例(spout/bolt在storm中統稱為component)併進行序列化;

2      將序列化的component發送給所有的任務所在的機器;

3      在每一個任務上反序列化component;

4      在開始執行任務之前, 先執行component的初始化方法(bolt是prepare, spout是open);

因此component的初始化操作應該在prepare/open方法中進行,而不是在實例化component的時候進行。

 

12關於storm與spring框架集成問題

 

 首先聲明一下,這個問題是當時有考慮到是否可以將storm與spring集成時,在網上看到的一點介紹,只是為了日後做參考。

在進行storm與spring集成時,本來想著一次就能成功,抱著很大的希望可是運行時竟然報了個java.io.NotSerializableException的異常。該異常要求被依賴註入的jar包實現序列化介面,但那些jar包都是別人開發的你不能一個一個都改掉源碼才能用到項目里。

再網上找一下還真有人遇到類似的問題,具體原因是對storm的spout和bolt的生命周期理解的不夠深刻。

一般來說spout/bolt的生命周期如下:

1.在提交了一個topology之後(在nimbus所在的機器),創建spout/bolt實例(spout/bolt在storm中統稱為component)併進行序列化.

2.將序

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在SQL Server中,特殊的數據類型主要有三個,分別是:bit、sql_variant 和 sysname 一,bit bit類型,只有三個有效值:0,1 和 null,字元串true或false能夠隱式轉換為bit類型,true轉換為1,false轉換為0;任何非0的整數值轉換成bit類型時, ...
  • 以下的文章主要是向大家描述的是MySQL資料庫中delimiter的作用是什麼?我們一般都認為這個命令和存儲過程關係不大,到底是不是這樣的呢?以下的文章將會給你相關的知識,望你會有所收穫。 其實就是告訴MySQL解釋器,該段命令是否已經結束了,MySQL資料庫是否可以執行了。預設情況下,delimi ...
  • 上篇文章中介紹了 單變數線性回歸 ,為什麼說時單變數呢,因為它只有單個特征,其實在很多場景中只有單各特征時遠遠不夠的,當存在多個特征時,我們再使用之前的方法來求特征繫數時是非常麻煩的,需要一個特征繫數一個偏導式,而卻最要命的時特性的增長時及其迅猛的,幾十、幾百、幾千…… 單變數線性回歸: 多變數線性 ...
  • http://stackoverflow.com/questions/745538/create-function-through-mysqldb How can I define a multi-statement function or procedure in using the MySQLd ...
  • SQL2008還原備份的SQL2008的.bak文件時會報錯,大部分原因是因為當前登錄的版本是2005的,因而無法還原用SQL2008備份的數據,結局的辦法是去掉登錄的伺服器名稱後面的尾碼SQLEXPRESS,則登錄SQL2008,但直接登錄也可能會出現如下問題:provide命名管道提供程式,er ...
  • SELECT SUBSTRING(CONVERT(varchar(100),時間欄位, 22),0,15) AS aa FROM 表名 ...
  • C# .Net :Excel NPOI導入導出操作教程之將Excel文件讀取並寫到資料庫表,示例分享 ...
  • Storm基本概念 Storm是一個開源的實時計算系統,它提供了一系列的基本元素用於進行計算:Topology、Stream、Spout、Bolt等等。 在Storm中,一個實時應用的計算任務被打包作為Topology發佈,這同Hadoop的MapReduce任務相似。但是有一點不同的是:在Hado ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...