版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
Cloudera開發(fā)者學(xué)習(xí)筆記Cloudera簡介:CDH:Cloudera'sDistnbutionincludingApacheHadoop:最完整經(jīng)過測試的廣泛部署的Hadoop發(fā)行版本、集成了所有關(guān)鍵的Hadoop生態(tài)系統(tǒng)項目CDH可分為ClouderaExpress(免費(fèi))和ClouderaEnterprise(收費(fèi)并附加額外ClouderaManager功能)ClouderaExpress提供免費(fèi)的ClouderaManagerHadoop端到端的管理、部署、管理和監(jiān)控集群ClouderaEnterprise提供收費(fèi)的ClouderaManager支持配置歷史記錄和回滾、滾動更新、LDAP集成、SNMP支持、自動災(zāi)難恢復(fù)等企業(yè)級客戶需要的功能Hadoop!:STREAMSEARCHImpalaPROCESS,ANALYZE,SERVEBATCHRELATIONALNoSQLFILESYSTEMHDFSKuduHBas?UNIFIEDSERVICESSpark.Hive.PigMapReduceSECURITYSTREAMSEARCHImpalaPROCESS,ANALYZE,SERVEBATCHRELATIONALNoSQLFILESYSTEMHDFSKuduHBas?UNIFIEDSERVICESSpark.Hive.PigMapReduceSECURITYSentry.RecordserviceRESOURCEMANAGEMENTYARNSTOREBATCHSqoopBATCHSqoopKafka?FlumeINTEGRATE常見的Hadoop使用案列:提取/轉(zhuǎn)換/加載(ETL)數(shù)據(jù)清洗、文本挖掘、索引建立、圖形創(chuàng)建和分析、模式識別、協(xié)調(diào)過濾、預(yù)測模型、情感分析、風(fēng)險評估等數(shù)據(jù)量大、速度快、數(shù)據(jù)多樣的數(shù)據(jù)分析使用Hadoop進(jìn)行大數(shù)據(jù)處理:
將程序帶入數(shù)據(jù)而不是數(shù)據(jù)到程序(數(shù)據(jù)本地化)兩個關(guān)鍵的概念是數(shù)據(jù)存儲時分配數(shù)據(jù)、在數(shù)據(jù)所在位置進(jìn)行計算Hadoop的核心組件:將程序帶入數(shù)據(jù)而不是數(shù)據(jù)到程序(數(shù)據(jù)本地化)兩個關(guān)鍵的概念是數(shù)據(jù)存儲時分配數(shù)據(jù)、在數(shù)據(jù)所在位置進(jìn)行計算Hadoop的核心組件:Storage:HDFS、ResourceManagement:YARN、Processing:Spark、MapReduce數(shù)據(jù)采集和存儲(IngestandStorage):數(shù)據(jù)采集:傳統(tǒng)的數(shù)據(jù)管理系統(tǒng)如數(shù)據(jù)庫、曰志和其他機(jī)器生成的數(shù)據(jù)(事件數(shù)據(jù))、導(dǎo)入的文件數(shù)據(jù)存儲:Hadoop分布式文件系統(tǒng)(HDFS)、ApacheHBase(Hadoop數(shù)據(jù)庫):基于HDFS的NOSQL分布式數(shù)據(jù)庫、支持非常大量的數(shù)據(jù)和高吞吐量只有一張表、以冗余度換取查詢搜索時間數(shù)據(jù)采集工具:HDFS直接文件傳輸:hdfsdfs-put目標(biāo)文件目的地址和文件名(HDFS上的路徑)、ApacheSqoop:從關(guān)系型數(shù)據(jù)庫高速導(dǎo)入HDFS中(sqoopimport)得出用sqoopexportsApacheFlume:用于攝取流數(shù)據(jù)的分布式服務(wù),非常適合來自多個系統(tǒng)的事件數(shù)據(jù)如曰志文件、Kafka:高吞吐量、可擴(kuò)展的消息系統(tǒng),分布式、可靠的發(fā)布訂閱系統(tǒng),與Flume和SparkStreaming集成Hadoop大規(guī)模數(shù)據(jù)處理引擎:ApacheSpark:運(yùn)行于Hadoop集群和HDFS中的數(shù)據(jù)HadoopMapReduce:原始的Hadoop處理引擎(框架)主要基于Java、仍然是主導(dǎo)技術(shù)、但沒有Spark速度快、具有廣泛而成熟的容錯能力分布式數(shù)據(jù)分析處理組件:ApachePig:構(gòu)建在Hadoop上以提供高級數(shù)據(jù)處理、寫底層MapReduce腳本方法、善于加入和轉(zhuǎn)換數(shù)據(jù)、Pig解釋器在客戶機(jī)上運(yùn)行:將PigLatin腳本轉(zhuǎn)換成MapReduce或Sparkjobs并將作業(yè)提交到Hadoop集群處理ApacheImpala:高性能的SQL引擎運(yùn)行在Hadoop集群上,數(shù)據(jù)存儲在HDFS文件或HBase表中.基于內(nèi)存的計算非常低的延遲-以毫秒為單位,是理想的互動型分析工具、Impala支持SQL方言(ImpalaSQL)HDFS中的數(shù)據(jù)建模為數(shù)據(jù)庫表(數(shù)據(jù)可以與Hive共享)ApacheHive:hive是Hadoop之上的一個抽象層,使用類似SQL語言的HiveQL(類似于ImpalaSQL)、適用于數(shù)據(jù)處理和ETL,底層為MapReduce執(zhí)行查詢ApacheSolr:交互式全文搜索Hadoop集群中的數(shù)據(jù)允許非技術(shù)用戶訪問數(shù)據(jù)、動態(tài)基于Web的儀表盤與Hue界面,基于ApacheSentry的安全性Hadoop的其他生態(tài)系統(tǒng)工具:Hue(HadoopUserExperience):Hadoop的Ul,web前端的Hadoop使Hadoop更容易使用ApacheOozie:工作流管理,Hadoop作業(yè)的工作流引擎、定義作業(yè)之間的依賴關(guān)系,Oozie服務(wù)器以正確的順序?qū)⒆鳂I(yè)提交到服務(wù)器ApacheSentry:為Hadoop生態(tài)系統(tǒng)組件提供了細(xì)粒度的訪問控制(授權(quán))Impala、Hive、ClouderaSearchsHDFS,結(jié)合Kerberos認(rèn)證,提供了一個整體集群安全解決方案Hadoop是分布式存儲和處理的框架核心Hadoop包括用于存儲的HDFS和用于集群資源管理的YARNHadoop生態(tài)系統(tǒng)包括許多組件:攝入數(shù)據(jù)(Flume、Sqoop、Kafka)存儲數(shù)據(jù)(HDFS、HBase)處理數(shù)據(jù)(Spark、HadoopMapReduce、Pig)將數(shù)據(jù)建模為SQL訪問表(Impala.Hive)探索數(shù)據(jù)(Hue、Search)保護(hù)數(shù)據(jù)(Sentry)HDFS基本概念:HDFS(HadoopDistributedFileSystem):用java編寫的分布式文件系統(tǒng)、基于谷歌的GFS論文實現(xiàn)、位于本地文件系統(tǒng)之上,為大量數(shù)據(jù)提供冗余存儲。HDFS中的文件是“WriteOnee"模式,不允許隨機(jī)寫入文件、不能修改,讀取模式為大型流式讀?。╯treamingreadsoffiles)。文件在HDFS中被切分為大小固定(默認(rèn)為128M)的數(shù)據(jù)塊(block).每一個數(shù)據(jù)塊復(fù)制在多個數(shù)據(jù)節(jié)點(DataNode)上(默認(rèn)為3個),集群cluster有且僅有一個NameNode用于存儲元數(shù)據(jù)信息(1.路徑2.blklD3.log曰志4.DataNode地址),所有的DataNode由NameNode管理(即訪問DataNode必須先從NameNode處取得DataNode的信息)HDFSNameNode可用性:NameNode守護(hù)進(jìn)程必須始終運(yùn)行(一旦停止將無法訪問集群),通常設(shè)置為高可用性避免單點故障(HA)有一個備用的NameNode,小集群也可以使用經(jīng)典模式:一個NameNode、一個SecondaryNameNode(用于輔助NameNode工作,記錄bookkeeping,不是備份notbackup)訪問HDFS:FsShell:$hdfsdfs可查看命令項在Spark中通過URL如hdfs://nnhost:port/file(namenode的默認(rèn)端口號為8020,50070/50470)調(diào)用HDFS的API接口直接訪問HDFS如pig、hive、Impala中的hdfs接口資源管理YARN架構(gòu):YARN二YetAnotherResourceNegotiator(另一個資源談判者)YARN是包含Hadoop的處理層:資源管理、作業(yè)調(diào)度程序YARN的守護(hù)進(jìn)程:ResourceManager(RM)資源管理器:在主節(jié)點(NameNode)上運(yùn)行的守護(hù)程序、負(fù)責(zé)全局資源調(diào)度,競爭應(yīng)用之間的仲裁系統(tǒng)資源,提供一個可插撥的調(diào)度程序來支持不同的算法(如容量、公平調(diào)度程序等)NodeManager(NM):在工作節(jié)點(DataNode)上運(yùn)行,作用是與RM通信從而根據(jù)RM的指令管理節(jié)點資源,另一個作用是推出容器(資源評估)Containers(容器):根據(jù)資源需求由RM創(chuàng)建,在從節(jié)點上分配所需資源使應(yīng)用程序在一個或多個容器中運(yùn)行ApplicationMaster(AM):每個應(yīng)用程序?qū)?yīng)一個AM,是框架/特定應(yīng)用程序,在容器中運(yùn)行,會請求更多容器來運(yùn)行應(yīng)用程序任務(wù)Hadoop為開發(fā)人員提供了三個主要的YARN工具、Hue作業(yè)瀏覽器、YARNWebUl、YARN命令行。ResourceManagerUl是主要的入口點、默認(rèn)在運(yùn)行RM的主機(jī)(NameNode)的8080端口上JobHistoryServer作業(yè)歷史服務(wù)器:YARN沒有跟蹤作業(yè)和歷史,Spark和MapReduce都提供了作業(yè)歷史記錄服務(wù)器用于歸檔作業(yè)的指標(biāo)和元數(shù)據(jù),可以通過作業(yè)歷史記錄UI或Hue訪問YARN命令行:用于配置和查看有關(guān)YARN集群信息的命令、基本格式為yarn<command>大多數(shù)YARN命令用于管理也有一部分用于開發(fā)如:yarn-list用于查看正在運(yùn)行的應(yīng)用程序yarn-killjobid用于終止一個正在運(yùn)行的應(yīng)用程序Clientyarnlogs-applicationld<app-id>查看指定應(yīng)用程序的曰志yarn-help查看命令選項ClientaResource[QI、ManagerI使用ApacheSqoop導(dǎo)入關(guān)系型數(shù)據(jù):Sqoop用于在數(shù)據(jù)庫和HDFS之間交換數(shù)據(jù)、可以將所有表、單個表或表部分導(dǎo)入HDFS,數(shù)據(jù)可以以各種格式導(dǎo)入,可以將數(shù)據(jù)從HDFS導(dǎo)入到數(shù)據(jù)庫中Sqoop的工作原理:底層是MapReduce,導(dǎo)入的基本步驟為1?檢查表的詳細(xì)信息(元數(shù)據(jù)信息),2?創(chuàng)建并將作業(yè)提交到集群,3從表中獲取記錄,并將數(shù)據(jù)寫入到HDFSSqoop的基本語法為sqooptool-name[tool?options]常用的sqoop命令為:sqoopimport--connectjdbc:mysql://dbhost/PATH\sernamedbuser--passwordpwSqooplist-tables-connectjdbc:mysql://dbhost/PATHSqoopeval-queryUSQL語句"-connectjdbc:mysql://Sqoopexport一connectjdbc:mysql://導(dǎo)入過程有HadoopMapReduce作業(yè)執(zhí)行、sqoop首先要檢查導(dǎo)入的表,確認(rèn)主鍵,運(yùn)行邊界查詢以查看將導(dǎo)入多少條記錄,將邊界查詢結(jié)果除以任務(wù)數(shù)(mapper)使用它來配置任務(wù),以使他們具有相等的負(fù)載,sqoop還會為正在導(dǎo)入的每個表生成一個Java源文件(在導(dǎo)入過程中編譯并使用、導(dǎo)入之后仍然保留、但可以刪除)Sqoopimport-all-tables導(dǎo)入數(shù)據(jù)庫中的所有表默認(rèn)以逗號分隔文件,--warehouse-dir<hdfs路徑〉或者--target-dir<hdfs路徑〉來指定導(dǎo)入的數(shù)據(jù)庫表存放在hdfs的什么位置(兩者的區(qū)別在于使用-warehouse-dir指定的路徑是在hdfs上創(chuàng)建路徑之后再以表名創(chuàng)建文件夾存放數(shù)據(jù),而使用-target-dir后直接給出路徑是指在hdfs上的最終路徑、不根據(jù)表名創(chuàng)建文件夾)、但默認(rèn)為/user/hive/warehouse路徑下Sqoop支持增量導(dǎo)入、但由于HDFS的writeonce特性實際上是創(chuàng)建了一個新的hdfs文件,使用(一incrementallastmodifaied)將導(dǎo)入模式設(shè)置為修改追加模式,表中需要有一個時間戳字段,使用--check-columnv時間戳字段〉,并設(shè)置在上一次導(dǎo)入時的時間戳字段的最大值?-last-value'時間戳’--incrementalappend設(shè)置為追加模式、將主鍵作為檢查字段-check-columnid,設(shè)置上一次導(dǎo)入的最大值-last-value<key>Sqoopexport導(dǎo)出數(shù)據(jù)需使用--export-dir<hdfs路徑〉指定要導(dǎo)出的數(shù)據(jù)位■,--update-modeallowinsert導(dǎo)出模式為插入(數(shù)據(jù)庫中已有這張表)-table<表名〉指定要導(dǎo)出到那張表?-columns11字段名,字段名”可選擇表中的某幾列導(dǎo)入-whereK條件”查詢滿足條件的行導(dǎo)入?-split-by字段(在表未指明主鍵的情況下指定以某個字段作為導(dǎo)入分配時的切分邊界查詢)--query*sql查詢語句'(where條件后必須添加SCONDITIONS)where后如果有查詢條時在whereSCONDITIONS后使用AND條件表達(dá)式提升Sqoop導(dǎo)入性能:更改數(shù)據(jù)庫連接選項(通用為JDBC),直接模式??direct,控制并行性:使用?m或--num-mappers來設(shè)置并行數(shù)(默認(rèn)為4)--fields-terminated-by“\t”設(shè)置分隔符為制表符,默認(rèn)情況下以文本導(dǎo)入的數(shù)據(jù)分隔符是逗號--null-non-string 填充的值’填充空值真實生產(chǎn)環(huán)境中應(yīng)使用的sqoop版本是sqoop2--hive-import直接將數(shù)據(jù)作為hive或impala的表,在hive中創(chuàng)建元數(shù)據(jù)?-hive-database<databasename>將數(shù)據(jù)導(dǎo)入到指定數(shù)據(jù)庫?-as-avrodatafile將數(shù)據(jù)以Avro格式導(dǎo)入/導(dǎo)出--as-parquetfile將數(shù)據(jù)以parquet格式導(dǎo)入/導(dǎo)出--compression-codec所用sqoop壓縮(壓縮格式可設(shè)置為snappy/gzip2等)Hive和Impala簡介:兩者都是提供SQL查詢存儲在HDFS/HBase中的數(shù)據(jù)的工具Hive:是MapReduce之上的一個高級抽象,使用HiveQL,生成在Hadoop集群上運(yùn)行的MapReduce或spark作業(yè)。Impala:是一種高性能的專用SQL引擎,使用ImpalaSQL,低查詢延時(以毫秒為單位)Hive具有更多的功能如:對復(fù)雜數(shù)據(jù)類型的支持(如數(shù)組,map)和窗口分析的更廣泛支持,高度可擴(kuò)展性,常用于批量加工Impala具有更快的速度:是專業(yè)SQL引擎的5-50倍性能以上,是理想的交互式查詢和數(shù)據(jù)分析工具。 ParseImpalaSQLMakeoptimizationsPlanexecutionExecutequeryonthecluster -A— ParseImpalaSQLMakeoptimizationsPlanexecutionExecutequeryontheclusterParseHiveQLMakeoptimi2ationsPlanexecutionSubmitjob(s)toclusterMonitorprogressHDFSHadoopClusterDataProcessingEngine(MapReduceorSpark)HadoopClusterHDFSHDFSHadoopClusterDataProcessingEngine(MapReduceorSpark)HadoopClusterHDFS曰志文件分析:服務(wù)器曰志文件是重要的數(shù)據(jù)源:Hive和Impala允許處理曰志文件的目錄允許類似于原始數(shù)據(jù)的SQL查詢情感分析:商業(yè)智能:Hive和Impala的交互:Hive和Impala提供許多用于運(yùn)行查詢的接口:命令行(Impala:Impalashell,Hive:beeline),HueWebUl(Hive查詢編輯器,Impala查詢編輯器,MetastoreManager),ODBC/JDBCImpala-shell-ihostname:port指定連接到服務(wù)器使用shell從Impala中執(zhí)行系統(tǒng)內(nèi)部命令(不支持hdfs命令,但可以使用hdfsdfs)Impala-shell-fxxx.sql執(zhí)行包含查詢的文件Impala-shell-ddatabase選擇要操作的數(shù)據(jù)庫Impala-shell-q4SQL語句,直接運(yùn)行查詢Impala-shell?fxxx.sql?oresults.txt??delimited-output_delimiyer=7-o捕獲輸出到文件,可選定分隔符:'(默認(rèn)為\t)啟動beeline(Hive的shell):通過指定的Hive2服務(wù)器的URL來啟動beeline(加上用戶名和密碼,如果需要的話):beeline-ujdbc:hive2://host:10000-ntraining(這里的host是hive2服務(wù)器的ip地址)使用!號執(zhí)行beeline的內(nèi)部命令如:Jconnecturl連接到不同的hive2服務(wù)器,!verbose顯示添加的查詢的詳細(xì)信息beeline的相關(guān)命令還有beeline-u -fmyquery.sql執(zhí)行查詢代碼,-eSELECT*FROMuser'直接從命令查詢,--silent抑制信息性消息使用Hive和Impala建模和管理數(shù)據(jù):元數(shù)據(jù)存儲在Metastroe中,hive和impala使用相同的數(shù)據(jù)HDFS中的表,Metastore中的元數(shù)據(jù)類似于SQL語句,使用關(guān)鍵字LOCATION可以指定數(shù)據(jù)存放位置(HDFS中的路徑),創(chuàng)建外部表使用關(guān)鍵字EXTERNAL(外部表在刪除時只刪除元數(shù)據(jù)、數(shù)據(jù)會保留,用于數(shù)據(jù)復(fù)用時),根據(jù)現(xiàn)有表創(chuàng)建新表使用關(guān)鍵字LIKE創(chuàng)建的表結(jié)構(gòu)和Like的表一致,describeformatted查看詳細(xì)元數(shù)據(jù)信息,showcreatetable顯示創(chuàng)建表的SQL命令hive和impala是閱讀模式(schemaonread)是指不驗證插入的數(shù)據(jù),文件只是簡單的移動到創(chuàng)建表時指定的位置(HDFS中),因此數(shù)據(jù)加載到表格非常快,只有在執(zhí)行查詢時才會發(fā)現(xiàn)文件格式的錯誤,丟失或無效的數(shù)據(jù)將表示為NULL,加載數(shù)據(jù)時只需將文件添加到hdfs表中的目錄,可以使用hdfsdfs命令或者使用LOADDATAINPATH路徑或目錄INTOTABLE表名命令從Hive或Impala內(nèi)完成數(shù)據(jù)加載(與hdfs命令類似均是移動文件到hdfs表目錄,源文件可以是文件或目錄)使用OVERWRITE關(guān)鍵字在導(dǎo)入之前刪除所有記錄LOADDATAINPATH7tmp/sales.txfOVERWRITEINTOTABLEsales;,填充表的另一種方式是通過查詢,使用insertinto將結(jié)果添加到現(xiàn)有Hive表中:INSERTINTOTABLEaccount_copySELECT*FROMaccounts;,同樣使用OVERWRITE可以替換所有現(xiàn)有數(shù)據(jù)INSERTOVERWRITETABLEaccount.copySELECT--HCatalog:HCatalog是hive中的子項目,可以訪問Metastore,使用hive的DDL(數(shù)據(jù)定義語言)語法heat-e"指定單個命令,heat-f執(zhí)行文件中的DDL語言Impala元數(shù)據(jù)緩存:Impala在集群中的每個工作節(jié)點運(yùn)行著Impala守護(hù)進(jìn)程,在主節(jié)點上運(yùn)行著另外兩個守護(hù)程序以支持查詢執(zhí)行:StateStore守護(hù)進(jìn)程和Catalog守護(hù)進(jìn)程,StateStore進(jìn)程的作用是提供impala守護(hù)進(jìn)程查詢服務(wù),定期檢查impala守護(hù)進(jìn)程的狀態(tài),Catalog進(jìn)程的作用是將元數(shù)據(jù)更改中繼到集群中的所有impala守護(hù)進(jìn)程中去元數(shù)據(jù)緩存:impala守護(hù)進(jìn)程高速緩存元數(shù)據(jù),在啟動時從Metastore緩存當(dāng)一個impala守護(hù)程序更改metastore時會通知目錄服務(wù)(catalog),目錄服務(wù)會通知其他所有impala守護(hù)進(jìn)程更新緩存,此時從impala之外的元數(shù)據(jù)更新不為impala所知,因此impala元數(shù)據(jù)高速緩存將是失效的,必須手動刷新或無效impala的元數(shù)據(jù)緩存(manuallyrefreshorinvalidateimpala'smetadatacache)三種方式更新元數(shù)據(jù)緩存:invalidatemetadata將整個緩存標(biāo)記為過時,重新加載所有元數(shù)據(jù)緩存(危險)refresh<table>立即重新加載某個表的元數(shù)據(jù).僅為新數(shù)據(jù)文件重新加載HDFS塊位置invalidatemetadata<table>標(biāo)記某張表為過時重新加載該張表元數(shù)據(jù)storedasavro將數(shù)據(jù)以avro格式存儲(這里的storedas表示已a(bǔ)vro格式去讀取數(shù)據(jù)9tblproperties('avro.schema.literal'二”/'avro.schema.urT二'HDFS路徑的json文件,)指定數(shù)據(jù)格式/從hdfs中導(dǎo)入格式hive支持所有avro類型,impala不支持復(fù)雜的avro類型(enum,array,fixed,map,union,record等)storedasparquet創(chuàng)建一個以Parquet格式存儲的新表在impala中使用likeparquet從現(xiàn)有parquet數(shù)據(jù)文件中使用列元數(shù)據(jù)setcompression_codec=snappy使用hive和impala壓縮hive不支持在子查詢中創(chuàng)建外部表impala中可以altertableaccounts_parquetsettblpropertiesfEXTERNAL5=5TRUE')將表改為外部表這里的external最好用大寫,true也用大寫。數(shù)據(jù)格式:在hive和impala中storedasformat選擇文件存儲格式文本文件仃extFiles):是Hadoop中最基本的文件類型,可以從幾乎所有編程語言讀取或?qū)懭?,逗號或制表符分隔文件可以與許多應(yīng)用程序兼容,在調(diào)試時會很有用,但在規(guī)模上這種格式效率低下,將數(shù)值表示為字符串會浪費(fèi)存儲空間,難以表示二進(jìn)制數(shù)據(jù)(通常使用如Base64編碼技術(shù)),具有良好的互操作性,但性能不佳。序列文件(SequenceFiles):以二進(jìn)制容器格式存儲鍵值對(key.value),具有更小的冗余度,比文本文件更高效,能夠存儲圖像等二進(jìn)制數(shù)據(jù),格式是java特定的,并且與Hadoop緊密耦合,良好的表現(xiàn)但互操作性差。Avro文件:優(yōu)化了二進(jìn)制編碼,存儲有效,廣泛支持Hadoop生態(tài)集群(當(dāng)然也可以在Hadoop之外使用),是理想的長期存儲重要數(shù)據(jù)的格式,可以從多種語言讀寫,將模式嵌入文件中,因此始終可讀,模式演進(jìn)可以適應(yīng)變化,具有良好的互操作性和性能!(Hadoop中通用存儲的最佳選擇)avro支持柱狀格式(以列column為基準(zhǔn))在選擇表的列的一小部分時非常有效。Parquet文件:是優(yōu)化的柱狀格式,減少存儲空間,提升性能(基于列的訪問模式的最佳選擇)Avro:數(shù)據(jù)序列化serialization:—種將內(nèi)存中的數(shù)據(jù)表示為一系列字節(jié)的方式。Avro是一個高效的數(shù)據(jù)序列化框架,提供兼容性而不犧牲性能(數(shù)據(jù)根據(jù)你定義的模式進(jìn)行序列化,以java,C,C++、C#、Python.PHP等語言讀寫數(shù)據(jù),使用高度優(yōu)化的二進(jìn)制編碼對數(shù)據(jù)進(jìn)行序列化,指定隨時間變化模式的規(guī)則),支持遠(yuǎn)程過程調(diào)用(RPC:RemoteProcedereCalls):可用于構(gòu)建定制網(wǎng)絡(luò)協(xié)議,F(xiàn)lume用于內(nèi)部通信Avro支持的簡單數(shù)據(jù)類型如:null、booleansint、long、float、double、bytes、stringo支持的復(fù)雜數(shù)據(jù)類型:record(有一個或多個字段組成的用戶自定義類型)、enum、arrayxmap、unionsfixed(固定數(shù)量的8位無符號字節(jié))。Avro基本格式:{unamespacen:ncom.Ioudacre.data",“type”:”record”,“name”:”employee”,“fields”:]{“name”:”id”,”type”:[“nu『,”int”}{“name”:”name”,”type”:”string”,”default”:”:T}{“name”:”title”,”type”:”string”,”default”:”EN”}{“name”:”bonus”,”type”:”int”}]}Avro支持在模式中設(shè)置默認(rèn)值,當(dāng)沒有字段顯式設(shè)置值使用,當(dāng)序列化數(shù)據(jù)時avro會檢查空值,只有在模式中明確指定可以為空時才允許空值。所有的類型都支持doc屬性(類似于注釋,在實際中不顯示)Avro容器格式:avro定義了用于存儲Avro記錄的容器文件格式,也稱為avro數(shù)據(jù)文件格式,類似于HadoopSequenceFile格式,跨語言支持讀寫數(shù)據(jù),支持壓縮塊(組)的記錄使用AvroTools檢查Avro數(shù)據(jù)文件:avro-toolstojsonmydatafile.avro將Avro文件格式轉(zhuǎn)換為json文件avro-toolsgetschemamydatafile.avro用于獲取Avro文件的構(gòu)架模式進(jìn)化:你的數(shù)據(jù)結(jié)構(gòu)可能將隨著時間的推移而改變(添加、刪除、更改或重命名字段),更改可能會破壞許多格式的兼容性,在SequenceFile中序列化的對象將變得不可讀,寫入avro數(shù)據(jù)文件的數(shù)據(jù)總是可讀的(用于寫的數(shù)據(jù)模式嵌入文件本身,但是讀取數(shù)據(jù)的應(yīng)用程序可能會期待新的結(jié)構(gòu)),所以Avro有一個獨特的方式來保持向前的兼容性。模式演變:如果字段隨著時間推移在不斷重命名、刪除、添加等操作,我們將更改模式,使用新的模式來寫入新的數(shù)據(jù),但新的應(yīng)用程序無法讀取舊的數(shù)據(jù),如重命名字段后在這里將舊的字段映射到新的字段中利用”aliases”:[“舊的字段名”],來使得向前兼容,新添加的字段將缺少以前寫入的記錄值因此使用”default”:”默認(rèn)值”,來使得能讀取舊的數(shù)據(jù)。模式演變中出現(xiàn)更改的兼容性變化包括:添加、更改或刪除doc屬性,更改字段默認(rèn)值,添加一個帶默認(rèn)值的新字段,刪除指定默認(rèn)值的字段,將數(shù)據(jù)類型推廣到更廣泛,為字段添加別名等操作不會影響到兼容性。會影響到兼容性的操作:更改記錄的name或namespace空間屬性,添加一個沒有默認(rèn)值的字段,從enum中刪除符號,從union中刪除類型,將字段的類型修改為可能階段的數(shù)據(jù)類型等等。使用Parquettools檢查parquet文件格式:parquet-toolshead查看parquet格式頭字段parquet-toolsschema查看parquet文件模式類型另一個影響性能的情況是:數(shù)據(jù)壓縮總的來說BZip2節(jié)省了最多空間,但LZ4和Snappy要快得多impala支持Snappy但不支持LZ4選擇數(shù)據(jù)集格式需要考慮的幾個方面:攝取模式,工具兼容性,預(yù)期壽命,存儲和性能要求。數(shù)據(jù)文件分區(qū):默認(rèn)情況下,數(shù)據(jù)集里的所有文件都存儲在單個HDFS目錄中.這樣在分析或處理過程中會讀取目錄中的所有文件,全表掃描。分區(qū)細(xì)分?jǐn)?shù)據(jù),只能對數(shù)據(jù)的相關(guān)子集進(jìn)行分析,潛力要快得多。分區(qū)涉及兩個階段,存儲/檢索Sqoop內(nèi)支持分區(qū),在一ive-import選項時,使用一hive-partition-key和—hive?partition?value在hive和impala中分區(qū):在創(chuàng)建表模式時使用關(guān)鍵字partitionedby(statestring),用于分區(qū)的字段不定義在表內(nèi),只用定義在partitionedby中,同時還可以創(chuàng)建嵌套分區(qū),用逗號隔開使用Flume捕獲數(shù)據(jù):Flume時用于數(shù)據(jù)收集的高性能系統(tǒng),能實時采集數(shù)據(jù)支持從多個源將數(shù)據(jù)聚合到HDFS中,具有水平可伸縮性、擴(kuò)展性、可靠性等優(yōu)點??煽啃裕╮eliability):通信信道提供了Flume的可靠性,內(nèi)存信道如果失去電源數(shù)據(jù)將丟失?;诖疟P的信道隊列保證了面對電源損耗的數(shù)據(jù)耐久性??蓴U(kuò)展性(scalability):向系統(tǒng)添加更多資源,可以提高系統(tǒng)性能,F(xiàn)lume水平擴(kuò)展:隨著負(fù)載増加可以在配置中添加更多機(jī)器,可以將Source和sink添加到現(xiàn)有存儲層或數(shù)據(jù)平臺來擴(kuò)展Flume。如:GeneralSources包括來自任何Linux進(jìn)程的文件數(shù)據(jù)、syslog和標(biāo)準(zhǔn)輸出,GeneralSink包括本地文件系統(tǒng)或HDFS上的文件,開發(fā)者可以自己編寫Sources或sinks。Flume使用可配置的“代理”收集數(shù)據(jù):代理可以從許多來源(包括其他代理)接收數(shù)據(jù),大規(guī)模部署使用多層可擴(kuò)展和可靠性,支持檢查和修改“飛行"中的數(shù)據(jù)基礎(chǔ)架構(gòu):事件(event)是Flume中數(shù)據(jù)的基本單位,由體和標(biāo)題(元數(shù)據(jù))的集合組成。標(biāo)題由名稱值對組成,主要用于指導(dǎo)輸出組件:Source(源):用于從外部角色接收事件并且生成Flume事件Sink(池/槽):用于發(fā)送一個事件到他的目的地Channel(通道):用于從源緩沖事件直到它被sink排出Agent(代理):用于配置和托管Source、channel和sink的java進(jìn)程Flume數(shù)據(jù)流:Senassysk>g
messagesyslogServerFlumeAgentSenassysk>g
messagesyslogServerFlumeAgentFlumeSources:內(nèi)置的源模式有:syslog(通過網(wǎng)絡(luò)從UNIXsyslog守護(hù)程序捕獲消息)、netcat(捕獲任意TCP端口上寫入socket的所有數(shù)據(jù))、exec(執(zhí)行UNIX程序并從標(biāo)準(zhǔn)輸出中讀取事件)、spooldir(從指定(本地)目錄中顯示的文件提取事件)、HTTPsource(從http請求接收事件)、kafka(接收來自kafka的消息)等。FlumeSinks:sink的模式有:Null(丟棄所有事件,等效于/dev/null)、Logger(使用SLF4J將事件記錄為INFO級別)、IRC(將事件發(fā)送到指定的Internet中繼聊天信道)、HDFS(將事件寫入HDFS中指定的目錄文件)、Kafka(將消息發(fā)給Kafka)、HBaseSink(在HBase中存儲事件)等。
FlumeChannels:channel—般有:Memory(將事件存在機(jī)器的RAM中、速度快、但不可靠)、File(在本地磁盤上存儲事件、比RAM慢但更可靠)、JDBC(使用JDBC存儲數(shù)據(jù)庫表中的事件,比文件信道慢)、Kafka(使用Kafka作為任何源和sink類型之間的可擴(kuò)展、可靠卻高度可用的信道)FlumeAgent配置:配置文件使用分成引用、每個組件都分配一個用戶自定義的ID,然后在該ID上附加屬性名稱:如圖agent1?sources=srclagentl?sinks=sinklagentl?channels=chiagentl?channels.chi?type=memoryConnectssour-andchannelagentl.sources?srclConnectssour-andchannelagentl?sources?srcl?spooLDir=/var/flume/incominiagentl?sources?srcl?channels=chi< agensinks.sink].type=hdfsagentl?sinks?sinkl?hdfs?path=/loudacre/logdataagentl?sinks.sinkl?ohannol=chi 屬性因組件類型(源、通道、接收器)而異,屬性也因子類型而異(如netcat源于syslog源)。此外有關(guān)sink的配置,在路徑上可能包含基于事件頭的模式、如時間戳:默認(rèn)情況下,HDFS接收器寫入未壓縮的SequenceFile,使用codeC指定編碼器將啟用壓縮:agentl.sinks.sinkl?type=hdfsagentl.sinks.sinkl.hdfs.path=/loudacre/logdaagentl?sinks?sinkl?hdfs?codeC=snappyagentl?sinks?sinkl?channel=chi將fileType參數(shù)設(shè)置為DataStream寫入原始數(shù)據(jù),使用fileSuffix還可以指定文件拓展名agentl?sinks.sinkl..type=hdfsagentl?sinks?sinkl?hdfs?path=/loudacre/logdata/%y
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 英文版購銷合同反駁
- 全力確保合同的能力保證
- 影視作品授權(quán)放映合同
- 個人借款合同范本簡單明了
- 農(nóng)產(chǎn)品購銷稻谷合同
- 攝影作品授權(quán)合同
- 消防設(shè)備安裝勞務(wù)分包合同
- 環(huán)境監(jiān)測與咨詢服務(wù)合同
- 旅游班車服務(wù)合同
- 集裝箱購買合同范例
- 廣西南寧市2022-2023學(xué)年四年級數(shù)學(xué)第一學(xué)期期末學(xué)業(yè)質(zhì)量監(jiān)測模擬試題含解析
- 米諾環(huán)素治療痤瘡進(jìn)展課件
- 管理英語4寫作
- 國家電網(wǎng)招聘(計算機(jī)類)專業(yè)知識筆試歷年考試真題匯總(附答案)
- 義務(wù)教育物理課程標(biāo)準(zhǔn)(2022年版)測試卷(含答案)
- 電子商務(wù)概論題庫(250道)
- 父愛深深 閱讀附答案
- 2023-2024學(xué)年安徽省宣城市小學(xué)數(shù)學(xué)五年級上冊期末自測模擬試題
- 燃?xì)忮仩t安全檢查表分析(SCL)+評價記錄
- 小學(xué)四年級除數(shù)是兩位數(shù)的除法練習(xí)題
- 消防控制室值班記錄1
評論
0/150
提交評論