Apache - Storm

一、Apache Storm
Storm是一個分布式的,可靠的,容錯的數據流處理系統。Storm集群的輸入流由一個被稱作spout的組件管理,spout把數據傳遞給bolt,bolt要么把數據保存到某種存儲器,要么把數據傳遞給其它的bolt。一個Storm集群就是在一連串的bolt之間轉換spout傳過來的數據。

  1、Storm組件

在Storm集群中、有兩類節點:主節點master node和工作節點worker nodes。主節點運行Nimbus守護進程,這個守護進程負責在集群中分發代碼,為工作節點分配任務,并監控故障。Supervisor守護進程作為拓撲的一部分運行在工作節點上。一個Storm拓撲結構在不同的機器上運行著眾多的工作節點。每個工作節點都是topology中一個子集的實現。而Nimbus和Supervisor之間的協調則通過Zookeeper系統或者集群。

  2、Zookeeper

Zookeeper是完成Supervisor和Nimbus之間協調的服務。而應用程序實現實時的邏輯則被封裝進Storm中的“topology”。topology則是一組由Spouts(數據源)和Bolts(數據操作)通過Stream Groupings進行連接的圖。

  3、Spout

Spout從來源處讀取數據并放入topology。Spout分成可靠和不可靠兩種;當Storm接收失敗時,可靠的Spout會對tuple(元組,數據項組成的列表)進行重發;而不可靠的Spout不會考慮接收成功與否只發射一次。而Spout中最主要的方法就是nextTuple(),該方法會發射一個新的tuple到topology,如果沒有新tuple發射則會簡單的返回。

  4、Bolt

Topology中所有的處理都由Bolt完成。Bolt從Spout中接收數據并進行處理,如果遇到復雜流的處理也可能將tuple發送給另一個Bolt進行處理。而Bolt中最重要的方法是execute(),以新的tuple作為參數接收。不管是Spout還是Bolt,如果將tuple發射成多個流,這些流都可以通過declareStream()來聲明。

  5、Stream Groupings

Stream Grouping定義了一個流在Bolt任務中如何被切分。Shuffle grouping:隨機分發tuple到Bolt的任務,保證每個任務獲得相等數量的tuple。
Fields grouping:根據指定字段分割數據流,并分組。例如,根據“user-id”字段,相同“user-id”的元組總是分發到同一個任務,不同“user-id”的元組可能分發到不同的任務。
Partial Key grouping:根據指定字段分割數據流,并分組。類似Fields grouping。
All grouping:tuple被復制到bolt的所有任務。這種類型需要謹慎使用。
Global grouping:全部流都分配到bolt的同一個任務。明確地說,是分配給ID最小的那個task。
None grouping:無需關心流是如何分組。目前,無分組等效于隨機分組。但最終,Storm將把無分組的Bolts放到Bolts或Spouts訂閱它們的同一線程去執行(如果可能)。
Direct grouping:這是一個特別的分組類型。元組生產者決定tuple由哪個元組處理者任務接收。
Local or shuffle grouping:如果目標bolt有一個或多個任務在同一工作進程,tuples 會打亂這些進程內的任務。否則,這就像一個正常的 Shuffle grouping。

二、Apache-strom 必須要求Python 2.6以上
  1、升級 Python 官方下載地址:

https://www.python.org/ftp/python/
wget http://www.python.org/ftp/python/2.7.6/Python-2.7.6.tgz wget https://www.python.org/ftp/python/3.6.0/Python-3.6.0.tgz # tar -xf Python-3.6.0.tgz # mv Python-3.6.0 /usr/local/python # cd /usr/local/python # ./configure --prefix=/usr/local/python # make # make install # mv /usr/bin/python /usr/bin/python_old # ln -s /usr/local/python/bin/python3.6 /usr/bin/python # python -V

  2、如發現yum 異常則, 編輯 /usr/bin/yum 文件

