採集資料——上傳資料
(mq)↓
大資料 link
持久層hardoop 負責資料更新 mysql
用於查詢歷史資料 用於展示實時資料
↓web
一、什麼是mq
mq使用經驗總結
mq經驗總結
首先了解什麼是mq?mq的作用是什麼?
mq是通訊中介軟體。他的作用是省去開發人員開發通訊工具的時間,節省開發成本,提高開發效
率。mq的使用,如何安裝mq?
根據以往的經驗,win版的mq比較容易安裝,傻瓜式,一路next就可以。
aix版本的用smitty安裝。
linux版本用rpm -ivh 安裝
mq中一些名稱的概念:
佇列管理器:簡單的說就是乙個大容器的管理員,這個大容器裡放了很多東西。
佇列:大容器裡的東西,存放訊息的盒子。
通道:大容器和大容器之間,程式和容器之間進行通訊的途徑。
mq是如何實現通訊的?
mq的通訊方式有兩種,通俗的說就是mq之間進行通訊,開發的程式和mq之間的通訊。
mq之間進行通訊:通過傳送接收通道建立tcp連線進行訊息傳輸,稱為server對server
開發的程式和mq之間的通訊:通過伺服器連線通道進行傳輸,client對server
如何配置兩台mq使之相互進行通訊?
首先要規劃好兩個佇列管理器之間使用的ip和埠,假設我們使用
ip 埠
192.168.0.1 1414
192.168.0.2 1415
第一步 建立佇列管理器
crtmqm -lc -lf 100 -lp 3 -ls 3 qm1
解釋下:
-lc 是採用迴圈日誌
-lf 是每塊日誌的大小,4k為單位的,100就是100*4k
-lp 是主邏輯日誌的數量
-ls 是輔邏輯日誌的數量
qm1 是佇列管理器名稱
第二步 啟動佇列管理器
strmqm qm1
第三步 定義佇列管理器中的佇列和通道等
先執行runmqsc qm1首先要保證執行該命令的使用者屬於mqm組
執行完後進入mq命令視窗
定義本地佇列 def ql(ql1)
先解釋什麼是本地佇列,然後解釋命令的含義(以下同)
本地佇列是儲存資訊的盒子,使用者可以從本地佇列裡取訊息,對方傳送訊息的目的地也是本地
佇列。def是 define的縮寫,mq支援一些命令的縮寫。
ql是queue local的縮寫,表示本地佇列,括號內是本地佇列名
定義遠端佇列 def qr(qr1) rname(ql2) rqname(qm2) xmitq(qt1)
遠端佇列是相對於本地佇列的,當使用者希望往另乙個佇列管理器發訊息的時候,配置好遠端隊
列,使用者直接放訊息到該佇列就可以,mq會傳輸到另一方的本地佇列中。
以上面的例子說明,當我們把訊息放入該遠端佇列後,訊息會傳輸到qm2佇列管理器中的ql2隊
列中。qr queue remote的縮寫
rname 指定的遠端佇列管理器上的佇列名
rqname 遠端佇列管理器
xmitq 所要用的傳輸佇列
定義傳輸佇列 def ql(qt1) usage(xmitq) trigger trigtype(first) initq
(system.channel.initq) trigdata(qm1.qm2)
傳輸佇列是傳輸的介質,訊息是通過傳輸佇列進行傳輸的。
usage 用途xmitq是傳輸佇列
trigger 訊息觸發開關
trigtype 觸發型別第一條訊息觸發
initq 初始佇列
trigdata 觸發資料
定義傳送通道 def chl(qm1.qm2) chltype(sdr) conname('192.168.0.2(1415)') trptype
(tcp) xmitq(qt1)
傳送通道就相當於建立乙個tcp的連線
chl channel的縮寫
chltype 通道型別sdr是傳送通道
conname 連線名包括對方的ip和埠
trptype 通訊型別tcp通訊
xmitq 使用的傳輸佇列
定義接受通道 def chl(qm2.qm1)
接收通道是被動的,只定義名字就可以。大家注意,接收通道的名字一定要和傳送通道名一致
,他們是靠名字來匹配。
第四步 配置***
是對方mq管理器來探測,本地要給對方乙個回應,***就是起這個作用的。
如果是5.3版本 只能在命令列裡執行 runmqlsr -m qm1 -t tcp -p 1414
如果是6.0版本 可以runmqsc qm1裡執行 def listener(lsr.qm1) trptype(tcp) port(1414)
control(qmgr)
解釋下 trptype 監聽型別
port 監聽埠
control 監聽控制,如果是qmgr則在佇列管理器啟動的時候監聽也自動啟動。
第五步 配置另外乙個佇列管理器
簡單的說一下,和上面的差不多,只不過名字不一樣。大家自己嘗試下:)
寫的手累了,下次補充!
繼續上面我們說完了如何建佇列管理器,接下來我們說說建完以後如何測試兩邊是不是正常傳輸,
我們可以用命令列方式向遠端佇列中放入測試訊息,以aix為例,
用/usr/mqm/samp/bin/amqsput命令就可以放入訊息,格式為:
amqsput qr1 qm1
解釋下:qr1是你要放入的佇列名,qm1是你要放入的佇列管理器名。
輸入以上命令後就可以寫入訊息了,一下回車就是傳送一條訊息,兩次回車就是退出。
用/usr/mqm/samp/bin/amqsget命令就可以取訊息,格式為
amqsget ql2 qm2
解釋下:ql1是你要取訊息的佇列名,qm2是你要取訊息的佇列管理器名。
輸入完命令後就會顯示所有訊息。
不過要注意一點,命令列方式的輸入和取訊息有位元組限制。
如果只是簡單的瀏覽一下訊息可以使用
/usr/mqm/samp/bin/amqsbcg命令
格式和取訊息一樣,但是該命令不會把訊息取出來,執行完該命令後訊息還是儲存在佇列中。
正常情況下訊息的傳輸流程(只說正常的,排錯一會再說)
qr1 -> qt1 -> ql2
訊息被放入到遠端佇列中,遠端佇列通過傳輸佇列傳輸,最後傳輸到qm2中的本地佇列。
出現問題,我們怎麼辦?
1 不能放入訊息。
一般這種情況應該大部分是遠端佇列中的傳輸佇列那個引數配置的不正確。
還有可能是佇列的允許放入這個引數設定成了禁止。基本上就這兩種情況。
2 傳送通道和接收通道的狀態不是running
首先說明,如果長時間沒有訊息傳輸,通道的狀態會變成不活動狀態,這是正常現象。
如果你手動啟動通道後,通道狀態還不是running,那先檢視錯誤日誌(兩邊的佇列管理器都要檢視)
/var/mqm/qmgrs/qm1/errors中的錯誤日誌,通常編號01的日誌是最新日誌。
常見情況是網路不通導致的通道不通!所以首先要保證網路是正常的,我們可以同過telnet對方的ip加監聽埠的方法來檢視是不是正常。
telnet 192.168.0.2 1415
再有的情況是兩邊的配置屬性有問題,如兩邊傳送和接收通道名不一致,傳送通道的連線名配置錯誤,傳送通道中的傳輸佇列配置錯誤。
我們也可以執行mq中的乙個命令來檢視通道是不是正常
runmqsc qm1
ping chl(qm1.qm2)
ping操作來檢視兩邊的通道是不是正常,如果正常會返回ping完成。
3 放入的訊息沒有到qm2的佇列中
注意:訊息一定要放入遠端佇列中,如果放入傳輸佇列中訊息會被放入死信佇列中。(上面忘記定義死信佇列了,暈)
再有看看遠端佇列中的屬性是不是配置錯誤,如rname,rqname,xmitq等屬性。
也有可能是傳送接收佇列的訊息序列號不一致。如果不一致做一下reset操作。
還有可能是上一批訊息沒有提交。可以做乙個resolve操作。
也是要先看錯誤日誌
4 訊息到達qm2佇列ql2中,但是取不出來
ql2的允許取出屬性是不是被禁止了。
這樣再檢視以下qm2到qm1的傳輸是不是正常。都正常就ok了。
大資料 專案流程
1.資料的預處理階段 2.資料的入庫操作階段 3.資料的分析階段 4.資料儲存到資料庫階段 5.資料的查詢顯示階段 reduce driver create table 表名 videoid string,uploader string,age int row format delimited fi...
大資料專案3
gmv 今天提交訂單的金額總和,不管是否支付 全站pv 頁面瀏覽量大砍一次就是乙個pv再重新整理一次又是乙個pv 全站uv 去重的訪客總和set mapreduce.framework.name local 本地 set mapreduce.framework.name yarn yarn set ...
離線大資料專案流程
mapreduce 資料清洗 hive textfile格式 create table 表名 a string b string row format delimited fields terminated by 指定分隔符 stored as textfile load data local in...