OpenStack如何在大數(shù)據(jù)用例中扮演關(guān)鍵角色
OpenStack 控制計(jì)算、存儲(chǔ)和網(wǎng)絡(luò)資源池。本文主要關(guān)注 OpenStack 如何在大數(shù)據(jù)用例中扮演關(guān)鍵角色。
OpenStack 上的大數(shù)據(jù)
現(xiàn)在,數(shù)據(jù)隨處生成,數(shù)據(jù)量呈指數(shù)增長(zhǎng)。來自 Web 服務(wù)器、應(yīng)用程序服務(wù)器、數(shù)據(jù)庫服務(wù)器的數(shù)據(jù)以用戶信息、日志文件和系統(tǒng)狀態(tài)信息的形式提供。大量的數(shù)據(jù)也由物聯(lián)網(wǎng)設(shè)備產(chǎn)生,如傳感器、車輛、工業(yè)設(shè)備等。從科學(xué)模擬模型生成的數(shù)據(jù)也是大數(shù)據(jù)的來源之一。使用傳統(tǒng)軟件工具來存儲(chǔ)和執(zhí)行這些數(shù)據(jù)的分析可能很困難,而 Hadoop 可以解決這個(gè)問題。
看一個(gè)用例場(chǎng)景 —— 大量的數(shù)據(jù)存儲(chǔ)在關(guān)系數(shù)據(jù)庫管理系統(tǒng)環(huán)境中。當(dāng)數(shù)據(jù)集越來越大時(shí), RDBMS ( 關(guān)系數(shù)據(jù)庫管理系統(tǒng) Relational Database Management System )表現(xiàn)不佳。而且這個(gè)問題會(huì)隨著數(shù)據(jù)集的增長(zhǎng)而越發(fā)嚴(yán)重。在這個(gè)階段,避免采用 NoSQL 。需要以具有成本效益的方式存儲(chǔ)和處理大量數(shù)據(jù)。應(yīng)該依賴非虛擬化環(huán)境中的高端服務(wù)器嗎?要求是隨時(shí)擴(kuò)展集群,需要一個(gè)更好的儀表板來管理其所有組件。
計(jì)劃在 OpenStack 之上建立一個(gè) Hadoop 集群并創(chuàng)建 ETL ( Extract-Transform-Load)作業(yè)環(huán)境。Hadoop 是一個(gè)行業(yè)標(biāo)準(zhǔn)框架,用于存儲(chǔ)和分析具有容錯(cuò) Hadoop 分布式文件系統(tǒng)和 MapReduce 實(shí)施的大型數(shù)據(jù)集。然而,可伸縮性在典型的 Hadoop 集群中是一個(gè)非常普遍的問題。
Openstack 推出了一個(gè)名為 Sahara 的項(xiàng)目 —— 數(shù)據(jù)處理即服務(wù)。 Openstack Sahara 旨在配置和管理數(shù)據(jù)處理框架,如集群拓?fù)渲械?hadoop mapreduce、spark和Storm 。該項(xiàng)目與 Amazon Elastic MapReduce(EMR) 服務(wù)提供的數(shù)據(jù)分析平臺(tái)類似。Openstack Sahara 可在幾分鐘內(nèi)部署集群。此外,Openstack Sahara 可以根據(jù)需求通過添加或刪除工作節(jié)點(diǎn)來伸縮集群。
使用 Openstack Sahara 管理 Hadoop 集群的好處
- ——集群可以更快地提供且易于配置。
- ——像其他 OpenStack 服務(wù)一樣,Sahara 服務(wù)可以通過強(qiáng)大的 REST API、CLI 和 Horizon 儀表板進(jìn)行管理。
- ——插件可用于支持 Vannila(Apache Hadoop)、HDP(ambari)、CDH(Cloudera)、MapR、Spark、Storm 等多個(gè) Hadoop 供應(yīng)商。
- ——集群大小可根據(jù)需求進(jìn)行伸縮。
- ——可以與 OpenStack Swift 集成以存儲(chǔ)由 Hadoop和 Spark 處理的數(shù)據(jù)。
- ——集群監(jiān)控變得簡(jiǎn)單。
- ——除集群配置外,Sahara 還可以用作分析即服務(wù),用于臨時(shí)或突發(fā)分析工作負(fù)載。
架構(gòu)
Openstack Sahara 旨在利用 OpenStack 的核心服務(wù)和其他完全托管服務(wù)。這使 Sahara 更加可靠并且能夠有效地管理 Hadoop 集群,你可以選擇使用包括 Trove( OpenStack 數(shù)據(jù)服務(wù)組件,允許用戶對(duì)關(guān)系型數(shù)據(jù)庫進(jìn)行管理,實(shí)現(xiàn)了 Mysql 實(shí)例的異步復(fù)制和提供 PostgreSQL 數(shù)據(jù)庫的實(shí)例。) 和 Swift 在內(nèi)的服務(wù)。來看看 Sahara 的架構(gòu)。
- —— Sahara 服務(wù)有一個(gè) API 服務(wù)器,它響應(yīng)來自最終用戶的 HTTP 請(qǐng)求并與其他 OpenStack 服務(wù)交互以執(zhí)行其功能。
- —— Keystone (身份即服務(wù))對(duì)用戶進(jìn)行身份驗(yàn)證,并提供用于與 OpenStack 配合使用的安全令牌,將用戶在 Sahara 中的能力限制為其 OpenStack 權(quán)限。
- —— Heat (編排即服務(wù))用于配置和編排數(shù)據(jù)處理集群的部署。
- —— Glance(虛擬機(jī)鏡像即服務(wù))使用操作系統(tǒng)和預(yù)安裝的 Hadoop / Spark 軟件包存儲(chǔ) VM 鏡像以創(chuàng)建數(shù)據(jù)處理集群。
- —— Nova (計(jì)算)為數(shù)據(jù)處理集群提供虛擬機(jī)。
- —— Ironic(裸機(jī)即服務(wù))為數(shù)據(jù)處理集群提供裸機(jī)節(jié)點(diǎn)。
- —— Neutron(網(wǎng)絡(luò))便于網(wǎng)絡(luò)服務(wù)從基礎(chǔ)到高級(jí)拓?fù)湓L問數(shù)據(jù)處理集群。
- —— Cinder(塊存儲(chǔ))為集群節(jié)點(diǎn)提供持久存儲(chǔ)介質(zhì)。
- —— Swift(對(duì)象存儲(chǔ))提供可靠的存儲(chǔ)來保存作業(yè)二進(jìn)制文件和由hadoop / spark處理的數(shù)據(jù)。
- —— Designate(DNS即服務(wù))提供托管區(qū)域以保留集群實(shí)例的DNS記錄。 Hadoop服務(wù)通過主機(jī)名與群集實(shí)例進(jìn)行通信。
- —— Ceilometer(telrmetry)收集和存儲(chǔ)有關(guān)用于計(jì)量和監(jiān)控目的的集群指標(biāo)。
- —— Manila(文件共享)可用于存儲(chǔ)作業(yè)創(chuàng)建的作業(yè)二進(jìn)制文件和數(shù)據(jù)。
- —— Barbican(密鑰管理服務(wù))安全地存儲(chǔ)密碼和私鑰等敏感數(shù)據(jù)。
- ——Trove(數(shù)據(jù)庫即服務(wù))為 hive metastore 提供數(shù)據(jù)庫實(shí)例,并存儲(chǔ) Hadoop 服務(wù)和其他管理服務(wù)的狀態(tài)。
如何建立Sahara集群
請(qǐng)按照部署 Sahara 安裝指南中的步驟操作。不同的部署環(huán)境有不同的方式,如果你想要試驗(yàn), Kolla 也是一個(gè)不錯(cuò)的選擇。
你還可以通過 Horizon 儀表板管理 Sahara 項(xiàng)目。
用Sahara集群ETL(提取、轉(zhuǎn)換和加載)或ELT(提取、加載和轉(zhuǎn)換)
市場(chǎng)上有很多 ETL 工具可用。
傳統(tǒng)數(shù)據(jù)倉庫有其自身的優(yōu)點(diǎn)和局限性,例如它可能位于數(shù)據(jù)源以外的其他位置。Hadoop 是運(yùn)行 ETL 作業(yè)的理想平臺(tái)。
數(shù)據(jù)存儲(chǔ)區(qū)中有各種數(shù)據(jù),包括結(jié)構(gòu)化、半結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù)。Hadoop生態(tài)系統(tǒng)有從不同數(shù)據(jù)源(包括數(shù)據(jù)庫、文件和其他數(shù)據(jù)流)中提取數(shù)據(jù)并將其存儲(chǔ)在集中式 Hadoop Distributed File System(HDFS) 中的工具。
隨著數(shù)據(jù)快速增長(zhǎng),Hadoop 集群可以擴(kuò)展并利用OpenStack Sahara 。
Apache Hive 是建立在 Hadoop 生態(tài)系統(tǒng)之上的數(shù)據(jù)倉庫項(xiàng)目,也是進(jìn)行 ETL 分析的可靠工具。一旦使用工具(如 Sqoop、Flume、Kafka 等)從數(shù)據(jù)源中提取數(shù)據(jù)后,應(yīng)該使用 MapReduce 技術(shù)用 Hive 或pig scripts 進(jìn)行清理和轉(zhuǎn)換。
Hive 的另一個(gè)優(yōu)點(diǎn)是它是一個(gè)交互式查詢引擎,可以通過 Hive 查詢語言訪問。它類似于 SQL 。因此,數(shù)據(jù)庫人員可以在不掌握 Java 和 MapReduce 概念的情況下,在 Hadoop 生態(tài)系統(tǒng)中執(zhí)行作業(yè)。Hive 查詢執(zhí)行引擎解析 Hive 查詢并將其轉(zhuǎn)換為一系列 MapReduce / Spark 作業(yè)。Hive 可以通過JDBC / ODBC 驅(qū)動(dòng)程序和瘦客戶端訪問。
Oozie 是 Hadoop 生態(tài)系統(tǒng)中可用的工作流引擎。工作流是一組必須作為分布式環(huán)境中的序列執(zhí)行的任務(wù)。Oozie 幫助創(chuàng)建一個(gè)簡(jiǎn)單的工作流來層疊多個(gè)工作流并創(chuàng)建協(xié)調(diào)的作業(yè)。Oozie 用于為復(fù)雜的 ETL 作業(yè)創(chuàng)建工作流也很理想,盡管它沒有模塊來支持與 Hadoop 相關(guān)的所有操作。
我們可以使用任何工作流引擎來執(zhí)行 ETL 工作,例如 Openstack Mistral (工作流即服務(wù))。Apache oozie 在某些方面類似于 Openstack Mistral ,充當(dāng)可以定期觸發(fā)的作業(yè)調(diào)度器。
我們來看看一個(gè)典型的 ETL 作業(yè)流程,它使用Hadoop 將應(yīng)用程序?qū)⑵鋽?shù)據(jù)存儲(chǔ)在 MySQL 服務(wù)器中。存儲(chǔ)的數(shù)據(jù)需要以最少的成本和時(shí)間進(jìn)行分析。
提取
***步是從 MySQL 中提取數(shù)據(jù)并將其存儲(chǔ)在 HDFS中。
Apache Sqoop 可用于從結(jié)構(gòu)化數(shù)據(jù)源(如 RDBMS數(shù)據(jù)存儲(chǔ))導(dǎo)出/導(dǎo)入數(shù)據(jù)。
如果要提取的數(shù)據(jù)是半結(jié)構(gòu)化的或非結(jié)構(gòu)化的,你可以使用 Apache Flume 從數(shù)據(jù)鏈接中獲取數(shù)據(jù),例如 Web 服務(wù)器日志、Twitter 數(shù)據(jù)流或傳感器數(shù)據(jù)。
轉(zhuǎn)換
從上述階段提取的數(shù)據(jù)格式不正確(只是原始數(shù)據(jù))。應(yīng)該用適當(dāng)?shù)倪^濾器和數(shù)據(jù)聚合來清理。
這是在 HDFS 中存儲(chǔ)數(shù)據(jù)必不可少的。
此時(shí),我們需要為每個(gè)表設(shè)計(jì) Hive 模式,并創(chuàng)建一個(gè)數(shù)據(jù)庫來轉(zhuǎn)換存儲(chǔ)在臨時(shí)區(qū)域中的數(shù)據(jù)。
通常情況下,數(shù)據(jù)采用 .csv 格式,每條記錄均以逗號(hào)分隔。
我們不需要檢查 HDFS 數(shù)據(jù)以了解它是如何存儲(chǔ)的。有一些異常數(shù)據(jù)類型應(yīng)該與 Hive 兼容。
數(shù)據(jù)庫建模后,我們可以加載提取的數(shù)據(jù)進(jìn)行清理。表格中的數(shù)據(jù)仍然未標(biāo)準(zhǔn)化。從不同的表中聚合所需的列。
同樣,可以用“ OVERWRITE INTO TABLE ”語句來匯總多個(gè)表中的數(shù)據(jù)。
Hive 支持分區(qū)表,通過水平分配執(zhí)行負(fù)載來提高查詢性能。我們傾向于分區(qū)存儲(chǔ)年份和月份的列。有時(shí),分區(qū)表在 MapReduce 作業(yè)中創(chuàng)建更多任務(wù)。
加載
現(xiàn)在是時(shí)候?qū)⑥D(zhuǎn)換后的數(shù)據(jù)加載到 HDFS 中的數(shù)據(jù)倉庫目錄中,這是數(shù)據(jù)的最終狀態(tài)。在這里,我們可以應(yīng)用 SQL 查詢來獲得適當(dāng)?shù)慕Y(jié)果。
所有的 DML 命令都可以用來分析基于用例的倉庫數(shù)據(jù)。
結(jié)果可以下載為 .csv、表格或圖表進(jìn)行分析。它可以與其他流行的商業(yè)智能工具(如Talend OpenStudio、Tabelau 等)集成。
自動(dòng)化
現(xiàn)在使用 Oozie 工作流引擎自動(dòng)執(zhí)行 ETL 作業(yè)(你也可以使用 Mistral,大多數(shù) Hadoop 用戶習(xí)慣用Apache Oozie )。
結(jié)論
OpenStack 集成了一個(gè)非常大的 Hadoop 生態(tài)系統(tǒng),許多云提供商提供 Hadoop 服務(wù)(只需要點(diǎn)擊幾下它們的云管理門戶網(wǎng)站即可)。Sahara 支持大部分 Hadoop 供應(yīng)商插件,讓你執(zhí)行 ETL 工作流。