將文件頭部的
#!/usr/bin/python
改為以下:(因為系統默認是2.6)
#!/usr/bin/python2.6

三、storm 安集群配置;(具體根據線上環境資源進行設置)

系統:Centos6.7
內核:2.6.32-573.el6.x86_64
安裝目錄:/opt/storm
數據日志目錄:/opt/storm/{data,logs}
用戶組權限:deploy
機器hostname需要在hosts里面配置關系映射:
zoo1 - 10.207.101.101
zoo2 - 10.207.101.102
zoo3 - 10.207.101.103

四、集群說明

主節點(nimbus)
zks1 
任務節點(supervisor)
zks2 zks3 等
注:storm主節點、任務節點安裝配置完全一致。

  1、下載安裝配置:官方下載地址:

http://mirrors.hust.edu.cn/apache/storm/
http://www-eu.apache.org/dist/storm/apache-storm-1.0.3/apache-storm-1.0.3.tar.gz
http://mirrors.hust.edu.cn/apache/storm/apache-storm-1.0.2/apache-storm-1.0.2.tar.gz

# tar -xf apache-storm-1.0.2.tar.gz
# cd apache-storm# cat apache-storm-0.9.6/conf/storm.yaml |grep -v ^# |grep -v ^$storm.zookeeper.servers:
- "10.207.101.101"
- "10.207.101.102"
- "10.207.101.103"
nimbus.host: "10.207.101.101"
storm.zookeeper.port: 2181
ui.port: 8090
storm.local.dir: "/opt/apache-storm-0.9.6/data"
supervisor.slots.ports:
- 6700
- 6701
- 6702
- 6703
- 6704
worker.childopts: "-Xmx2g"# worker.heap.memory.mb: 2048
/** 調整分配給每個 worker 的內存,關于內存的調節,上文已有描述 */logviewer.port: 18090
topology.max.spout.pending: 1000
topology.message.timeout.secs: 300
storm.messaging.netty.server_worker_threads: 10

  2、主節點啟動測驗:

啟動nimbus
# nohup ./bin/storm nimbus >/dev/null 2>&1 &
啟動 UI
# nohup ./bin/storm ui >/dev/null 2>&1 &

  3、任務節點啟動腳步

# cat supervisor_logviewer.shnohup ./bin/storm supervisor >/dev/null 2>&1 &
nohup ./bin/storm logviewer >/dev/null 2>&1 &

  4、進程檢測

# ps -ef|grep storm 
# netstat -ano |grep 8090
wKioL1j7QCmz-bBgAAEEFLYWMiA134.jpg-wh_50

  

轉載于:https://www.cnblogs.com/sharesdk/p/8794461.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/452991.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/452991.shtml
英文地址,請注明出處:http://en.pswp.cn/news/452991.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Python基礎學習五 內置模塊

time 模塊 1 >>> import time2 >>> time.time()3 1491064723.8086694 >>> # time.time()返回當前時間的時間戳timestamp(定義為從格林威治時間1970年01月01日00時00分00秒起至現在的總秒數)的方法,無參數5 >>> time.asctime()6 Sun Apr 2…

如何在windows上將本地項目上傳到Github

詳細步驟參考: https://www.cnblogs.com/smfx1314/p/8426115.html 感謝作者分享!

Sublime Text3使用Package Control 報錯There Are No Packages Available For Installation

在使用sublime時,有時候我們希望將代碼復制出來后仍然是高亮顯示,這樣我們便需要安裝SublimeHighLight插件,在安裝SublimeHighLight插件之前,我們應該先安裝Package Control插件! 1、Package Control插件作用&#xff…

數據結構學習筆記

數據結構學習筆記(一) 假期以來我都堅持每天看一點郝斌的數據結構視頻。講的很透徹,也很風趣。 前幾天都是為講數據結構而做準備,講了一些結構體和指針,今天終于開始正式將數據結構。說實話,我今天才知道…

