
看Spark源碼的時間不長,記筆記的初衷只是為了不至于日后遺忘。在源碼閱讀的過程中秉持著一種非常簡單的思維模式,就是努力去尋找一條貫穿全局的主線索。在筆者看來,Spark中的線索就是如果讓數(shù)據(jù)的處理在分布式計算環(huán)境下是高效,并且可靠的。
在對Spark內(nèi)部實現(xiàn)有了一定了解之后,當然希望將其應(yīng)用到實際的工程實踐中,這時候會面臨許多新的挑戰(zhàn),比如選取哪個作為數(shù)據(jù)倉庫,是HBase、MongoDB還是Cassandra。即便一旦選定之后,在實踐過程還會遇到許多意想不到的問題。
要想快速的解決開發(fā)及上線過程中遇到的系列問題,還需要具備相當深度的Linux知識,恰巧之前工作中使用Linux的經(jīng)驗在大數(shù)據(jù)領(lǐng)域中還可以充分使用。
筆者不才,就遇到的一些問題,整理出來與諸君共同分享。
NoSQL數(shù)據(jù)庫的選擇之痛,目前市面上有近150多種NoSQL數(shù)據(jù)庫,如何在這么龐雜的隊伍中選中適合業(yè)務(wù)場景的佼佼者,實非易事。
好的是經(jīng)過大量的篩選,大家比較肯定的幾款NoSQL數(shù)據(jù)庫分別是HBase、MongoDB和Cassandra。
Cassandra在哪些方面吸引住了大量的開發(fā)人員呢?下面僅做一個粗略的分析。
1.1 高可靠性
Cassandra采用gossip作為集群中結(jié)點的通信協(xié)議,該協(xié)議整個集群中的節(jié)點都處于同等地位,沒有主從之分,這就使得任一節(jié)點的退出都不會導(dǎo)致整個集群失效。
Cassandra和HBase都是借鑒了Google BigTable的思想來構(gòu)建自己的系統(tǒng),但Cassandra另一重要的創(chuàng)新就是將原本存在于文件共享架構(gòu)的p2p(peer to peer)引入了NoSQL。
P2P的一大特點就是去中心化,集群中的所有節(jié)點享有同等地位,這極大避免了單個節(jié)點退出而使整個集群不能工作的可能。
與之形成對比的是HBase采用了Master/Slave的方式,這就存在單點失效的可能。
1.2 高可擴性
隨著時間的推移,集群中原有的規(guī)模不足以存儲新增加的數(shù)據(jù),此時進行系統(tǒng)擴容。Cassandra級聯(lián)可擴,非常容易實現(xiàn)添加新的節(jié)點到已有集群,操作簡單。
1.3 最終一致性
分布式存儲系統(tǒng)都要面臨CAP定律問題,任何一個分布式存儲系統(tǒng)不可能同時滿足一致性(consistency),可用性(availability)和分區(qū)容錯性(partition tolerance)。
Cassandra是優(yōu)先保證AP,即可用性和分區(qū)容錯性。
Cassandra為寫操作和讀操作提供了不同級別的一致性選擇,用戶可以根據(jù)具體的應(yīng)用場景來選擇不同的一致性級別。
1.4 高效寫操作
寫入操作非常高效,這對于實時數(shù)據(jù)非常大的應(yīng)用場景,Cassandra的這一特性無疑極具優(yōu)勢。
數(shù)據(jù)讀取方面則要視情況而定:
1.5 結(jié)構(gòu)化存儲
Cassandra是一個面向列的數(shù)據(jù)庫,對那些從RDBMS方面轉(zhuǎn)過來的開發(fā)人員來說,其學習曲線相對平緩。
Cassandra同時提供了較為友好CQL語言,與SQL語句相似度很高。
1.6 維護簡單
從系統(tǒng)維護的角度來說,由于Cassandra的對等系統(tǒng)架構(gòu),使其維護操作簡單易行。如添加節(jié)點,刪除節(jié)點,甚至于添加新的數(shù)據(jù)中心,操作步驟都非常的簡單明了。
參考資料
2.1 單表查詢
2.1.1 單表主鍵查詢
在建立個人信息數(shù)據(jù)庫的時候,以個人身份證id為主鍵,查詢的時候也只以身份證為關(guān)鍵字進行查詢,則表可以設(shè)計成為:
create table person ( userid text primary key, fname text, lname text, age int, gender int);
Primary key中的第一個列名是作為Partition key。也就是說根據(jù)針對partition key的hash結(jié)果決定將記錄存儲在哪一個partition中,如果不湊巧的情況下單一主鍵導(dǎo)致所有的hash結(jié)果全部落在同一分區(qū),則會導(dǎo)致該分區(qū)數(shù)據(jù)被撐滿。
解決這一問題的辦法是通過組合分區(qū)鍵(compsoite key)來使得數(shù)據(jù)盡可能的均勻分布到各個節(jié)點上。
舉例來說,可能將(userid,fname)設(shè)置為復(fù)合主鍵。那么相應(yīng)的表創(chuàng)建語句可以寫成
create table person ( userid text, fname text, lname text, gender int, age int, primary key((userid,fname),lname); ) with clustering order by (lname desc);
稍微解釋一下primary key((userid, fname),lname)的含義:
2.1.2 單表非主鍵查詢
如果要查詢表person中具有相同的first name的人員,那么就必須針對fname創(chuàng)建相應(yīng)的索引,否則查詢速度會非常緩慢。
Create index on person(fname);
Cassandra目前只能對表中的某一列建立索引,不允許對多列建立聯(lián)合索引。
2.2 多表關(guān)聯(lián)查詢
Cassandra并不支持關(guān)聯(lián)查詢,也不支持分組和聚合操作。
那是不是就說明Cassandra只是看上去很美其實根本無法解決實際問題呢?答案顯然是No,只要你不堅持用RDBMS的思路來解決問題就是了。
比如我們有兩張表,一張表(Departmentt)記錄了公司部門信息,另一張表(employee)記錄了公司員工信息。顯然每一個員工必定有歸屬的部門,如果想知道每一個部門擁有的所有員工。如果是用RDBMS的話,SQL語句可以寫成:
select * from employee e , department d where e.depId = d.depId;要用Cassandra來達到同樣的效果,就必須在employee表和department表之外,再創(chuàng)建一張額外的表(dept_empl)來記錄每一個部門擁有的員工信息。
Create table dept_empl ( deptId text,
看到這里想必你已經(jīng)明白了,在Cassandra中通過數(shù)據(jù)冗余來實現(xiàn)高效的查詢效果。將關(guān)聯(lián)查詢轉(zhuǎn)換為單一的表操作。
2.3 分組和聚合
在RDBMS中常見的group by和max、min在Cassandra中是不存在的。
如果想將所有人員信息按照姓進行分組操作的話,那該如何創(chuàng)建數(shù)據(jù)模型呢?
Create table fname_person ( fname text, userId text, primary key(fname) );2.4 子查詢
Cassandra不支持子查詢,下圖展示了一個在MySQL中的子查詢例子:
要用Cassandra來實現(xiàn),必須通過添加額外的表來存儲冗余信息。
Create table office_empl ( officeCode text, country text, lastname text, firstname, primary key(officeCode,country)); create index on office_empl(country);
2.5 小結(jié)
總的來說,在建立Cassandra數(shù)據(jù)模型的時候,要求對數(shù)據(jù)的讀取需求進可能的清晰,然后利用反范式的設(shè)計方式來實現(xiàn)快速的讀取,原則就是以空間來換取時間。CDA數(shù)據(jù)分析師培訓(xùn)官網(wǎng)
數(shù)據(jù)分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
LSTM 模型輸入長度選擇技巧:提升序列建模效能的關(guān)鍵? 在循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)家族中,長短期記憶網(wǎng)絡(luò)(LSTM)憑借其解決長序列 ...
2025-07-11CDA 數(shù)據(jù)分析師報考條件詳解與準備指南? ? 在數(shù)據(jù)驅(qū)動決策的時代浪潮下,CDA 數(shù)據(jù)分析師認證愈發(fā)受到矚目,成為眾多有志投身數(shù) ...
2025-07-11數(shù)據(jù)透視表中兩列相乘合計的實用指南? 在數(shù)據(jù)分析的日常工作中,數(shù)據(jù)透視表憑借其強大的數(shù)據(jù)匯總和分析功能,成為了 Excel 用戶 ...
2025-07-11尊敬的考生: 您好! 我們誠摯通知您,CDA Level I和 Level II考試大綱將于 2025年7月25日 實施重大更新。 此次更新旨在確保認 ...
2025-07-10BI 大數(shù)據(jù)分析師:連接數(shù)據(jù)與業(yè)務(wù)的價值轉(zhuǎn)化者? ? 在大數(shù)據(jù)與商業(yè)智能(Business Intelligence,簡稱 BI)深度融合的時代,BI ...
2025-07-10SQL 在預(yù)測分析中的應(yīng)用:從數(shù)據(jù)查詢到趨勢預(yù)判? ? 在數(shù)據(jù)驅(qū)動決策的時代,預(yù)測分析作為挖掘數(shù)據(jù)潛在價值的核心手段,正被廣泛 ...
2025-07-10數(shù)據(jù)查詢結(jié)束后:分析師的收尾工作與價值深化? ? 在數(shù)據(jù)分析的全流程中,“query end”(查詢結(jié)束)并非工作的終點,而是將數(shù) ...
2025-07-10CDA 數(shù)據(jù)分析師考試:從報考到取證的全攻略? 在數(shù)字經(jīng)濟蓬勃發(fā)展的今天,數(shù)據(jù)分析師已成為各行業(yè)爭搶的核心人才,而 CDA(Certi ...
2025-07-09【CDA干貨】單樣本趨勢性檢驗:捕捉數(shù)據(jù)背后的時間軌跡? 在數(shù)據(jù)分析的版圖中,單樣本趨勢性檢驗如同一位耐心的偵探,專注于從單 ...
2025-07-09year_month數(shù)據(jù)類型:時間維度的精準切片? ? 在數(shù)據(jù)的世界里,時間是最不可或缺的維度之一,而year_month數(shù)據(jù)類型就像一把精準 ...
2025-07-09CDA 備考干貨:Python 在數(shù)據(jù)分析中的核心應(yīng)用與實戰(zhàn)技巧? ? 在 CDA 數(shù)據(jù)分析師認證考試中,Python 作為數(shù)據(jù)處理與分析的核心 ...
2025-07-08SPSS 中的 Mann-Kendall 檢驗:數(shù)據(jù)趨勢與突變分析的有力工具? ? ? 在數(shù)據(jù)分析的廣袤領(lǐng)域中,準確捕捉數(shù)據(jù)的趨勢變化以及識別 ...
2025-07-08備戰(zhàn) CDA 數(shù)據(jù)分析師考試:需要多久?如何規(guī)劃? CDA(Certified Data Analyst)數(shù)據(jù)分析師認證作為國內(nèi)權(quán)威的數(shù)據(jù)分析能力認證 ...
2025-07-08LSTM 輸出不確定的成因、影響與應(yīng)對策略? 長短期記憶網(wǎng)絡(luò)(LSTM)作為循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)的一種變體,憑借獨特的門控機制,在 ...
2025-07-07統(tǒng)計學方法在市場調(diào)研數(shù)據(jù)中的深度應(yīng)用? 市場調(diào)研是企業(yè)洞察市場動態(tài)、了解消費者需求的重要途徑,而統(tǒng)計學方法則是市場調(diào)研數(shù) ...
2025-07-07CDA數(shù)據(jù)分析師證書考試全攻略? 在數(shù)字化浪潮席卷全球的當下,數(shù)據(jù)已成為企業(yè)決策、行業(yè)發(fā)展的核心驅(qū)動力,數(shù)據(jù)分析師也因此成為 ...
2025-07-07剖析 CDA 數(shù)據(jù)分析師考試題型:解鎖高效備考與答題策略? CDA(Certified Data Analyst)數(shù)據(jù)分析師考試作為衡量數(shù)據(jù)專業(yè)能力的 ...
2025-07-04SQL Server 字符串截取轉(zhuǎn)日期:解鎖數(shù)據(jù)處理的關(guān)鍵技能? 在數(shù)據(jù)處理與分析工作中,數(shù)據(jù)格式的規(guī)范性是保證后續(xù)分析準確性的基礎(chǔ) ...
2025-07-04CDA 數(shù)據(jù)分析師視角:從數(shù)據(jù)迷霧中探尋商業(yè)真相? 在數(shù)字化浪潮席卷全球的今天,數(shù)據(jù)已成為企業(yè)決策的核心驅(qū)動力,CDA(Certifie ...
2025-07-04CDA 數(shù)據(jù)分析師:開啟數(shù)據(jù)職業(yè)發(fā)展新征程? ? 在數(shù)據(jù)成為核心生產(chǎn)要素的今天,數(shù)據(jù)分析師的職業(yè)價值愈發(fā)凸顯。CDA(Certified D ...
2025-07-03