自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Twitter Storm進(jìn)階初步設(shè)置

運(yùn)維 系統(tǒng)運(yùn)維
本篇Blog是一個(gè)簡(jiǎn)單的Storm入門例子,目的讓讀者明白Storm是怎樣的運(yùn)行機(jī)制。以及后續(xù)會(huì)放出的幾篇Storm高級(jí)特性以及最終將Storm融入Hadoop 2.x的YARN中。目的讀者是已經(jīng)進(jìn)階大數(shù)據(jù)的Hadoop,Spark用戶,或者了解Storm想深入理解Storm的讀者用戶。

[[111555]]

本篇Blog是一個(gè)簡(jiǎn)單的Storm入門例子,目的讓讀者明白Storm是怎樣的運(yùn)行機(jī)制。以及后續(xù)會(huì)放出的幾篇Storm高級(jí)特性以及最終將Storm融入Hadoop 2.x的YARN中。目的讀者是已經(jīng)進(jìn)階大數(shù)據(jù)的Hadoop,Spark用戶,或者了解Storm想深入理解Storm的讀者用戶。

項(xiàng)目Pom(Storm jar沒有提交到Maven中央倉(cāng)庫(kù),需要在項(xiàng)目中加入下面的倉(cāng)庫(kù)地址):

 

  1. <repositories> 
  2. <repository> 
  3. <id>central</id> 
  4. <name>Maven Repository Switchboard</name> 
  5. <layout>default</layout> 
  6. <url>http://maven.oschina.net/content/groups/public/</url> 
  7. <snapshots> 
  8. <enabled>false</enabled> 
  9. </snapshots> 
  10. </repository> 
  11. <repository> 
  12. <id>clojars</id> 
  13. <url>https://clojars.org/repo/</url> 
  14. <snapshots> 
  15. <enabled>false</enabled> 
  16. </snapshots> 
  17. <releases> 
  18. <enabled>true</enabled> 
  19. </releases> 
  20. </repository> 
  21. </repositories> 
  22. <dependencies> 
  23. <dependency> 
  24. <groupId>org.yaml</groupId> 
  25. <artifactId>snakeyaml</artifactId> 
  26. <version>1.13</version> 
  27. </dependency> 
  28. <dependency> 
  29. <groupId>org.apache.zookeeper</groupId> 
  30. <artifactId>zookeeper</artifactId> 
  31. <version>3.3.3</version> 
  32. </dependency> 
  33. <dependency> 
  34. <groupId>org.clojure</groupId> 
  35. <artifactId>clojure</artifactId> 
  36. <version>1.5.1</version> 
  37. </dependency> 
  38. <dependency> 
  39. <groupId>storm</groupId> 
  40. <artifactId>storm</artifactId> 
  41. <version>0.9.0.1</version> 
  42. </dependency> 
  43. <dependency> 
  44. <groupId>storm</groupId> 
  45. <artifactId>libthrift7</artifactId> 
  46. <version>0.7.0</version> 
  47. </dependency> 
  48. </dependencies> 