2018-1-27:內存的劃分

內存的劃分 1.寄存器 2.本地方法區 3.方法區 4.棧內存 存儲的都是局部變量,變量的作用域一結束,該變量就立即釋放 5.堆內存 存儲的是對象,即凡是new的都在堆中 特點:   1.每一個實體都有首地址 2.堆內存中每一個變量都有默認初始…

mysql 1130 localhost_解決1130 Host 'localhost' is not allowed to connect to this MySQL server

WAMP 64bit安裝好后,連接數據庫,提示#1130 Host ‘localhost’ is not allowed to connect to this MySQL server1.首先停止mysql服務,如果不會可以直接停止所有wampserver。2.然后打開一個命令行窗口,切換到mysql的安裝目錄&…

Ubuntu 14.04下安裝Redis報錯:“You need tcl 8.5 or newer in order to run the Redis test”問題解決

解決方案參考文獻:安裝tcl https://blog.csdn.net/zhangshu123321/article/details/51440106 感謝樓主分享!

InstallSheild 獲取系統環境變量,如Desktop路徑等

使用FOLDER_DESKTOP變量獲取的桌面路徑可能為:C:\Users\Public\Desktop 而不是C:\Users\用戶\Desktop Copy and paste the following define statements at the beginning of your setup.rul file. Also, make sure you copy and paste the prototype for the SHGe…

線程2---異步1

在Java中什么是同步?什么是異步?對于這兩個概念我們必須要明確。只有明確這兩個概念,才會在明確在什么場景下使用同步以及異步。 在這里我可以形象的舉個例子來辨明這兩個概念: 1.同步與異步同步和異步關注的是消息通信機制 (sync…

mysql通常使用語句_Mysql 常用SQL語句集錦

基礎篇//查詢時間,友好提示$sql "select date_format(create_time, %Y-%m-%d) as day from table_name";//int 時間戳類型$sql "select from_unixtime(create_time, %Y-%m-%d) as day from table_name";//一個sql返回多個總數$sql "sel…

為什么你需要設計和維護一套自我移動標準?

在一個很長的調研日的休息時分,我在同一個客戶談一個項目,在這個項目中,我正為一個全球經濟公司開發一個iOS標準。他們的第一反應是這樣的:“什么?你在開發Apple iOS以外的標準?那還要開發什么?…

JS 小知識點匯總

1.offsetWidth & width A:因為. 1.offsetWidth是只讀屬性,而style.width是可讀寫得。2.offsetWidth返回的是一個整數,style.width返回的是一個字符串,并且帶有單位;**3.style.width只能返回以style方式定義的內部樣式的width屬性值。4.of…

django-redis中redis.conf配置詳細說明

參考文獻:https://blog.csdn.net/ljphilp/article/details/52934933 感謝樓主分享!

初識Mysql(一)

1 搭建數據庫服務器2 MYSQL數據類型3 修改表結構1 搭建數據庫服務器1.1 存在mariadb時:#systemctl status mariadb#systemctl stop mariadb#rpm -e --nodeps mariadb-libs #不依賴關系卸載#rm -rf /etc/my.cnf#rm -rf /var/lib/mysql/*1.2 新安裝時[rootser51 ~]# …

數據挖掘資料

https://blog.csdn.net/baimafujinji/article/details/53269040 在2006年12月召開的 IEEE 數據挖掘國際會議上(ICDM, International Conference on Data Mining),與會的各位專家選出了當時的十大數據挖掘算法( top 10 …

如何進行個人知識管理和提高自己能力?

21世紀是一個知識爆炸的世紀,知識爆炸是指人類創造的知識,主要是自然科學知識,在短時期內以極高的速度增長起來。是人們對當前大量出現并飛速發展的各種知識現象所進行的夸張和描述。有人綜合計算,全世界的知識總量,七到十年翻一番。這就是風行全球的摩登名詞的意思…