A. 什麼是高頻交易系統
什麼是高頻交易系統?高頻交易系統是通過編程實現的一種智能化的電腦程序交易系統,它排除了人工交易的非理性影響,能夠以較高的頻率和固定交易規則進行交易。高頻交易系統目前主要包括三個大方面,首先,交易指令要完全由電腦系統發送,中間不通過人工操作,系統基本要求是對市場數據的響應延時要小,高頻交易系統一般使用超高速的復雜計算機系統下單,在執行層面上,交易頻率會比較高,有可能會大量、頻繁地向交易所報單,高頻交易系統要能夠用最快的速度對信號進行拆解、計算和輸出;高頻交易系統由專用軟體硬體組成,交易指令會直接發送到交易所,系統運行時處理的信號源是交易所播報的實時行情,使用的是和交易所直連的數據通道,平均每次持倉時間極短,可以支持大量發送和取消委託訂單,收盤時基本能夠保持平倉即不持倉過夜,符合以上條件的系統是高頻交易系統。
B. 怎麼才能做高頻交易
你好,高頻交易實現方法主要是先想好交易策略,然後把策略轉化為程序化,然後通過後期的測試做成一套完整的自動化交易系統。
C. 為什麼高頻交易在期貨中深受異議
高頻交易,說白了就是說這種每一次交易的間隔時間都極其簡短,通常為十多分鍾乃至幾秒。最開始出現於上新世紀90時代末,現階段早已發展趨勢成外匯交易市場的關鍵能量。但近些年高頻交易備受異議,金融機構、外匯交易商及其某些權威專家剛開始斥責高頻交易的缺點,而另某些適用人員則全力支持高頻交易的發展趨勢,那麼高頻交易為什麼在期貨中這般的填滿異議呢?
高頻交易的益處
先而言說高頻交易在商品期貨中各種各樣益處,最先,高頻交易應用繁雜的優化演算法交易,另外藉助快速的程序流程行情軟體和有關硬體配置設備來超過在短暫性的市場起伏中盈利的實際效果。這類交易方式針對投資者而言優點極大,由於在短短幾秒鍾到幾彼此之間中能夠靈巧地捕獲期貨的起伏進而超過相對穩定的盈利,基礎理論上每天以內能夠開展千萬次的高頻交易,那麼得到的盈利將是永無止盡的。
次之,高頻交易解決信息的速率貼近光速,現階段紐約到倫敦光速65毫秒,納斯達克更快交易速率接近0.001ms到1ms當中,而人們的更快反應時間也就1000ms,即1秒。因而,這般高效快捷的響應速度巨大地為期貨市場引入充裕的流通性,減少交易價差,進而深化減少點差成本費,全面提高市場效率。
高頻交易的弊端
通常情況下,高頻交易必須根據程序交易,而且以便超過競爭能力必須更加技術專業的硬體配置設備,能夠說,高頻交易到最終拼的全是「誰的網路速度快誰利害」,而這卻給外匯市場中的個人投資者產生了不合理的市場競爭自然環境。由於個人投資者並不是具有技術專業的硬體配置設備和復雜的優化演算法交易,高頻交易就是說運用個人投資者交易很慢的缺點,每天以內達到千萬次的交易是個人投資者如何都沒法理解的,攪亂了全部期貨市場,個人投資者非常容易蒙受損失,特別是短線投資人。
除開速率上的危害外,高頻交易技術性的不平穩巨大地加重了期貨的性的震盪,因為高頻交易必須精準的程序化交易優化演算法交易,假如交易編號中出現1個小小的出錯,那麼其產生的結果將會是損害所有資產,另外很多的高頻交易將會會導致交易軟體承擔,導致市場部分快速垮台。
高頻交易的產生的不良影響還不僅在此,其真實受異議的地區取決於其管控空白頁。高頻交易非常容易被居心叵測的人來控制價錢,通常會拋出去不容易實行的訂單信息,導致要求的錯覺,誘惑投資人或有關組織提交訂單,欠缺公平公正和相容性。不但對個人投資者還是外匯交易商又或者大中型金融機構,高頻交易既抵觸了個人投資者的參加,又持續危害者各大組織的權益,好像是一頭老鼠過街的過街老鼠。
高頻交易將出路在哪裡
現如今,高頻交易早已變成市場上沒法忽略的能量,在為市場造就高額成交量的同時卻一直游離於管控以外。2014年,英國股票交易聯合會、聯邦調查局、商品期貨和交易聯合會和美國司法部競相剛開始下手調研高頻交易行業的內線交易個人行為。2019年7月,對沖基金文藝復興時期高新科技運用繁雜的計算機演算法,相互配合很多網路伺服器及其原子鍾,可以保持在幾十億分之一秒內同歩實行交易命令,致力於清除高頻交易。
而2019年瑞信投資分析師應用了瑞信特有的ExPRT交易統計數據。在10-12%的美國股票成交量統計數據適用下,獲得了純非高頻交易者(包含買家、買家、零售業和組織投資者)實行每單交易中心需時間的互聯網大數據。根據統計數據,市場的全部參加者不太可能所有獲得公平看待。針對這些投資風險較低,而且對交易交易量時間非常重視的投資人而言,假如他不想要擔負持倉的風險性,那他務必在別的層面作出某些妥協。
不難看出,適用與不兼容高頻交易的多方常有分別有效的大道理和統計數據,異議也許還將再次爭執下來。
D. 什麼是高頻交易系統
1、高頻交易系統概述
高頻交易是指從那些人們無法利用的極為短暫的市場變化中尋求獲利的計算機化交易。
比如,某種證券買入價和賣出價差價的微小變化,或者某隻股票在不同交易所之間的微小價差。
這種交易的速度如此之快,以至於有些交易機構將自己的「伺服器群組」(server farms) 安置到了離交易所的計算機很近的地方,以縮短交易指令到達交易所的距離。
2、高頻交易系統特點
(1)交易指令完全由電腦發送,對市場數據的響應延時在微秒級,有的甚至是納秒級;
(2)系統由專用的軟、硬體組成;
(3)系統的硬體需要放在離交易所主機很近的位置上,所謂 co-location。
3、高頻交易的兩大核心要素
(1)一是產生高頻交易信號的交易策略;
(2)二是優化交易執行過程的演算法。
1、高頻交易系統的特點
高頻系統是一種非常有特點的計算機應用。在輸入和輸出層面,數據比較簡單。
輸入用的都是市場行情數據,用的是Tick級別,甚至是更細顆粒度,比如用order book上數據。
輸出就是報單到交易所,執行層面上頻率會比較高,有可能會大量、頻繁地向交易所報單。系統運行時處理的信號源是交易所播報的實時行情,要求用最快的速度對信號進行拆解、計算和輸出,對於系統的實時計算能力的要求也比較高。
同時,一般高頻交易系統從邏輯的層面上來說是比較簡單的。
2、編程語言的選擇
目前,高頻交易系統最主流的是C/C++語言。
這是一種優點及其很顯著的語言。相比依賴虛擬機的JAVA和Python而言,C/C++是一種非常接近底層硬體的開發語言,對硬體操控的控制度、靈活度都超過其他語言,在性能上的把控力會更強。
但是,其語法相當復雜,比較難學,沒有受過系統編程訓練的開發者,掌握起來比較困難。
同時,使用C/C++編程也可以獲得及其優越的性能,這對於高頻交易系統來說,就非常重要了!並且,國內大多數的交易所提供的都是C++級別的類庫,只有用C++進行開發,才能方便進行系統對接。
E. 23分析高頻交易訂單流
點過程基礎
假設你蹲在一個交通站台後面,看著人來人往。你覺得乘客的到達似乎存在某種數學規律, 於是你把每個人到達的時刻記錄了下來。有什麼辦法可以對這些人到達的時刻進行建模?你漸漸進入了沉思狀態。也許提煉這些點形成的集合所具有的特徵是一個好辦法。你想到乘客到來的速率肯定是一個重要特徵,如果是在一個偏僻的小公交站,可能半天也看不到一個人 ; 到了市中心的大車站,人潮湧動可能讓你難以計數。不同人到來的間隔是另外一個有意思的特徵,乘客不是從工廠出來的產品,肯定不會乖乖地等間隔的到來,那麼不同乘客到來的間隔有什麼規律呢?要回答這些問題,必須要藉助概率的語言,更確切地說,是點過程。
泊松過程
泊松過程有以下幾個性質:
不相交的時間段上到來的數量是相互獨立的;兩個點幾乎肯定不會同時到達;在某個給定的時間段到達的數量服從泊松分布,分布均值正比於時間段的長度。
從數學層面來描述具有這樣性質的過程,首先我們從第二個性質開始 , 我們用 N(a,b] 表示 a < t <= b 這段時間發生的事件數。
對於一個趨近於0的 Δt , 我們聲明 , 對任意t
P(N(t, t + Δt]=1)=λΔt
由於 λ 的含義是單位時間內事件的數量 , 所以可以定義為事件發生的強度。
由於兩個點不會同時到達 , 在小段時間里發生兩次的概率約等於0
P(N(t, t + Δt >= 2) → 0
那麼對於任意時間段 (a,b] , 我們可以先將其劃分為多個小時間段 , 然後由不同時間段的 獨立性, 用二項分布來計算概率分布 , 再用泊松分布近似:
可以看到 N(a,b] 近似服從參數為 λ(b-a) 的泊松分布。
現在我們來看一看兩個事件的間隔服從什麼分布 , 間隔為t0 意味著這t 0 時間段沒有事件發生, 那麼可以很容易的進行計算:
我們可以利用間隔服從指數分布的性質,模擬服從泊松過程的事件,第k個事件的時刻就是第 k-1 個事件時刻加參數為λ 的指數分布的隨機變數:
舉個例子, 我們可以模擬一個 λ 為 0.5 的泊松過程 , 總共模擬 50 個事件, 可以畫出事件與時間的關系:
還可以畫出累積事件與時間的關系 , 按照我們的估算 , 發生 50 個 λ 為 0.5 的事件大約要用 100 的時間,我們可以從圖中進行驗證。
** Hawkes過程**
在泊松過程中,強度保持恆定,事件的發生遵循「無記憶性」的原則,在現實世界中,很多情況 都不符合這樣的假定,例如犯罪行為往往具有空間上的聚集性,這是由於罪犯在得手後傾向於在附近繼續作案;而在高頻交易中趨勢交易者會跟蹤大訂單,使得市場在短時間湧入大量訂單。在這些系統中,事件發生的速率都是不均勻的。如何描述這種空間上的聚集性,或者說是正反饋的機制呢?我們需要對模型進行擴展,不再把 λ 固定為一個確定的值,而是讓他成為一個關於時間的函數,即 λ(t) 。
比較精確的定義是當 Δt 趨近為 0 時:
P(N(t, t + Δt]=1)=λ(t)Δt
其餘的假設相似 , 在小間隔內發生2次或以上事件的概率趨近為0 。
λ(t) 的定義則為:
的 λ0(t) 代表的是背景的強度 , 而 v(t - ti) 則代表發生在 t 時刻之前的事件對時刻 t 產生的正向影響 , v 函數就是核函數 , 簡單來說 , ti離t 越近 , 對t時刻造成的影響就應更大。
先使用一個比較簡單的核函數:指數函數來看一看 Hawkes 過程究竟有什麼特性:可以定義
模擬了 100 個事件,可以把事件和對應的強度畫在一張圖上
可以通過數值驗算一下我們的結果是否合理:
強度的實際平均值為 Nt / t大約為 100/150 ,而我們可以推導理論的平均值:
圖片里的 λ0 是我們定義的 μ , 而圖片里的 μ 代表我們要算來和實際對比的強度的平均值 E[λ(t)],注意從第一排到第二排的變換是根據 λ(t) 的定義。
可以計算出理論值
E[λ(t)] = μ / (1 - (α/β)) = 2/3
與實際的較為接近,說明模擬是正確的。
指數核Hawkes過程模擬優化
對指數核函數的 Hawkes 過程進行模擬 , 當我們把 事件個數調大時,比如從 100 調到 1000 時,可以發現程序運行的時間大大增加了, 這是由於在算時刻對應的強度時需要調用前面所有的事件時刻,所以復雜度是 O(N^2).
Hawkes 過程參數估計
因為後面的函數 nlminb 所做的是使函數的值最小化 , 上面的似然函數中我們輸入的是負的似然函數。
經過優化得到的參數非常接近我們的真實參數(0.5,0.3,1.2) , 這說明極大似然估計非常有效。
Hawkes 過程的核函數可以指定多種形式 , 除了指數核函數以外 , 還可以使用冪律核函數 ,甚至不指定核函數的具體形式, 使用非參數的方法求取核函數 。
訂單流數據表示
在金融市場上做交易時 , 可以看到一個委託單簿,上面陳列著買價和賣價以及它們對應的量 , 舉個例子,比特幣市場的訂單簿:
action_itme 的含義是訂單類型 , 其中 「M」 代表對 order book 的改變 , 換句話說就是限價單;而 「T」 代表的是 trade ,也可以說是市價單。 ask price 和 ask vol 分別代表最優賣價和量 , bid price 和 bid vol 分別代表最優買價和量 。 price 和 vol 分別代表訂單對應的價格和量。 time 是以 1970 年開始計算的秒數。
時間的精度 , 達到了10的負7次方 , 也就是達到了微秒級。
用函數將其轉化為 R 語言中的時間格式 , 發現首個數據的時間是下午 5 點。
由於美國標普 500 的交易時間是上午 8 點半到下午 3 點 , 我們用一個二分搜索把交易時間內 的數據提取出來,並命名為 trade
訂單間隔分析
75 分位數和均值大約 0.02s , 這可以說明標普 500 期貨的交易非常頻繁,流動性非常好。
上面是訂單間隔的分布圖,由於大於 0.01s 的間隔較少,我們選取小於 0.01s 的間隔進行可視化,可以觀察到分布是高度有偏的,絕大多數間隔都非常小。
用指數分布去擬合小於 0.04 的訂單間隔,發現實際數據衰減的速度遠遠高於對應最優參數模擬指數分布衰減的速度。由於指數分布的衰減速度是非常快的,這更說明小間隔的比例有多麼大,可以說這是實實在在的「高頻」交易。
高頻交易中有一類交易者叫做做市商,它們在市場中掛買單和賣單,如果都成交了就可以賺取 其中的價差。它們一般下限價單,為市場提供流動性,當然它們也會有一些自己的策略,例如在市場上出現市價單時做市商一般會調整自己的訂單,所以他們會馬上下跟蹤的限價單,我們從統計來看一看市場有沒有這樣的現象。
我們選取的是 1s 和 0.01s , 如果是平穩的那麼 0.01s 對應的分位數應該是 1s 的百分之一左右。但是實際上在越高的分位數上這個規律就越不成立 ,在 99.99 分位和 99.999 分位上甚至超過了十分之一。
這說明事件的到來有高度聚集的特徵,不能簡單地用泊松過程來刻畫 。
流動性研究
流動性的含義是當你想交易時,你是否有能力快速地進行大規模交易。它由三個要素組成,速度,深度和寬度。
深度主要與訂單量有關,兩方的訂單量越多,能夠承受的買壓或賣壓就更大,流動性就更好
而寬度主要與價格有關,在市場中我們可以看到一些交易量小的標的,它的 bid 和 ask 的距離非常之大,這樣如果我們用市價單一買一賣,會有較大的損失,而對於一些交易量大的標的,bid 和 ask 的距離可能非常小,可以放心下市價單進行即時交易。
由於我們的數據里只有最優買價和最優賣價,沒法對深度進行分析,我們只能通過分析 bid 和 ask 的距離(這個距離被稱作 spread)來分析一下寬度。
可以看到絕大多數時候 spread 都是 25(1 個 tick) ,說明標普 500 期貨 的流動性非常之好。
限價單相對價格分析
當在准備下限價單時,我們有很多選擇,可以當一個保守的人,下一個離最優價格很遠的單子,也可以下離最優價格很近的單子,這樣很大概率能夠快速成交。
我們把相對價格定義為
bid_relative_price = (best bid - 下單價格) / tick
ask_relative_price = (下單價格 - best ask) / tick
這樣可以做一個統計,來看一看限價單相對價格的統計分布。
從圖中我們可以看到 , 買單和賣單的相對價格在0之前分布基本相同
指數核 hawkes 過程擬合
形象地來看,限價單組建起了買方和賣方的堡壘,而市價單則對對手的堡壘發起沖擊。 那麼作為進攻部隊,市價單對買方賣方力量的博弈是非常關鍵的。
把時間相同的訂單進行合並,並把所有時間減去初始值
擬合得到的 beta 的值非常大,說明前面事件對後面事件的影響衰減得非常快。注意 1/beta 被定義為 Hawkes 過程的記憶時間 , 超過這個時間的後續事件基本不受這個事件的影響 。 這里我們可以看到影響周期小於一毫秒 , 說明頻率確實非常快。
正反饋強度分析
索羅斯在他的「金融煉金術」中提出了一種叫做 reflexity(自反性)的理論 , 這個理論說的是投資者和交易者的認知偏差會改變標的的基本面。例如一支股票持續上漲,會使得投資者對提高對它基本面的認知 ,又反過來推動股價的進一步上升, 從而形成正反饋。
但是如何量化地對正反饋進行分析一直是一個問題。在 Hawkes 過程中,根據 lambda 的表達式我們可以把事件發生的強度分為兩部分 , 一部分是背景的強度 , 一部分則是由前面事件激發而得到的強度,這部分「衍生」的強度的平均值可以被認為是正反饋的強度。
例如在指數核中,我們可以通過積分計算出正反饋機制的比例是 alpha / beta , 下面我們把一天的時間按照30分鍾的間隔分為13段 , 看看每一段的背景強度和 reflexity 分別是多少。
然後我們可以開始嘗試建模,將量的因素考慮進去:
訂單數量的冪指數
前面我們假設訂單量的影響是線性的,可真實是這樣的嗎,我們嘗試在訂單數量上加入一個冪指數,那麼強度的表達式變為
從參數我們可以看到k的值大約是 0.5 , 說明訂單的影響大約是數量的根號,並不是線性增長的。 這是非常有趣的一個現象 , 說明訂單量的沖擊是邊際遞減的。
F. 以C++為核心語言的高頻交易系統是如何做到低延遲的
我認為並不是c++的效率是決定因素。
首先你要考慮的是,你的速度要求有多高,或者你的交易策略真的需要這么高的速度嗎?第二個是輸入輸出比率,不管你的演算法是否真的能賺到足夠的錢來支持你做所有層次的優化。
G. 大數據三大核心技術:拿數據、算數據、賣數據!
大數據的由來
對於「大數據」(Big data)研究機構Gartner給出了這樣的定義。「大數據」是需要新處理模式才能具有更強的決策力、洞察發現力和流程優化能力來適應海量、高增長率和多樣化的信息資產。
1
麥肯錫全球研究所給出的定義是:一種規模大到在獲取、存儲、管理、分析方面大大超出了傳統資料庫軟體工具能力范圍的數據集合,具有海量的數據規模、快速的數據流轉、多樣的數據類型和價值密度低四大特徵。
大數據技術的戰略意義不在於掌握龐大的數據信息,而在於對這些含有意義的數據進行專業化處理。換而言之,如果把大數據比作一種產業,那麼這種產業實現盈利的關鍵,在於提高對數據的「加工能力」,通過「加工」實現數據的「增值」。
從技術上看,大數據與雲計算的關系就像一枚硬幣的正反面一樣密不可分。大數據必然無法用單台的計算機進行處理,必須採用分布式架構。它的特色在於對海量數據進行分布式數據挖掘。但它必須依託雲計算的分布式處理、分布式資料庫和雲存儲、虛擬化技術。
大數據需要特殊的技術,以有效地處理大量的容忍經過時間內的數據。適用於大數據的技術,包括大規模並行處理(MPP)資料庫、數據挖掘、分布式文件系統、分布式資料庫、雲計算平台、互聯網和可擴展的存儲系統。
最小的基本單位是bit,按順序給出所有單位:bit、Byte、KB、MB、GB、TB、PB、EB、ZB、YB、BB、NB、DB。
大數據的應用領域
大數據無處不在,大數據應用於各個行業,包括金融、 汽車 、餐飲、電信、能源、體能和 娛樂 等在內的 社會 各行各業都已經融入了大數據的印跡。
製造業,利用工業大數據提升製造業水平,包括產品故障診斷與預測、分析工藝流程、改進生產工藝,優化生產過程能耗、工業供應鏈分析與優化、生產計劃與排程。
金融行業,大數據在高頻交易、社交情緒分析和信貸風險分析三大金融創新領域發揮重大作用。
汽車 行業,利用大數據和物聯網技術的無人駕駛 汽車 ,在不遠的未來將走入我們的日常生活。
互聯網行業,藉助於大數據技術,可以分析客戶行為,進行商品推薦和針對性廣告投放。
電信行業,利用大數據技術實現客戶離網分析,及時掌握客戶離網傾向,出台客戶挽留措施。
能源行業,隨著智能電網的發展,電力公司可以掌握海量的用戶用電信息,利用大數據技術分析用戶用電模式,可以改進電網運行,合理設計電力需求響應系統,確保電網運行安全。
物流行業,利用大數據優化物流網路,提高物流效率,降低物流成本。
城市管理,可以利用大數據實現智能交通、環保監測、城市規劃和智能安防。
體育 娛樂 ,大數據可以幫助我們訓練球隊,決定投拍哪種 題財的 影視作品,以及預測比賽結果。
安全領域,政府可以利用大數據技術構建起強大的國家安全保障體系,企業可以利用大數據抵禦網路攻擊,警察可以藉助大數據來預防犯罪。
個人生活, 大數據還可以應用於個人生活,利用與每個人相關聯的「個人大數據」,分析個人生活行為習慣,為其提供更加周到的個性化服務。
大數據的價值,遠遠不止於此,大數據對各行各業的滲透,大大推動了 社會 生產和生活,未來必將產生重大而深遠的影響。
大數據方面核心技術有哪些?
大數據技術的體系龐大且復雜,基礎的技術包含數據的採集、數據預處理、分布式存儲、NoSQL資料庫、數據倉庫、機器學習、並行計算、可視化等各種技術范疇和不同的技術層面。首先給出一個通用化的大數據處理框架,主要分為下面幾個方面:數據採集與預處理、數據存儲、數據清洗、數據查詢分析和數據可視化。
數據採集與預處理
對於各種來源的數據,包括移動互聯網數據、社交網路的數據等,這些結構化和非結構化的海量數據是零散的,也就是所謂的數據孤島,此時的這些數據並沒有什麼意義,數據採集就是將這些數據寫入數據倉庫中,把零散的數據整合在一起,對這些數據綜合起來進行分析。數據採集包括文件日誌的採集、資料庫日誌的採集、關系型資料庫的接入和應用程序的接入等。在數據量比較小的時候,可以寫個定時的腳本將日誌寫入存儲系統,但隨著數據量的增長,這些方法無法提供數據安全保障,並且運維困難,需要更強壯的解決方案。
Flume NG
Flume NG作為實時日誌收集系統,支持在日誌系統中定製各類數據發送方,用於收集數據,同時,對數據進行簡單處理,並寫到各種數據接收方(比如文本,HDFS,Hbase等)。Flume NG採用的是三層架構:Agent層,Collector層和Store層,每一層均可水平拓展。其中Agent包含Source,Channel和 Sink,source用來消費(收集)數據源到channel組件中,channel作為中間臨時存儲,保存所有source的組件信息,sink從channel中讀取數據,讀取成功之後會刪除channel中的信息。
NDC
Logstash
Logstash是開源的伺服器端數據處理管道,能夠同時從多個來源採集數據、轉換數據,然後將數據發送到您最喜歡的 「存儲庫」 中。一般常用的存儲庫是Elasticsearch。Logstash 支持各種輸入選擇,可以在同一時間從眾多常用的數據來源捕捉事件,能夠以連續的流式傳輸方式,輕松地從您的日誌、指標、Web 應用、數據存儲以及各種 AWS 服務採集數據。
Sqoop
Sqoop,用來將關系型資料庫和Hadoop中的數據進行相互轉移的工具,可以將一個關系型資料庫(例如Mysql、Oracle)中的數據導入到Hadoop(例如HDFS、Hive、Hbase)中,也可以將Hadoop(例如HDFS、Hive、Hbase)中的數據導入到關系型資料庫(例如Mysql、Oracle)中。Sqoop 啟用了一個 MapRece 作業(極其容錯的分布式並行計算)來執行任務。Sqoop 的另一大優勢是其傳輸大量結構化或半結構化數據的過程是完全自動化的。
流式計算
流式計算是行業研究的一個熱點,流式計算對多個高吞吐量的數據源進行實時的清洗、聚合和分析,可以對存在於社交網站、新聞等的數據信息流進行快速的處理並反饋,目前大數據流分析工具有很多,比如開源的strom,spark streaming等。
Strom集群結構是有一個主節點(nimbus)和多個工作節點(supervisor)組成的主從結構,主節點通過配置靜態指定或者在運行時動態選舉,nimbus與supervisor都是Storm提供的後台守護進程,之間的通信是結合Zookeeper的狀態變更通知和監控通知來處理。nimbus進程的主要職責是管理、協調和監控集群上運行的topology(包括topology的發布、任務指派、事件處理時重新指派任務等)。supervisor進程等待nimbus分配任務後生成並監控worker(jvm進程)執行任務。supervisor與worker運行在不同的jvm上,如果由supervisor啟動的某個worker因為錯誤異常退出(或被kill掉),supervisor會嘗試重新生成新的worker進程。
Zookeeper
Zookeeper是一個分布式的,開放源碼的分布式應用程序協調服務,提供數據同步服務。它的作用主要有配置管理、名字服務、分布式鎖和集群管理。配置管理指的是在一個地方修改了配置,那麼對這個地方的配置感興趣的所有的都可以獲得變更,省去了手動拷貝配置的繁瑣,還很好的保證了數據的可靠和一致性,同時它可以通過名字來獲取資源或者服務的地址等信息,可以監控集群中機器的變化,實現了類似於心跳機制的功能。
數據存儲
Hadoop作為一個開源的框架,專為離線和大規模數據分析而設計,HDFS作為其核心的存儲引擎,已被廣泛用於數據存儲。
HBase
HBase,是一個分布式的、面向列的開源資料庫,可以認為是hdfs的封裝,本質是數據存儲、NoSQL資料庫。HBase是一種Key/Value系統,部署在hdfs上,克服了hdfs在隨機讀寫這個方面的缺點,與hadoop一樣,Hbase目標主要依靠橫向擴展,通過不斷增加廉價的商用伺服器,來增加計算和存儲能力。
Phoenix
Phoenix,相當於一個Java中間件,幫助開發工程師能夠像使用JDBC訪問關系型資料庫一樣訪問NoSQL資料庫HBase。
Yarn
Yarn是一種Hadoop資源管理器,可為上層應用提供統一的資源管理和調度,它的引入為集群在利用率、資源統一管理和數據共享等方面帶來了巨大好處。Yarn由下面的幾大組件構成:一個全局的資源管理器ResourceManager、ResourceManager的每個節點代理NodeManager、表示每個應用的Application以及每一個ApplicationMaster擁有多個Container在NodeManager上運行。
Mesos
Mesos是一款開源的集群管理軟體,支持Hadoop、ElasticSearch、Spark、Storm 和Kafka等應用架構。
Redis
Redis是一種速度非常快的非關系資料庫,可以存儲鍵與5種不同類型的值之間的映射,可以將存儲在內存的鍵值對數據持久化到硬碟中,使用復制特性來擴展性能,還可以使用客戶端分片來擴展寫性能。
Atlas
Atlas是一個位於應用程序與MySQL之間的中間件。在後端DB看來,Atlas相當於連接它的客戶端,在前端應用看來,Atlas相當於一個DB。Atlas作為服務端與應用程序通訊,它實現了MySQL的客戶端和服務端協議,同時作為客戶端與MySQL通訊。它對應用程序屏蔽了DB的細節,同時為了降低MySQL負擔,它還維護了連接池。Atlas啟動後會創建多個線程,其中一個為主線程,其餘為工作線程。主線程負責監聽所有的客戶端連接請求,工作線程只監聽主線程的命令請求。
Ku
Ku是圍繞Hadoop生態圈建立的存儲引擎,Ku擁有和Hadoop生態圈共同的設計理念,它運行在普通的伺服器上、可分布式規模化部署、並且滿足工業界的高可用要求。其設計理念為fast analytics on fast data。作為一個開源的存儲引擎,可以同時提供低延遲的隨機讀寫和高效的數據分析能力。Ku不但提供了行級的插入、更新、刪除API,同時也提供了接近Parquet性能的批量掃描操作。使用同一份存儲,既可以進行隨機讀寫,也可以滿足數據分析的要求。Ku的應用場景很廣泛,比如可以進行實時的數據分析,用於數據可能會存在變化的時序數據應用等。
在數據存儲過程中,涉及到的數據表都是成千上百列,包含各種復雜的Query,推薦使用列式存儲方法,比如parquent,ORC等對數據進行壓縮。Parquet 可以支持靈活的壓縮選項,顯著減少磁碟上的存儲。
數據清洗
MapRece作為Hadoop的查詢引擎,用於大規模數據集的並行計算,」Map(映射)」和」Rece(歸約)」,是它的主要思想。它極大的方便了編程人員在不會分布式並行編程的情況下,將自己的程序運行在分布式系統中。
隨著業務數據量的增多,需要進行訓練和清洗的數據會變得越來越復雜,這個時候就需要任務調度系統,比如oozie或者azkaban,對關鍵任務進行調度和監控。
Oozie
Oozie是用於Hadoop平台的一種工作流調度引擎,提供了RESTful API介面來接受用戶的提交請求(提交工作流作業),當提交了workflow後,由工作流引擎負責workflow的執行以及狀態的轉換。用戶在HDFS上部署好作業(MR作業),然後向Oozie提交Workflow,Oozie以非同步方式將作業(MR作業)提交給Hadoop。這也是為什麼當調用Oozie 的RESTful介面提交作業之後能立即返回一個JobId的原因,用戶程序不必等待作業執行完成(因為有些大作業可能會執行很久(幾個小時甚至幾天))。Oozie在後台以非同步方式,再將workflow對應的Action提交給hadoop執行。
Azkaban
Azkaban也是一種工作流的控制引擎,可以用來解決有多個hadoop或者spark等離線計算任務之間的依賴關系問題。azkaban主要是由三部分構成:Relational Database,Azkaban Web Server和Azkaban Executor Server。azkaban將大多數的狀態信息都保存在MySQL中,Azkaban Web Server提供了Web UI,是azkaban主要的管理者,包括project的管理、認證、調度以及對工作流執行過程中的監控等;Azkaban Executor Server用來調度工作流和任務,記錄工作流或者任務的日誌。
流計算任務的處理平台Sloth,是網易首個自研流計算平台,旨在解決公司內各產品日益增長的流計算需求。作為一個計算服務平台,其特點是易用、實時、可靠,為用戶節省技術方面(開發、運維)的投入,幫助用戶專注於解決產品本身的流計算需求
數據查詢分析
Hive
Hive的核心工作就是把SQL語句翻譯成MR程序,可以將結構化的數據映射為一張資料庫表,並提供 HQL(Hive SQL)查詢功能。Hive本身不存儲和計算數據,它完全依賴於HDFS和MapRece。可以將Hive理解為一個客戶端工具,將SQL操作轉換為相應的MapRece jobs,然後在hadoop上面運行。Hive支持標準的SQL語法,免去了用戶編寫MapRece程序的過程,它的出現可以讓那些精通SQL技能、但是不熟悉MapRece 、編程能力較弱與不擅長Java語言的用戶能夠在HDFS大規模數據集上很方便地利用SQL 語言查詢、匯總、分析數據。
Hive是為大數據批量處理而生的,Hive的出現解決了傳統的關系型資料庫(MySql、Oracle)在大數據處理上的瓶頸 。Hive 將執行計劃分成map->shuffle->rece->map->shuffle->rece…的模型。如果一個Query會被編譯成多輪MapRece,則會有更多的寫中間結果。由於MapRece執行框架本身的特點,過多的中間過程會增加整個Query的執行時間。在Hive的運行過程中,用戶只需要創建表,導入數據,編寫SQL分析語句即可。剩下的過程由Hive框架自動的完成。
Impala
Impala是對Hive的一個補充,可以實現高效的SQL查詢。使用Impala來實現SQL on Hadoop,用來進行大數據實時查詢分析。通過熟悉的傳統關系型資料庫的SQL風格來操作大數據,同時數據也是可以存儲到HDFS和HBase中的。Impala沒有再使用緩慢的Hive+MapRece批處理,而是通過使用與商用並行關系資料庫中類似的分布式查詢引擎(由Query Planner、Query Coordinator和Query Exec Engine三部分組成),可以直接從HDFS或HBase中用SELECT、JOIN和統計函數查詢數據,從而大大降低了延遲。Impala將整個查詢分成一執行計劃樹,而不是一連串的MapRece任務,相比Hive沒了MapRece啟動時間。
Hive 適合於長時間的批處理查詢分析,而Impala適合於實時互動式SQL查詢,Impala給數據人員提供了快速實驗,驗證想法的大數據分析工具,可以先使用Hive進行數據轉換處理,之後使用Impala在Hive處理好後的數據集上進行快速的數據分析。總的來說:Impala把執行計劃表現為一棵完整的執行計劃樹,可以更自然地分發執行計劃到各個Impalad執行查詢,而不用像Hive那樣把它組合成管道型的map->rece模式,以此保證Impala有更好的並發性和避免不必要的中間sort與shuffle。但是Impala不支持UDF,能處理的問題有一定的限制。
Spark
Spark擁有Hadoop MapRece所具有的特點,它將Job中間輸出結果保存在內存中,從而不需要讀取HDFS。Spark 啟用了內存分布數據集,除了能夠提供互動式查詢外,它還可以優化迭代工作負載。Spark 是在 Scala 語言中實現的,它將 Scala 用作其應用程序框架。與 Hadoop 不同,Spark 和 Scala 能夠緊密集成,其中的 Scala 可以像操作本地集合對象一樣輕松地操作分布式數據集。
Nutch
Nutch 是一個開源Java 實現的搜索引擎。它提供了我們運行自己的搜索引擎所需的全部工具,包括全文搜索和Web爬蟲。
Solr
Solr用Java編寫、運行在Servlet容器(如Apache Tomcat或Jetty)的一個獨立的企業級搜索應用的全文搜索伺服器。它對外提供類似於Web-service的API介面,用戶可以通過http請求,向搜索引擎伺服器提交一定格式的XML文件,生成索引;也可以通過Http Get操作提出查找請求,並得到XML格式的返回結果。
Elasticsearch
Elasticsearch是一個開源的全文搜索引擎,基於Lucene的搜索伺服器,可以快速的儲存、搜索和分析海量的數據。設計用於雲計算中,能夠達到實時搜索,穩定,可靠,快速,安裝使用方便。
還涉及到一些機器學習語言,比如,Mahout主要目標是創建一些可伸縮的機器學習演算法,供開發人員在Apache的許可下免費使用;深度學習框架Caffe以及使用數據流圖進行數值計算的開源軟體庫TensorFlow等,常用的機器學習演算法比如,貝葉斯、邏輯回歸、決策樹、神經網路、協同過濾等。
數據可視化
對接一些BI平台,將分析得到的數據進行可視化,用於指導決策服務。主流的BI平台比如,國外的敏捷BI Tableau、Qlikview、PowrerBI等,國內的SmallBI和新興的網易有數等。
在上面的每一個階段,保障數據的安全是不可忽視的問題。
基於網路身份認證的協議Kerberos,用來在非安全網路中,對個人通信以安全的手段進行身份認證,它允許某實體在非安全網路環境下通信,向另一個實體以一種安全的方式證明自己的身份。
控制許可權的ranger是一個Hadoop集群許可權框架,提供操作、監控、管理復雜的數據許可權,它提供一個集中的管理機制,管理基於yarn的Hadoop生態圈的所有數據許可權。可以對Hadoop生態的組件如Hive,Hbase進行細粒度的數據訪問控制。通過操作Ranger控制台,管理員可以輕松的通過配置策略來控制用戶訪問HDFS文件夾、HDFS文件、資料庫、表、欄位許可權。這些策略可以為不同的用戶和組來設置,同時許可權可與hadoop無縫對接。
簡單說有三大核心技術:拿數據,算數據,賣數據。