下面是一個(gè)Storm的HelloWord的例子,代碼有刪減,熟悉Storm的讀者自然能把代碼組織成一個(gè)完整的例子。

  1. public static void main(String[] args) { 
  2. Config conf = new Config(); 
  3. conf.put(Config.STORM_LOCAL_DIR, "/Volumes/Study/data/storm"); 
  4. conf.put(Config.STORM_CLUSTER_MODE, "local"); 
  5. //conf.put("storm.local.mode.zmq", "false"); 
  6. conf.put("storm.zookeeper.root", "/storm"); 
  7. conf.put("storm.zookeeper.session.timeout", 50000); 
  8. conf.put("storm.zookeeper.servers", "nowledgedata-n15"); 
  9. conf.put("storm.zookeeper.port", 2181); 
  10. //conf.setDebug(true); 
  11. //conf.setNumWorkers(2); 
  12. TopologyBuilder builder = new TopologyBuilder(); 
  13. builder.setSpout("words", new TestWordSpout(), 2); 
  14. builder.setBolt("exclaim2", new DefaultStringBolt(), 5) 
  15. .shuffleGrouping("words"); 
  16. LocalCluster cluster = new LocalCluster(); 
  17. cluster.submitTopology("test", conf, builder.createTopology()); 

 

Config.STORM_LOCAL_DIR是配置一個(gè)本地路徑,Storm會(huì)在這個(gè)路徑寫入一些配置信息和臨時(shí)數(shù)據(jù)。

Config.STORM_CLUSTER_MODE是運(yùn)行模式,local和distributed兩個(gè)選項(xiàng),即本地模式和分布式模式。本地模式在運(yùn)行時(shí)時(shí)多線程模擬的,開發(fā)測(cè)試用;分布式模式在分布式集群下是多進(jìn)程的,真正的分布式。

Storm的Spout和Blot高可用是通過ZooKeeper協(xié)調(diào)的,storm.zookeeper.root是一個(gè)ZooKeeper地址,并且有對(duì)應(yīng)的端口號(hào)

Debug是測(cè)試模式,有更詳細(xì)的日志信息。

TestWordSpout是一個(gè)Storm自帶的例子,用來隨機(jī)的產(chǎn)生new String[] {“nathan”, “mike”, “jackson”, “golda”, “bertels”};列表中的字符串,用來提供數(shù)據(jù)源。

其中DefaultStringBolt的源碼:

  1. OutputCollector collector; 
  2. public void prepare(Map conf, TopologyContext context, OutputCollector collector) { 
  3. this.collector = collector; 
  4. public void execute(Tuple tuple) { 
  5. log.info("rev a message: " + tuple.getString(0)); 
  6. collector.emit(tuple, new Values(tuple.getString(0) + "!!!")); 
  7. collector.ack(tuple); 

運(yùn)行日志:

  1. 10658 [Thread-29-exclaim2] INFO cn.pointways.dstorm.bolt.DefaultStringBolt - rev a message: jackson 
  2. 10658 [Thread-31-exclaim2] INFO cn.pointways.dstorm.bolt.DefaultStringBolt - rev a message: jackson 
  3. 10758 [Thread-26-exclaim2] INFO cn.pointways.dstorm.bolt.DefaultStringBolt - rev a message: mike 
  4. 10758 [Thread-33-exclaim2] INFO cn.pointways.dstorm.bolt.DefaultStringBolt - rev a message: nathan 
  5. 10859 [Thread-26-exclaim2] INFO cn.pointways.dstorm.bolt.DefaultStringBolt - rev a message: nathan 
  6. 10859 [Thread-29-exclaim2] INFO cn.pointways.dstorm.bolt.DefaultStringBolt - rev a message: bertels 
  7. 10961 [Thread-31-exclaim2] INFO cn.pointways.dstorm.bolt.DefaultStringBolt - rev a message: jackson 
  8. 10961 [Thread-33-exclaim2] INFO cn.pointways.dstorm.bolt.DefaultStringBolt - rev a message: jackson 
  9. 11061 [Thread-35-exclaim2] INFO cn.pointways.dstorm.bolt.DefaultStringBolt - rev a message: nathan 
  10. 11062 [Thread-35-exclaim2] INFO cn.pointways.dstorm.bolt.DefaultStringBolt - rev a message: nathan 
  11. 11162 [Thread-26-exclaim2] INFO cn.pointways.dstorm.bolt.DefaultStringBolt - rev a message: bertels 
  12. 11163 [Thread-26-exclaim2] INFO cn.pointways.dstorm.bolt.DefaultStringBolt - rev a message: jackson 

數(shù)據(jù)由一個(gè)Storm叫做噴嘴(Spout,也相當(dāng)一個(gè)水龍頭,能產(chǎn)生數(shù)據(jù)的來源端)產(chǎn)生,然后傳遞給后端一連串的的Blot,最終被轉(zhuǎn)換和消費(fèi)。而Spout和Blot都是并行的,并行度都可以自己設(shè)置(本地運(yùn)行是靠多線程模擬的)。如:

  1. builder.setSpout("words", new TestWordSpout(), 2); 
  2. builder.setBolt("exclaim2", new DefaultStringBolt(), 5) 

噴嘴TestWordSpout的并行度是2,DefaultStringBolt的并行度是5.

從日志可以看出,數(shù)據(jù)經(jīng)過噴嘴到達(dá)預(yù)先定于的一個(gè)Blot,打印了日志。我測(cè)試代碼設(shè)置的并行度是5,日志中統(tǒng)計(jì),確實(shí)是5個(gè)線程:

  1. Thread-29-exclaim2 
  2. Thread-31-exclaim2 
  3. Thread-26-exclaim2 
  4. Thread-33-exclaim2 
  5. Thread-35-exclaim2 

關(guān)于Storm是是什么?這里有詳細(xì)的介紹。

借用OSC網(wǎng)友的話說,Hadoop就是商場(chǎng)里自動(dòng)升降式的電梯,用戶需要排隊(duì)等待,選按樓層,然后到達(dá);而Storm就像是自動(dòng)扶梯,扶梯預(yù)先設(shè)置好運(yùn)行后,來人就立即運(yùn)走,目的地是明確的。

Storm按我的理解,Storm和Hadoop是完全不同的,設(shè)計(jì)上也沒有半點(diǎn)擬合的部分。Storm更像是我之前介紹過的Spring Integration,是一個(gè)數(shù)據(jù)流系統(tǒng)。它能把數(shù)據(jù)按照預(yù)設(shè)定的流程,把數(shù)據(jù)做各種轉(zhuǎn)換,傳遞,分解,合并,***數(shù)據(jù)到達(dá)后端存儲(chǔ)。只不過Storm是可以分布式,而且分布式的能力也是可以自己設(shè)置。

Storm的這種特性很適合大數(shù)據(jù)類的ETL系統(tǒng)開發(fā)。

責(zé)任編輯:黃丹 來源: oschina
相關(guān)推薦

2014-04-08 14:21:09

Twitter StoStormStorm 集群

2013-09-05 09:47:35

TwitterSummingbird開源

2012-12-06 10:59:51

大數(shù)據(jù)

2014-02-14 15:49:03

storm安裝部署

2009-12-01 17:36:48

SUSE LINUX

2013-06-25 15:27:50

Linux DeepiLinux Deepi

2022-12-14 09:51:04

Twitter開源

2009-07-17 11:28:07

TwitterGoogle

2017-04-19 12:05:59

2012-04-11 09:52:32

開源MySQL

2009-02-02 10:08:25

SilverlightTwitterASP.NET

2012-09-17 11:23:57

IBMdw

2016-06-13 09:11:50

2009-06-22 09:25:23

2023-04-04 19:10:29

Twitter算法開源

2023-01-06 08:27:08

Nature推特

2011-12-02 13:04:06

Java

2011-03-09 10:56:00

LAMP架構(gòu)

2010-07-21 16:40:41

telnet服務(wù)

2009-03-03 11:31:21

Twintter集成搜索
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)