亚洲国产精品无码久久大片,亚洲AV无码乱码麻豆精品国产,亚洲品质自拍网站,少妇伦子伦精品无码STYLES,国产精久久久久久久

hive

hive

五分鐘學(xué)前端技術(shù):一篇文章教你看懂大數據技術(shù)棧!

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 491 次瀏覽 ? 2020-04-02 11:04 ? 來(lái)自相關(guān)話(huà)題

  
  近幾年,市場(chǎng)上出現了好多和大數據相關(guān)的崗位,不管是數據剖析、數據挖掘,或者是數據研制,都是圍繞著(zhù)大數據來(lái)做事情,那么,到底哪些是大數據,就是我們每一個(gè)要學(xué)習大數據技術(shù)的同學(xué)要了解的事情了,根據百度百科的介紹
  大數據(big data),IT行業(yè)術(shù)語(yǔ),是指未能在一定時(shí)間范圍內用常規軟件工具進(jìn)行捕捉、管理和處理的數據集合,是須要新處理模式能夠具有更強的決策力、洞察發(fā)覺(jué)力和流程優(yōu)化能力的海量、高增長(cháng)率和多元化的信息資產(chǎn)。
  在維克托·邁爾-舍恩伯格及肯尼斯·庫克耶編撰的《大數據時(shí)代》 [1] 中大數據指不用隨機分析法(抽樣調查)這樣捷徑,而采用所有數據進(jìn)行剖析處理。大數據的5V特征(IBM提出):Volume(大量)、Velocity(高速)、Variety(多樣)、Value(低價(jià)值密度)、Veracity(真實(shí)性)。 [2]思維導圖
  大數據方面核心技術(shù)有什么?
  大數據的概念比較具象,而大數據技術(shù)棧的龐大程度將使你嘆為觀(guān)止。
  大數據技術(shù)的體系龐大且復雜,基礎的技術(shù)包含數據的采集、數據預處理、分布式存儲、NoSQL數據庫、數據庫房、機器學(xué)習、并行估算、可視化等各類(lèi)技術(shù)范疇和不同的技術(shù)層面。首先給出一個(gè)通用化的大數據處理框架,主要分為下邊幾個(gè)方面:數據采集與預處理、數據儲存、數據清洗、數據查詢(xún)剖析和數據可視化。
  
  一、數據采集與預處理
  對于各類(lèi)來(lái)源的數據,包括聯(lián)通互聯(lián)網(wǎng)數據、社交網(wǎng)絡(luò )的數據等,這些結構化和非結構化的海量數據是零散的,也就是所謂的數據孤島,此時(shí)的那些數據并沒(méi)有哪些意義,數據采集就是將這種數據寫(xiě)入數據庫房中,把零散的數據整合在一起,對那些數據綜合上去進(jìn)行剖析。數據采集包括文件日志的采集、數據庫日志的采集、關(guān)系型數據庫的接入和應用程序的接入等。在數據量比較小的時(shí)侯,可以寫(xiě)個(gè)定時(shí)的腳本將日志寫(xiě)入儲存系統,但隨著(zhù)數據量的下降,這些方式難以提供數據安全保障,并且運維困難,需要更健壯的解決方案。
  Flume NG作為實(shí)時(shí)日志搜集系統,支持在日志系統中訂制各種數據發(fā)送方,用于搜集數據,同時(shí),對數據進(jìn)行簡(jiǎn)單處理,并講到各類(lèi)數據接收方(比如文本,HDFS,Hbase等)。Flume NG采用的是三層架構:Agent層,Collector層和Store層,每一層均可水平拓展。其中Agent包含Source,Channel和 Sink,source拿來(lái)消費(收集)數據源到channel組件中,channel作為中間臨時(shí)儲存,保存所有source的組件信息,sink從channel中讀取數據,讀取成功以后會(huì )刪掉channel中的信息。
  NDC,Netease Data Canal,直譯為網(wǎng)易數據運河系統,是網(wǎng)易針對結構化數據庫的數據實(shí)時(shí)遷移、同步和訂閱的平臺化解決方案。它整合了網(wǎng)易過(guò)去在數據傳輸領(lǐng)域的各類(lèi)工具和經(jīng)驗,將單機數據庫、分布式數據庫、OLAP系統以及下游應用通過(guò)數據鏈路串在一起。除了保障高效的數據傳輸外,NDC的設計遵守了單元化和平臺化的設計哲學(xué)。
  Logstash是開(kāi)源的服務(wù)器端數據處理管線(xiàn),能夠同時(shí)從多個(gè)來(lái)源采集數據、轉換數據,然后將數據發(fā)送到您最喜歡的 “存儲庫” 中。一般常用的儲存庫是Elasticsearch。Logstash 支持各類(lèi)輸入選擇,可以在同一時(shí)間從眾多常用的數據來(lái)源捕捉風(fēng)波,能夠以連續的流式傳輸方法,輕松地從您的日志、指標、Web 應用、數據儲存以及各類(lèi) AWS 服務(wù)采集數據。
  Sqoop,用來(lái)將關(guān)系型數據庫和Hadoop中的數據進(jìn)行互相轉移的工具,可以將一個(gè)關(guān)系型數據庫(例如Mysql、Oracle)中的數據導出到Hadoop(例如HDFS、Hive、Hbase)中,也可以將Hadoop(例如HDFS、Hive、Hbase)中的數據導出到關(guān)系型數據庫(例如Mysql、Oracle)中。Sqoop 啟用了一個(gè) MapReduce 作業(yè)(極其容錯的分布式并行估算)來(lái)執行任務(wù)。Sqoop 的另一大優(yōu)勢是其傳輸大量結構化或半結構化數據的過(guò)程是完全自動(dòng)化的。
  流式估算是行業(yè)研究的一個(gè)熱點(diǎn),流式估算對多個(gè)高吞吐量的數據源進(jìn)行實(shí)時(shí)的清洗、聚合和剖析,可以對存在于社交網(wǎng)站、新聞等的數據信息流進(jìn)行快速的處理并反饋,目前大數據流剖析工具有很多,比如開(kāi)源的strom,spark streaming等。
  Strom集群結構是有一個(gè)主節點(diǎn)(nimbus)和多個(gè)工作節點(diǎn)(supervisor)組成的主從結構,主節點(diǎn)通過(guò)配置靜態(tài)指定或則在運行時(shí)動(dòng)態(tài)補選,nimbus與supervisor都是Storm提供的后臺守護進(jìn)程,之間的通訊是結合Zookeeper的狀態(tài)變更通知和監控通知來(lái)處理。nimbus進(jìn)程的主要職責是管理、協(xié)調和監控集群上運行的topology(包括topology的發(fā)布、任務(wù)委派、事件處理時(shí)重新委派任務(wù)等)。supervisor進(jìn)程等待nimbus分配任務(wù)后生成并監控worker(jvm進(jìn)程)執行任務(wù)。supervisor與worker運行在不同的jvm上,如果由supervisor啟動(dòng)的某個(gè)worker由于錯誤異常退出(或被kill掉),supervisor會(huì )嘗試重新生成新的worker進(jìn)程。
  當使用上游模塊的數據進(jìn)行估算、統計、分析時(shí),就可以使用消息系統,尤其是分布式消息系統。Kafka使用Scala進(jìn)行編撰,是一種分布式的、基于發(fā)布/訂閱的消息系統。Kafka的設計理念之一就是同時(shí)提供離線(xiàn)處理和實(shí)時(shí)處理,以及將數據實(shí)時(shí)備份到另一個(gè)數據中心,Kafka可以有許多的生產(chǎn)者和消費者分享多個(gè)主題,將消息以topic為單位進(jìn)行歸納;Kafka發(fā)布消息的程序稱(chēng)為producer,也叫生產(chǎn)者,預訂topics并消費消息的程序稱(chēng)為consumer,也叫消費者;當Kafka以集群的形式運行時(shí),可以由一個(gè)服務(wù)或則多個(gè)服務(wù)組成,每個(gè)服務(wù)稱(chēng)作一個(gè)broker,運行過(guò)程中producer通過(guò)網(wǎng)路將消息發(fā)送到Kafka集群,集群向消費者提供消息。Kafka通過(guò)Zookeeper管理集群配置,選舉leader,以及在Consumer Group發(fā)生變化時(shí)進(jìn)行rebalance。Producer使用push模式將消息發(fā)布到broker,Consumer使用pull模式從broker訂閱并消費消息。Kafka可以和Flume一起工作,如果須要將流式數據從Kafka轉移到hadoop,可以使用Flume代理agent,將Kafka當作一個(gè)來(lái)源source,這樣可以從Kafka讀取數據到Hadoop。
  Zookeeper是一個(gè)分布式的,開(kāi)放源碼的分布式應用程序協(xié)調服務(wù),提供數據同步服務(wù)。它的作用主要有配置管理、名字服務(wù)、分布式鎖和集群管理。配置管理指的是在一個(gè)地方更改了配置,那么對這個(gè)地方的配置感興趣的所有的都可以獲得變更,省去了自動(dòng)拷貝配置的冗長(cháng),還挺好的保證了數據的可靠和一致性,同時(shí)它可以通過(guò)名子來(lái)獲取資源或則服務(wù)的地址等信息全網(wǎng)文章采集軟件,可以監控集群中機器的變化全網(wǎng)文章采集軟件,實(shí)現了類(lèi)似于脈搏機制的功能。
  二、數據儲存
  Hadoop作為一個(gè)開(kāi)源的框架,專(zhuān)為離線(xiàn)和大規模數據剖析而設計,HDFS作為其核心的儲存引擎,已被廣泛用于數據儲存。
  HBase,是一個(gè)分布式的、面向列的開(kāi)源數據庫,可以覺(jué)得是hdfs的封裝,本質(zhì)是數據儲存、NoSQL數據庫。HBase是一種Key/Value系統,部署在hdfs上,克服了hdfs在隨機讀寫(xiě)這個(gè)方面的缺點(diǎn),與hadoop一樣,Hbase目標主要借助縱向擴充,通過(guò)不斷降低廉價(jià)的商用服務(wù)器,來(lái)降低估算和儲存能力。
  Phoenix,相當于一個(gè)Java中間件,幫助開(kāi)發(fā)工程師才能象使用JDBC訪(fǎng)問(wèn)關(guān)系型數據庫一樣訪(fǎng)問(wèn)NoSQL數據庫HBase。
  Yarn是一種Hadoop資源管理器,可為下層應用提供統一的資源管理和調度,它的引入為集群在利用率、資源統一管理和數據共享等方面帶來(lái)了巨大益處。Yarn由下邊的幾大組件構成:一個(gè)全局的資源管理器ResourceManager、ResourceManager的每位節點(diǎn)代理NodeManager、表示每位應用的Application以及每一個(gè)ApplicationMaster擁有多個(gè)Container在NodeManager上運行。
  Mesos是一款開(kāi)源的集群管理軟件,支持Hadoop、ElasticSearch、Spark、Storm 和Kafka等應用構架。
  Redis是一種速率十分快的非關(guān)系數據庫,可以?xún)Υ骀I與5種不同類(lèi)型的值之間的映射,可以將儲存在顯存的通配符對數據持久化到硬碟中,使用復制特點(diǎn)來(lái)擴充性能,還可以使用客戶(hù)端分片來(lái)擴充寫(xiě)性能。
  Atlas是一個(gè)坐落應用程序與MySQL之間的中間件。在前端DB看來(lái),Atlas相當于聯(lián)接它的客戶(hù)端,在后端應用看來(lái),Atlas相當于一個(gè)DB。Atlas作為服務(wù)端與應用程序通信,它實(shí)現了MySQL的客戶(hù)端和服務(wù)端合同,同時(shí)作為客戶(hù)端與MySQL通信。它對應用程序屏蔽了DB的細節,同時(shí)為了增加MySQL負擔,它還維護了連接池。Atlas啟動(dòng)后會(huì )創(chuàng )建多個(gè)線(xiàn)程,其中一個(gè)為主線(xiàn)程,其余為工作線(xiàn)程。主線(xiàn)程負責竊聽(tīng)所有的客戶(hù)端聯(lián)接懇求,工作線(xiàn)程只竊聽(tīng)主線(xiàn)程的命令懇求。
  Kudu是圍繞Hadoop生態(tài)圈構建的儲存引擎,Kudu擁有和Hadoop生態(tài)圈共同的設計理念,它運行在普通的服務(wù)器上、可分布式規?;际?、并且滿(mǎn)足工業(yè)界的高可用要求。其設計理念為fast analytics on fast data。作為一個(gè)開(kāi)源的儲存引擎,可以同時(shí)提供低延后的隨機讀寫(xiě)和高效的數據剖析能力。Kudu不但提供了行級的插入、更新、刪除API,同時(shí)也提供了接近Parquet性能的批量掃描操作。使用同一份儲存,既可以進(jìn)行隨機讀寫(xiě),也可以滿(mǎn)足數據剖析的要求。Kudu的應用場(chǎng)景太廣泛,比如可以進(jìn)行實(shí)時(shí)的數據剖析,用于數據可能會(huì )存在變化的時(shí)序數據應用等。
  在數據儲存過(guò)程中,涉及到的數據表都是成千上百列,包含各類(lèi)復雜的Query,推薦使用列式儲存方式,比如parquent,ORC等對數據進(jìn)行壓縮。Parquet 可以支持靈活的壓縮選項,顯著(zhù)減低c盤(pán)上的儲存。
  三、數據清洗
  MapReduce作為Hadoop的查詢(xún)引擎,用于大規模數據集的并行估算,”Map(映射)”和”Reduce(歸約)”,是它的主要思想。它極大的便捷了編程人員在不會(huì )分布式并行編程的情況下,將自己的程序運行在分布式系統中。
  隨著(zhù)業(yè)務(wù)數據量的增多,需要進(jìn)行訓練和清洗的數據會(huì )顯得越來(lái)越復雜,這個(gè)時(shí)侯就須要任務(wù)調度系統,比如oozie或則azkaban,對關(guān)鍵任務(wù)進(jìn)行調度和監控。
  Oozie是用于Hadoop平臺的一種工作流調度引擎,提供了RESTful API接口來(lái)接受用戶(hù)的遞交懇求(提交工作流作業(yè)),當遞交了workflow后,由工作流引擎負責workflow的執行以及狀態(tài)的轉換。用戶(hù)在HDFS上布署好作業(yè)(MR作業(yè)),然后向Oozie遞交Workflow,Oozie以異步方法將作業(yè)(MR作業(yè))提交給Hadoop。這也是為何當調用Oozie 的RESTful插口遞交作業(yè)以后能立刻返回一個(gè)JobId的緣由,用戶(hù)程序毋須等待作業(yè)執行完成(因為有些大作業(yè)可能會(huì )執行許久(幾個(gè)小時(shí)甚至幾天))。Oozie在后臺以異步方法,再將workflow對應的Action遞交給hadoop執行。
  Azkaban也是一種工作流的控制引擎,可以拿來(lái)解決有多個(gè)hadoop或則spark等離線(xiàn)估算任務(wù)之間的依賴(lài)關(guān)系問(wèn)題。azkaban主要是由三部份構成:Relational Database,Azkaban Web Server和Azkaban Executor Server。azkaban將大多數的狀態(tài)信息都保存在MySQL中,Azkaban Web Server提供了Web UI,是azkaban主要的管理者,包括project的管理、認證、調度以及對工作流執行過(guò)程中的監控等;Azkaban Executor Server拿來(lái)調度工作流和任務(wù),記錄工作流或則任務(wù)的日志。
  流計算任務(wù)的處理平臺Sloth,是網(wǎng)易首個(gè)自研流計算平臺,旨在解決公司內各產(chǎn)品日漸下降的流計算需求。作為一個(gè)估算服務(wù)平臺,其特征是易用、實(shí)時(shí)、可靠,為用戶(hù)節約技術(shù)方面(開(kāi)發(fā)、運維)的投入,幫助用戶(hù)專(zhuān)注于解決產(chǎn)品本身的流計算需求。
  四、數據查詢(xún)剖析
  Hive的核心工作就是把SQL句子翻譯成MR程序,可以將結構化的數據映射為一張數據庫表,并提供 HQL(Hive SQL)查詢(xún)功能。Hive本身不儲存和估算數據,它完全依賴(lài)于HDFS和MapReduce??梢詫ive理解為一個(gè)客戶(hù)端工具,將SQL操作轉換為相應的MapReduce jobs,然后在hadoop里面運行。Hive支持標準的SQL句型,免去了用戶(hù)編撰MapReduce程序的過(guò)程,它的出現可以使這些精通SQL技能、但是不熟悉MapReduce 、編程能力較弱與不擅長(cháng)Java語(yǔ)言的用戶(hù)才能在HDFS大規模數據集上很方便地借助SQL 語(yǔ)言查詢(xún)、匯總、分析數據。
  Hive是為大數據批量處理而生的,Hive的出現解決了傳統的關(guān)系型數據庫(MySql、Oracle)在大數據處理上的困局 。Hive 將執行計劃分成map->shuffle->reduce->map->shuffle->reduce…的模型。如果一個(gè)Query會(huì )被編譯成多輪MapReduce,則會(huì )有更多的寫(xiě)中間結果。由于MapReduce執行框架本身的特性,過(guò)多的中間過(guò)程會(huì )降低整個(gè)Query的執行時(shí)間。在Hive的運行過(guò)程中,用戶(hù)只須要創(chuàng )建表,導入數據,編寫(xiě)SQL剖析句子即可。剩下的過(guò)程由Hive框架手動(dòng)的完成。
  Impala是對Hive的一個(gè)補充,可以實(shí)現高效的SQL查詢(xún)。使用Impala來(lái)實(shí)現SQL on Hadoop,用來(lái)進(jìn)行大數據實(shí)時(shí)查詢(xún)剖析。通過(guò)熟悉的傳統關(guān)系型數據庫的SQL風(fēng)格來(lái)操作大數據,同時(shí)數據也是可以?xún)Υ娴紿DFS和HBase中的。Impala沒(méi)有再使用平緩的Hive+MapReduce批處理,而是通過(guò)使用與商用并行關(guān)系數據庫中類(lèi)似的分布式查詢(xún)引擎(由Query Planner、Query Coordinator和Query Exec Engine三部份組成),可以直接從HDFS或HBase中用SELECT、JOIN和統計函數查詢(xún)數據,從而大大增加了延后。Impala將整個(gè)查詢(xún)分成一執行計劃樹(shù),而不是一連串的MapReduce任務(wù),相比Hive沒(méi)了MapReduce啟動(dòng)時(shí)間。
  Hive 適合于長(cháng)時(shí)間的批處理查詢(xún)剖析,而Impala適合于實(shí)時(shí)交互式SQL查詢(xún),Impala給數據人員提供了快速實(shí)驗,驗證看法的大數據剖析工具,可以先使用Hive進(jìn)行數據轉換處理,之后使用Impala在Hive處理好后的數據集上進(jìn)行快速的數據剖析??偟膩?lái)說(shuō):Impala把執行計劃表現為一棵完整的執行計劃樹(shù),可以更自然地分發(fā)執行計劃到各個(gè)Impalad執行查詢(xún),而不用象Hive那樣把它組合成管道型的map->reduce模式,以此保證Impala有更好的并發(fā)性和防止不必要的中間sort與shuffle。但是Impala不支持UDF,能處理的問(wèn)題有一定的限制。
  Spark擁有Hadoop MapReduce所具有的特征,它將Job中間輸出結果保存在顯存中,從而不需要讀取HDFS。Spark 啟用了顯存分布數據集,除了才能提供交互式查詢(xún)外,它還可以?xún)?yōu)化迭代工作負載。Spark 是在 Scala 語(yǔ)言中實(shí)現的,它將 Scala 用作其應用程序框架。與 Hadoop 不同,Spark 和 Scala 能夠緊密集成,其中的 Scala 可以象操作本地集合對象一樣輕松地操作分布式數據集。
  Nutch 是一個(gè)開(kāi)源Java 實(shí)現的搜索引擎。它提供了我們運行自己的搜索引擎所需的全部工具,包括全文搜索和Web爬蟲(chóng)。
  Solr用Java編撰、運行在Servlet容器(如Apache Tomcat或Jetty)的一個(gè)獨立的企業(yè)級搜索應用的全文搜索服務(wù)器。它對外提供類(lèi)似于Web-service的API接口,用戶(hù)可以通過(guò)http請求,向搜索引擎服務(wù)器遞交一定格式的XML文件,生成索引;也可以通過(guò)Http Get操作提出查找懇求,并得到XML格式的返回結果。
  Elasticsearch是一個(gè)開(kāi)源的全文搜索引擎,基于Lucene的搜索服務(wù)器,可以快速的存儲、搜索和剖析海量的數據。設計用于云估算中,能夠達到實(shí)時(shí)搜索,穩定,可靠,快速,安裝使用便捷。
  還涉及到一些機器學(xué)習語(yǔ)言,比如,Mahout主要目標是創(chuàng )建一些可伸縮的機器學(xué)習算法,供開(kāi)發(fā)人員在A(yíng)pache的許可下免費使用;深度學(xué)習框架Caffe以及使用數據流圖進(jìn)行數值估算的開(kāi)源軟件庫TensorFlow等,常用的機器學(xué)習算法例如,貝葉斯、邏輯回歸、決策樹(shù)、神經(jīng)網(wǎng)路、協(xié)同過(guò)濾等。
  五、數據可視化
  對接一些BI平臺,將剖析得到的數據進(jìn)行可視化,用于指導決策服務(wù)。主流的BI平臺例如,國外的敏捷BI Tableau、Qlikview、PowrerBI等,國內的SmallBI和新興的網(wǎng)易有數(可點(diǎn)擊這兒免費試用)等。
  在前面的每一個(gè)階段,保障數據的安全是不可忽略的問(wèn)題。
  基于網(wǎng)路身分認證的合同Kerberos,用來(lái)在非安全網(wǎng)路中,對個(gè)人通訊以安全的手段進(jìn)行身分認證,它容許某實(shí)體在非安全網(wǎng)路環(huán)境下通訊,向另一個(gè)實(shí)體以一種安全的方法證明自己的身分。
  控制權限的ranger是一個(gè)Hadoop集群權限框架,提供操作、監控、管理復雜的數據權限,它提供一個(gè)集中的管理機制,管理基于yarn的Hadoop生態(tài)圈的所有數據權限??梢詫adoop生態(tài)的組件如Hive,Hbase進(jìn)行細細度的數據訪(fǎng)問(wèn)控制。通過(guò)操作Ranger控制臺,管理員可以輕松的通過(guò)配置策略來(lái)控制用戶(hù)訪(fǎng)問(wèn)HDFS文件夾、HDFS文件、數據庫、表、字段權限。這些策略可以為不同的用戶(hù)和組來(lái)設置,同時(shí)權限可與hadoop無(wú)縫對接。
  大數據技術(shù)棧概貌
  博客
  Java技術(shù)庫房《Java程序員復習指南》
  整合全網(wǎng)優(yōu)質(zhì)Java學(xué)習內容,幫助你從基礎到進(jìn)階系統化備考Java
  面試指南
  全網(wǎng)最熱的Java筆試手冊,共200多頁(yè),非常實(shí)用,不管是用于備考還是打算筆試都是不錯的。 查看全部

  
  近幾年,市場(chǎng)上出現了好多和大數據相關(guān)的崗位,不管是數據剖析、數據挖掘,或者是數據研制,都是圍繞著(zhù)大數據來(lái)做事情,那么,到底哪些是大數據,就是我們每一個(gè)要學(xué)習大數據技術(shù)的同學(xué)要了解的事情了,根據百度百科的介紹
  大數據(big data),IT行業(yè)術(shù)語(yǔ),是指未能在一定時(shí)間范圍內用常規軟件工具進(jìn)行捕捉、管理和處理的數據集合,是須要新處理模式能夠具有更強的決策力、洞察發(fā)覺(jué)力和流程優(yōu)化能力的海量、高增長(cháng)率和多元化的信息資產(chǎn)。
  在維克托·邁爾-舍恩伯格及肯尼斯·庫克耶編撰的《大數據時(shí)代》 [1] 中大數據指不用隨機分析法(抽樣調查)這樣捷徑,而采用所有數據進(jìn)行剖析處理。大數據的5V特征(IBM提出):Volume(大量)、Velocity(高速)、Variety(多樣)、Value(低價(jià)值密度)、Veracity(真實(shí)性)。 [2]思維導圖
  大數據方面核心技術(shù)有什么?
  大數據的概念比較具象,而大數據技術(shù)棧的龐大程度將使你嘆為觀(guān)止。
  大數據技術(shù)的體系龐大且復雜,基礎的技術(shù)包含數據的采集、數據預處理、分布式存儲、NoSQL數據庫、數據庫房、機器學(xué)習、并行估算、可視化等各類(lèi)技術(shù)范疇和不同的技術(shù)層面。首先給出一個(gè)通用化的大數據處理框架,主要分為下邊幾個(gè)方面:數據采集與預處理、數據儲存、數據清洗、數據查詢(xún)剖析和數據可視化。
  
  一、數據采集與預處理
  對于各類(lèi)來(lái)源的數據,包括聯(lián)通互聯(lián)網(wǎng)數據、社交網(wǎng)絡(luò )的數據等,這些結構化和非結構化的海量數據是零散的,也就是所謂的數據孤島,此時(shí)的那些數據并沒(méi)有哪些意義,數據采集就是將這種數據寫(xiě)入數據庫房中,把零散的數據整合在一起,對那些數據綜合上去進(jìn)行剖析。數據采集包括文件日志的采集、數據庫日志的采集、關(guān)系型數據庫的接入和應用程序的接入等。在數據量比較小的時(shí)侯,可以寫(xiě)個(gè)定時(shí)的腳本將日志寫(xiě)入儲存系統,但隨著(zhù)數據量的下降,這些方式難以提供數據安全保障,并且運維困難,需要更健壯的解決方案。
  Flume NG作為實(shí)時(shí)日志搜集系統,支持在日志系統中訂制各種數據發(fā)送方,用于搜集數據,同時(shí),對數據進(jìn)行簡(jiǎn)單處理,并講到各類(lèi)數據接收方(比如文本,HDFS,Hbase等)。Flume NG采用的是三層架構:Agent層,Collector層和Store層,每一層均可水平拓展。其中Agent包含Source,Channel和 Sink,source拿來(lái)消費(收集)數據源到channel組件中,channel作為中間臨時(shí)儲存,保存所有source的組件信息,sink從channel中讀取數據,讀取成功以后會(huì )刪掉channel中的信息。
  NDC,Netease Data Canal,直譯為網(wǎng)易數據運河系統,是網(wǎng)易針對結構化數據庫的數據實(shí)時(shí)遷移、同步和訂閱的平臺化解決方案。它整合了網(wǎng)易過(guò)去在數據傳輸領(lǐng)域的各類(lèi)工具和經(jīng)驗,將單機數據庫、分布式數據庫、OLAP系統以及下游應用通過(guò)數據鏈路串在一起。除了保障高效的數據傳輸外,NDC的設計遵守了單元化和平臺化的設計哲學(xué)。
  Logstash是開(kāi)源的服務(wù)器端數據處理管線(xiàn),能夠同時(shí)從多個(gè)來(lái)源采集數據、轉換數據,然后將數據發(fā)送到您最喜歡的 “存儲庫” 中。一般常用的儲存庫是Elasticsearch。Logstash 支持各類(lèi)輸入選擇,可以在同一時(shí)間從眾多常用的數據來(lái)源捕捉風(fēng)波,能夠以連續的流式傳輸方法,輕松地從您的日志、指標、Web 應用、數據儲存以及各類(lèi) AWS 服務(wù)采集數據。
  Sqoop,用來(lái)將關(guān)系型數據庫和Hadoop中的數據進(jìn)行互相轉移的工具,可以將一個(gè)關(guān)系型數據庫(例如Mysql、Oracle)中的數據導出到Hadoop(例如HDFS、Hive、Hbase)中,也可以將Hadoop(例如HDFS、Hive、Hbase)中的數據導出到關(guān)系型數據庫(例如Mysql、Oracle)中。Sqoop 啟用了一個(gè) MapReduce 作業(yè)(極其容錯的分布式并行估算)來(lái)執行任務(wù)。Sqoop 的另一大優(yōu)勢是其傳輸大量結構化或半結構化數據的過(guò)程是完全自動(dòng)化的。
  流式估算是行業(yè)研究的一個(gè)熱點(diǎn),流式估算對多個(gè)高吞吐量的數據源進(jìn)行實(shí)時(shí)的清洗、聚合和剖析,可以對存在于社交網(wǎng)站、新聞等的數據信息流進(jìn)行快速的處理并反饋,目前大數據流剖析工具有很多,比如開(kāi)源的strom,spark streaming等。
  Strom集群結構是有一個(gè)主節點(diǎn)(nimbus)和多個(gè)工作節點(diǎn)(supervisor)組成的主從結構,主節點(diǎn)通過(guò)配置靜態(tài)指定或則在運行時(shí)動(dòng)態(tài)補選,nimbus與supervisor都是Storm提供的后臺守護進(jìn)程,之間的通訊是結合Zookeeper的狀態(tài)變更通知和監控通知來(lái)處理。nimbus進(jìn)程的主要職責是管理、協(xié)調和監控集群上運行的topology(包括topology的發(fā)布、任務(wù)委派、事件處理時(shí)重新委派任務(wù)等)。supervisor進(jìn)程等待nimbus分配任務(wù)后生成并監控worker(jvm進(jìn)程)執行任務(wù)。supervisor與worker運行在不同的jvm上,如果由supervisor啟動(dòng)的某個(gè)worker由于錯誤異常退出(或被kill掉),supervisor會(huì )嘗試重新生成新的worker進(jìn)程。
  當使用上游模塊的數據進(jìn)行估算、統計、分析時(shí),就可以使用消息系統,尤其是分布式消息系統。Kafka使用Scala進(jìn)行編撰,是一種分布式的、基于發(fā)布/訂閱的消息系統。Kafka的設計理念之一就是同時(shí)提供離線(xiàn)處理和實(shí)時(shí)處理,以及將數據實(shí)時(shí)備份到另一個(gè)數據中心,Kafka可以有許多的生產(chǎn)者和消費者分享多個(gè)主題,將消息以topic為單位進(jìn)行歸納;Kafka發(fā)布消息的程序稱(chēng)為producer,也叫生產(chǎn)者,預訂topics并消費消息的程序稱(chēng)為consumer,也叫消費者;當Kafka以集群的形式運行時(shí),可以由一個(gè)服務(wù)或則多個(gè)服務(wù)組成,每個(gè)服務(wù)稱(chēng)作一個(gè)broker,運行過(guò)程中producer通過(guò)網(wǎng)路將消息發(fā)送到Kafka集群,集群向消費者提供消息。Kafka通過(guò)Zookeeper管理集群配置,選舉leader,以及在Consumer Group發(fā)生變化時(shí)進(jìn)行rebalance。Producer使用push模式將消息發(fā)布到broker,Consumer使用pull模式從broker訂閱并消費消息。Kafka可以和Flume一起工作,如果須要將流式數據從Kafka轉移到hadoop,可以使用Flume代理agent,將Kafka當作一個(gè)來(lái)源source,這樣可以從Kafka讀取數據到Hadoop。
  Zookeeper是一個(gè)分布式的,開(kāi)放源碼的分布式應用程序協(xié)調服務(wù),提供數據同步服務(wù)。它的作用主要有配置管理、名字服務(wù)、分布式鎖和集群管理。配置管理指的是在一個(gè)地方更改了配置,那么對這個(gè)地方的配置感興趣的所有的都可以獲得變更,省去了自動(dòng)拷貝配置的冗長(cháng),還挺好的保證了數據的可靠和一致性,同時(shí)它可以通過(guò)名子來(lái)獲取資源或則服務(wù)的地址等信息全網(wǎng)文章采集軟件,可以監控集群中機器的變化全網(wǎng)文章采集軟件,實(shí)現了類(lèi)似于脈搏機制的功能。
  二、數據儲存
  Hadoop作為一個(gè)開(kāi)源的框架,專(zhuān)為離線(xiàn)和大規模數據剖析而設計,HDFS作為其核心的儲存引擎,已被廣泛用于數據儲存。
  HBase,是一個(gè)分布式的、面向列的開(kāi)源數據庫,可以覺(jué)得是hdfs的封裝,本質(zhì)是數據儲存、NoSQL數據庫。HBase是一種Key/Value系統,部署在hdfs上,克服了hdfs在隨機讀寫(xiě)這個(gè)方面的缺點(diǎn),與hadoop一樣,Hbase目標主要借助縱向擴充,通過(guò)不斷降低廉價(jià)的商用服務(wù)器,來(lái)降低估算和儲存能力。
  Phoenix,相當于一個(gè)Java中間件,幫助開(kāi)發(fā)工程師才能象使用JDBC訪(fǎng)問(wèn)關(guān)系型數據庫一樣訪(fǎng)問(wèn)NoSQL數據庫HBase。
  Yarn是一種Hadoop資源管理器,可為下層應用提供統一的資源管理和調度,它的引入為集群在利用率、資源統一管理和數據共享等方面帶來(lái)了巨大益處。Yarn由下邊的幾大組件構成:一個(gè)全局的資源管理器ResourceManager、ResourceManager的每位節點(diǎn)代理NodeManager、表示每位應用的Application以及每一個(gè)ApplicationMaster擁有多個(gè)Container在NodeManager上運行。
  Mesos是一款開(kāi)源的集群管理軟件,支持Hadoop、ElasticSearch、Spark、Storm 和Kafka等應用構架。
  Redis是一種速率十分快的非關(guān)系數據庫,可以?xún)Υ骀I與5種不同類(lèi)型的值之間的映射,可以將儲存在顯存的通配符對數據持久化到硬碟中,使用復制特點(diǎn)來(lái)擴充性能,還可以使用客戶(hù)端分片來(lái)擴充寫(xiě)性能。
  Atlas是一個(gè)坐落應用程序與MySQL之間的中間件。在前端DB看來(lái),Atlas相當于聯(lián)接它的客戶(hù)端,在后端應用看來(lái),Atlas相當于一個(gè)DB。Atlas作為服務(wù)端與應用程序通信,它實(shí)現了MySQL的客戶(hù)端和服務(wù)端合同,同時(shí)作為客戶(hù)端與MySQL通信。它對應用程序屏蔽了DB的細節,同時(shí)為了增加MySQL負擔,它還維護了連接池。Atlas啟動(dòng)后會(huì )創(chuàng )建多個(gè)線(xiàn)程,其中一個(gè)為主線(xiàn)程,其余為工作線(xiàn)程。主線(xiàn)程負責竊聽(tīng)所有的客戶(hù)端聯(lián)接懇求,工作線(xiàn)程只竊聽(tīng)主線(xiàn)程的命令懇求。
  Kudu是圍繞Hadoop生態(tài)圈構建的儲存引擎,Kudu擁有和Hadoop生態(tài)圈共同的設計理念,它運行在普通的服務(wù)器上、可分布式規?;际?、并且滿(mǎn)足工業(yè)界的高可用要求。其設計理念為fast analytics on fast data。作為一個(gè)開(kāi)源的儲存引擎,可以同時(shí)提供低延后的隨機讀寫(xiě)和高效的數據剖析能力。Kudu不但提供了行級的插入、更新、刪除API,同時(shí)也提供了接近Parquet性能的批量掃描操作。使用同一份儲存,既可以進(jìn)行隨機讀寫(xiě),也可以滿(mǎn)足數據剖析的要求。Kudu的應用場(chǎng)景太廣泛,比如可以進(jìn)行實(shí)時(shí)的數據剖析,用于數據可能會(huì )存在變化的時(shí)序數據應用等。
  在數據儲存過(guò)程中,涉及到的數據表都是成千上百列,包含各類(lèi)復雜的Query,推薦使用列式儲存方式,比如parquent,ORC等對數據進(jìn)行壓縮。Parquet 可以支持靈活的壓縮選項,顯著(zhù)減低c盤(pán)上的儲存。
  三、數據清洗
  MapReduce作為Hadoop的查詢(xún)引擎,用于大規模數據集的并行估算,”Map(映射)”和”Reduce(歸約)”,是它的主要思想。它極大的便捷了編程人員在不會(huì )分布式并行編程的情況下,將自己的程序運行在分布式系統中。
  隨著(zhù)業(yè)務(wù)數據量的增多,需要進(jìn)行訓練和清洗的數據會(huì )顯得越來(lái)越復雜,這個(gè)時(shí)侯就須要任務(wù)調度系統,比如oozie或則azkaban,對關(guān)鍵任務(wù)進(jìn)行調度和監控。
  Oozie是用于Hadoop平臺的一種工作流調度引擎,提供了RESTful API接口來(lái)接受用戶(hù)的遞交懇求(提交工作流作業(yè)),當遞交了workflow后,由工作流引擎負責workflow的執行以及狀態(tài)的轉換。用戶(hù)在HDFS上布署好作業(yè)(MR作業(yè)),然后向Oozie遞交Workflow,Oozie以異步方法將作業(yè)(MR作業(yè))提交給Hadoop。這也是為何當調用Oozie 的RESTful插口遞交作業(yè)以后能立刻返回一個(gè)JobId的緣由,用戶(hù)程序毋須等待作業(yè)執行完成(因為有些大作業(yè)可能會(huì )執行許久(幾個(gè)小時(shí)甚至幾天))。Oozie在后臺以異步方法,再將workflow對應的Action遞交給hadoop執行。
  Azkaban也是一種工作流的控制引擎,可以拿來(lái)解決有多個(gè)hadoop或則spark等離線(xiàn)估算任務(wù)之間的依賴(lài)關(guān)系問(wèn)題。azkaban主要是由三部份構成:Relational Database,Azkaban Web Server和Azkaban Executor Server。azkaban將大多數的狀態(tài)信息都保存在MySQL中,Azkaban Web Server提供了Web UI,是azkaban主要的管理者,包括project的管理、認證、調度以及對工作流執行過(guò)程中的監控等;Azkaban Executor Server拿來(lái)調度工作流和任務(wù),記錄工作流或則任務(wù)的日志。
  流計算任務(wù)的處理平臺Sloth,是網(wǎng)易首個(gè)自研流計算平臺,旨在解決公司內各產(chǎn)品日漸下降的流計算需求。作為一個(gè)估算服務(wù)平臺,其特征是易用、實(shí)時(shí)、可靠,為用戶(hù)節約技術(shù)方面(開(kāi)發(fā)、運維)的投入,幫助用戶(hù)專(zhuān)注于解決產(chǎn)品本身的流計算需求。
  四、數據查詢(xún)剖析
  Hive的核心工作就是把SQL句子翻譯成MR程序,可以將結構化的數據映射為一張數據庫表,并提供 HQL(Hive SQL)查詢(xún)功能。Hive本身不儲存和估算數據,它完全依賴(lài)于HDFS和MapReduce??梢詫ive理解為一個(gè)客戶(hù)端工具,將SQL操作轉換為相應的MapReduce jobs,然后在hadoop里面運行。Hive支持標準的SQL句型,免去了用戶(hù)編撰MapReduce程序的過(guò)程,它的出現可以使這些精通SQL技能、但是不熟悉MapReduce 、編程能力較弱與不擅長(cháng)Java語(yǔ)言的用戶(hù)才能在HDFS大規模數據集上很方便地借助SQL 語(yǔ)言查詢(xún)、匯總、分析數據。
  Hive是為大數據批量處理而生的,Hive的出現解決了傳統的關(guān)系型數據庫(MySql、Oracle)在大數據處理上的困局 。Hive 將執行計劃分成map->shuffle->reduce->map->shuffle->reduce…的模型。如果一個(gè)Query會(huì )被編譯成多輪MapReduce,則會(huì )有更多的寫(xiě)中間結果。由于MapReduce執行框架本身的特性,過(guò)多的中間過(guò)程會(huì )降低整個(gè)Query的執行時(shí)間。在Hive的運行過(guò)程中,用戶(hù)只須要創(chuàng )建表,導入數據,編寫(xiě)SQL剖析句子即可。剩下的過(guò)程由Hive框架手動(dòng)的完成。
  Impala是對Hive的一個(gè)補充,可以實(shí)現高效的SQL查詢(xún)。使用Impala來(lái)實(shí)現SQL on Hadoop,用來(lái)進(jìn)行大數據實(shí)時(shí)查詢(xún)剖析。通過(guò)熟悉的傳統關(guān)系型數據庫的SQL風(fēng)格來(lái)操作大數據,同時(shí)數據也是可以?xún)Υ娴紿DFS和HBase中的。Impala沒(méi)有再使用平緩的Hive+MapReduce批處理,而是通過(guò)使用與商用并行關(guān)系數據庫中類(lèi)似的分布式查詢(xún)引擎(由Query Planner、Query Coordinator和Query Exec Engine三部份組成),可以直接從HDFS或HBase中用SELECT、JOIN和統計函數查詢(xún)數據,從而大大增加了延后。Impala將整個(gè)查詢(xún)分成一執行計劃樹(shù),而不是一連串的MapReduce任務(wù),相比Hive沒(méi)了MapReduce啟動(dòng)時(shí)間。
  Hive 適合于長(cháng)時(shí)間的批處理查詢(xún)剖析,而Impala適合于實(shí)時(shí)交互式SQL查詢(xún),Impala給數據人員提供了快速實(shí)驗,驗證看法的大數據剖析工具,可以先使用Hive進(jìn)行數據轉換處理,之后使用Impala在Hive處理好后的數據集上進(jìn)行快速的數據剖析??偟膩?lái)說(shuō):Impala把執行計劃表現為一棵完整的執行計劃樹(shù),可以更自然地分發(fā)執行計劃到各個(gè)Impalad執行查詢(xún),而不用象Hive那樣把它組合成管道型的map->reduce模式,以此保證Impala有更好的并發(fā)性和防止不必要的中間sort與shuffle。但是Impala不支持UDF,能處理的問(wèn)題有一定的限制。
  Spark擁有Hadoop MapReduce所具有的特征,它將Job中間輸出結果保存在顯存中,從而不需要讀取HDFS。Spark 啟用了顯存分布數據集,除了才能提供交互式查詢(xún)外,它還可以?xún)?yōu)化迭代工作負載。Spark 是在 Scala 語(yǔ)言中實(shí)現的,它將 Scala 用作其應用程序框架。與 Hadoop 不同,Spark 和 Scala 能夠緊密集成,其中的 Scala 可以象操作本地集合對象一樣輕松地操作分布式數據集。
  Nutch 是一個(gè)開(kāi)源Java 實(shí)現的搜索引擎。它提供了我們運行自己的搜索引擎所需的全部工具,包括全文搜索和Web爬蟲(chóng)。
  Solr用Java編撰、運行在Servlet容器(如Apache Tomcat或Jetty)的一個(gè)獨立的企業(yè)級搜索應用的全文搜索服務(wù)器。它對外提供類(lèi)似于Web-service的API接口,用戶(hù)可以通過(guò)http請求,向搜索引擎服務(wù)器遞交一定格式的XML文件,生成索引;也可以通過(guò)Http Get操作提出查找懇求,并得到XML格式的返回結果。
  Elasticsearch是一個(gè)開(kāi)源的全文搜索引擎,基于Lucene的搜索服務(wù)器,可以快速的存儲、搜索和剖析海量的數據。設計用于云估算中,能夠達到實(shí)時(shí)搜索,穩定,可靠,快速,安裝使用便捷。
  還涉及到一些機器學(xué)習語(yǔ)言,比如,Mahout主要目標是創(chuàng )建一些可伸縮的機器學(xué)習算法,供開(kāi)發(fā)人員在A(yíng)pache的許可下免費使用;深度學(xué)習框架Caffe以及使用數據流圖進(jìn)行數值估算的開(kāi)源軟件庫TensorFlow等,常用的機器學(xué)習算法例如,貝葉斯、邏輯回歸、決策樹(shù)、神經(jīng)網(wǎng)路、協(xié)同過(guò)濾等。
  五、數據可視化
  對接一些BI平臺,將剖析得到的數據進(jìn)行可視化,用于指導決策服務(wù)。主流的BI平臺例如,國外的敏捷BI Tableau、Qlikview、PowrerBI等,國內的SmallBI和新興的網(wǎng)易有數(可點(diǎn)擊這兒免費試用)等。
  在前面的每一個(gè)階段,保障數據的安全是不可忽略的問(wèn)題。
  基于網(wǎng)路身分認證的合同Kerberos,用來(lái)在非安全網(wǎng)路中,對個(gè)人通訊以安全的手段進(jìn)行身分認證,它容許某實(shí)體在非安全網(wǎng)路環(huán)境下通訊,向另一個(gè)實(shí)體以一種安全的方法證明自己的身分。
  控制權限的ranger是一個(gè)Hadoop集群權限框架,提供操作、監控、管理復雜的數據權限,它提供一個(gè)集中的管理機制,管理基于yarn的Hadoop生態(tài)圈的所有數據權限??梢詫adoop生態(tài)的組件如Hive,Hbase進(jìn)行細細度的數據訪(fǎng)問(wèn)控制。通過(guò)操作Ranger控制臺,管理員可以輕松的通過(guò)配置策略來(lái)控制用戶(hù)訪(fǎng)問(wèn)HDFS文件夾、HDFS文件、數據庫、表、字段權限。這些策略可以為不同的用戶(hù)和組來(lái)設置,同時(shí)權限可與hadoop無(wú)縫對接。
  大數據技術(shù)棧概貌
  博客
  Java技術(shù)庫房《Java程序員復習指南》
  整合全網(wǎng)優(yōu)質(zhì)Java學(xué)習內容,幫助你從基礎到進(jìn)階系統化備考Java
  面試指南
  全網(wǎng)最熱的Java筆試手冊,共200多頁(yè),非常實(shí)用,不管是用于備考還是打算筆試都是不錯的。

五分鐘學(xué)前端技術(shù):一篇文章教你看懂大數據技術(shù)棧!

采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 491 次瀏覽 ? 2020-04-02 11:04 ? 來(lái)自相關(guān)話(huà)題

  
  近幾年,市場(chǎng)上出現了好多和大數據相關(guān)的崗位,不管是數據剖析、數據挖掘,或者是數據研制,都是圍繞著(zhù)大數據來(lái)做事情,那么,到底哪些是大數據,就是我們每一個(gè)要學(xué)習大數據技術(shù)的同學(xué)要了解的事情了,根據百度百科的介紹
  大數據(big data),IT行業(yè)術(shù)語(yǔ),是指未能在一定時(shí)間范圍內用常規軟件工具進(jìn)行捕捉、管理和處理的數據集合,是須要新處理模式能夠具有更強的決策力、洞察發(fā)覺(jué)力和流程優(yōu)化能力的海量、高增長(cháng)率和多元化的信息資產(chǎn)。
  在維克托·邁爾-舍恩伯格及肯尼斯·庫克耶編撰的《大數據時(shí)代》 [1] 中大數據指不用隨機分析法(抽樣調查)這樣捷徑,而采用所有數據進(jìn)行剖析處理。大數據的5V特征(IBM提出):Volume(大量)、Velocity(高速)、Variety(多樣)、Value(低價(jià)值密度)、Veracity(真實(shí)性)。 [2]思維導圖
  大數據方面核心技術(shù)有什么?
  大數據的概念比較具象,而大數據技術(shù)棧的龐大程度將使你嘆為觀(guān)止。
  大數據技術(shù)的體系龐大且復雜,基礎的技術(shù)包含數據的采集、數據預處理、分布式存儲、NoSQL數據庫、數據庫房、機器學(xué)習、并行估算、可視化等各類(lèi)技術(shù)范疇和不同的技術(shù)層面。首先給出一個(gè)通用化的大數據處理框架,主要分為下邊幾個(gè)方面:數據采集與預處理、數據儲存、數據清洗、數據查詢(xún)剖析和數據可視化。
  
  一、數據采集與預處理
  對于各類(lèi)來(lái)源的數據,包括聯(lián)通互聯(lián)網(wǎng)數據、社交網(wǎng)絡(luò )的數據等,這些結構化和非結構化的海量數據是零散的,也就是所謂的數據孤島,此時(shí)的那些數據并沒(méi)有哪些意義,數據采集就是將這種數據寫(xiě)入數據庫房中,把零散的數據整合在一起,對那些數據綜合上去進(jìn)行剖析。數據采集包括文件日志的采集、數據庫日志的采集、關(guān)系型數據庫的接入和應用程序的接入等。在數據量比較小的時(shí)侯,可以寫(xiě)個(gè)定時(shí)的腳本將日志寫(xiě)入儲存系統,但隨著(zhù)數據量的下降,這些方式難以提供數據安全保障,并且運維困難,需要更健壯的解決方案。
  Flume NG作為實(shí)時(shí)日志搜集系統,支持在日志系統中訂制各種數據發(fā)送方,用于搜集數據,同時(shí),對數據進(jìn)行簡(jiǎn)單處理,并講到各類(lèi)數據接收方(比如文本,HDFS,Hbase等)。Flume NG采用的是三層架構:Agent層,Collector層和Store層,每一層均可水平拓展。其中Agent包含Source,Channel和 Sink,source拿來(lái)消費(收集)數據源到channel組件中,channel作為中間臨時(shí)儲存,保存所有source的組件信息,sink從channel中讀取數據,讀取成功以后會(huì )刪掉channel中的信息。
  NDC,Netease Data Canal,直譯為網(wǎng)易數據運河系統,是網(wǎng)易針對結構化數據庫的數據實(shí)時(shí)遷移、同步和訂閱的平臺化解決方案。它整合了網(wǎng)易過(guò)去在數據傳輸領(lǐng)域的各類(lèi)工具和經(jīng)驗,將單機數據庫、分布式數據庫、OLAP系統以及下游應用通過(guò)數據鏈路串在一起。除了保障高效的數據傳輸外,NDC的設計遵守了單元化和平臺化的設計哲學(xué)。
  Logstash是開(kāi)源的服務(wù)器端數據處理管線(xiàn),能夠同時(shí)從多個(gè)來(lái)源采集數據、轉換數據,然后將數據發(fā)送到您最喜歡的 “存儲庫” 中。一般常用的儲存庫是Elasticsearch。Logstash 支持各類(lèi)輸入選擇,可以在同一時(shí)間從眾多常用的數據來(lái)源捕捉風(fēng)波,能夠以連續的流式傳輸方法,輕松地從您的日志、指標、Web 應用、數據儲存以及各類(lèi) AWS 服務(wù)采集數據。
  Sqoop,用來(lái)將關(guān)系型數據庫和Hadoop中的數據進(jìn)行互相轉移的工具,可以將一個(gè)關(guān)系型數據庫(例如Mysql、Oracle)中的數據導出到Hadoop(例如HDFS、Hive、Hbase)中,也可以將Hadoop(例如HDFS、Hive、Hbase)中的數據導出到關(guān)系型數據庫(例如Mysql、Oracle)中。Sqoop 啟用了一個(gè) MapReduce 作業(yè)(極其容錯的分布式并行估算)來(lái)執行任務(wù)。Sqoop 的另一大優(yōu)勢是其傳輸大量結構化或半結構化數據的過(guò)程是完全自動(dòng)化的。
  流式估算是行業(yè)研究的一個(gè)熱點(diǎn),流式估算對多個(gè)高吞吐量的數據源進(jìn)行實(shí)時(shí)的清洗、聚合和剖析,可以對存在于社交網(wǎng)站、新聞等的數據信息流進(jìn)行快速的處理并反饋,目前大數據流剖析工具有很多,比如開(kāi)源的strom,spark streaming等。
  Strom集群結構是有一個(gè)主節點(diǎn)(nimbus)和多個(gè)工作節點(diǎn)(supervisor)組成的主從結構,主節點(diǎn)通過(guò)配置靜態(tài)指定或則在運行時(shí)動(dòng)態(tài)補選,nimbus與supervisor都是Storm提供的后臺守護進(jìn)程,之間的通訊是結合Zookeeper的狀態(tài)變更通知和監控通知來(lái)處理。nimbus進(jìn)程的主要職責是管理、協(xié)調和監控集群上運行的topology(包括topology的發(fā)布、任務(wù)委派、事件處理時(shí)重新委派任務(wù)等)。supervisor進(jìn)程等待nimbus分配任務(wù)后生成并監控worker(jvm進(jìn)程)執行任務(wù)。supervisor與worker運行在不同的jvm上,如果由supervisor啟動(dòng)的某個(gè)worker由于錯誤異常退出(或被kill掉),supervisor會(huì )嘗試重新生成新的worker進(jìn)程。
  當使用上游模塊的數據進(jìn)行估算、統計、分析時(shí),就可以使用消息系統,尤其是分布式消息系統。Kafka使用Scala進(jìn)行編撰,是一種分布式的、基于發(fā)布/訂閱的消息系統。Kafka的設計理念之一就是同時(shí)提供離線(xiàn)處理和實(shí)時(shí)處理,以及將數據實(shí)時(shí)備份到另一個(gè)數據中心,Kafka可以有許多的生產(chǎn)者和消費者分享多個(gè)主題,將消息以topic為單位進(jìn)行歸納;Kafka發(fā)布消息的程序稱(chēng)為producer,也叫生產(chǎn)者,預訂topics并消費消息的程序稱(chēng)為consumer,也叫消費者;當Kafka以集群的形式運行時(shí),可以由一個(gè)服務(wù)或則多個(gè)服務(wù)組成,每個(gè)服務(wù)稱(chēng)作一個(gè)broker,運行過(guò)程中producer通過(guò)網(wǎng)路將消息發(fā)送到Kafka集群,集群向消費者提供消息。Kafka通過(guò)Zookeeper管理集群配置,選舉leader,以及在Consumer Group發(fā)生變化時(shí)進(jìn)行rebalance。Producer使用push模式將消息發(fā)布到broker,Consumer使用pull模式從broker訂閱并消費消息。Kafka可以和Flume一起工作,如果須要將流式數據從Kafka轉移到hadoop,可以使用Flume代理agent,將Kafka當作一個(gè)來(lái)源source,這樣可以從Kafka讀取數據到Hadoop。
  Zookeeper是一個(gè)分布式的,開(kāi)放源碼的分布式應用程序協(xié)調服務(wù),提供數據同步服務(wù)。它的作用主要有配置管理、名字服務(wù)、分布式鎖和集群管理。配置管理指的是在一個(gè)地方更改了配置,那么對這個(gè)地方的配置感興趣的所有的都可以獲得變更,省去了自動(dòng)拷貝配置的冗長(cháng),還挺好的保證了數據的可靠和一致性,同時(shí)它可以通過(guò)名子來(lái)獲取資源或則服務(wù)的地址等信息全網(wǎng)文章采集軟件,可以監控集群中機器的變化全網(wǎng)文章采集軟件,實(shí)現了類(lèi)似于脈搏機制的功能。
  二、數據儲存
  Hadoop作為一個(gè)開(kāi)源的框架,專(zhuān)為離線(xiàn)和大規模數據剖析而設計,HDFS作為其核心的儲存引擎,已被廣泛用于數據儲存。
  HBase,是一個(gè)分布式的、面向列的開(kāi)源數據庫,可以覺(jué)得是hdfs的封裝,本質(zhì)是數據儲存、NoSQL數據庫。HBase是一種Key/Value系統,部署在hdfs上,克服了hdfs在隨機讀寫(xiě)這個(gè)方面的缺點(diǎn),與hadoop一樣,Hbase目標主要借助縱向擴充,通過(guò)不斷降低廉價(jià)的商用服務(wù)器,來(lái)降低估算和儲存能力。
  Phoenix,相當于一個(gè)Java中間件,幫助開(kāi)發(fā)工程師才能象使用JDBC訪(fǎng)問(wèn)關(guān)系型數據庫一樣訪(fǎng)問(wèn)NoSQL數據庫HBase。
  Yarn是一種Hadoop資源管理器,可為下層應用提供統一的資源管理和調度,它的引入為集群在利用率、資源統一管理和數據共享等方面帶來(lái)了巨大益處。Yarn由下邊的幾大組件構成:一個(gè)全局的資源管理器ResourceManager、ResourceManager的每位節點(diǎn)代理NodeManager、表示每位應用的Application以及每一個(gè)ApplicationMaster擁有多個(gè)Container在NodeManager上運行。
  Mesos是一款開(kāi)源的集群管理軟件,支持Hadoop、ElasticSearch、Spark、Storm 和Kafka等應用構架。
  Redis是一種速率十分快的非關(guān)系數據庫,可以?xún)Υ骀I與5種不同類(lèi)型的值之間的映射,可以將儲存在顯存的通配符對數據持久化到硬碟中,使用復制特點(diǎn)來(lái)擴充性能,還可以使用客戶(hù)端分片來(lái)擴充寫(xiě)性能。
  Atlas是一個(gè)坐落應用程序與MySQL之間的中間件。在前端DB看來(lái),Atlas相當于聯(lián)接它的客戶(hù)端,在后端應用看來(lái),Atlas相當于一個(gè)DB。Atlas作為服務(wù)端與應用程序通信,它實(shí)現了MySQL的客戶(hù)端和服務(wù)端合同,同時(shí)作為客戶(hù)端與MySQL通信。它對應用程序屏蔽了DB的細節,同時(shí)為了增加MySQL負擔,它還維護了連接池。Atlas啟動(dòng)后會(huì )創(chuàng )建多個(gè)線(xiàn)程,其中一個(gè)為主線(xiàn)程,其余為工作線(xiàn)程。主線(xiàn)程負責竊聽(tīng)所有的客戶(hù)端聯(lián)接懇求,工作線(xiàn)程只竊聽(tīng)主線(xiàn)程的命令懇求。
  Kudu是圍繞Hadoop生態(tài)圈構建的儲存引擎,Kudu擁有和Hadoop生態(tài)圈共同的設計理念,它運行在普通的服務(wù)器上、可分布式規?;际?、并且滿(mǎn)足工業(yè)界的高可用要求。其設計理念為fast analytics on fast data。作為一個(gè)開(kāi)源的儲存引擎,可以同時(shí)提供低延后的隨機讀寫(xiě)和高效的數據剖析能力。Kudu不但提供了行級的插入、更新、刪除API,同時(shí)也提供了接近Parquet性能的批量掃描操作。使用同一份儲存,既可以進(jìn)行隨機讀寫(xiě),也可以滿(mǎn)足數據剖析的要求。Kudu的應用場(chǎng)景太廣泛,比如可以進(jìn)行實(shí)時(shí)的數據剖析,用于數據可能會(huì )存在變化的時(shí)序數據應用等。
  在數據儲存過(guò)程中,涉及到的數據表都是成千上百列,包含各類(lèi)復雜的Query,推薦使用列式儲存方式,比如parquent,ORC等對數據進(jìn)行壓縮。Parquet 可以支持靈活的壓縮選項,顯著(zhù)減低c盤(pán)上的儲存。
  三、數據清洗
  MapReduce作為Hadoop的查詢(xún)引擎,用于大規模數據集的并行估算,”Map(映射)”和”Reduce(歸約)”,是它的主要思想。它極大的便捷了編程人員在不會(huì )分布式并行編程的情況下,將自己的程序運行在分布式系統中。
  隨著(zhù)業(yè)務(wù)數據量的增多,需要進(jìn)行訓練和清洗的數據會(huì )顯得越來(lái)越復雜,這個(gè)時(shí)侯就須要任務(wù)調度系統,比如oozie或則azkaban,對關(guān)鍵任務(wù)進(jìn)行調度和監控。
  Oozie是用于Hadoop平臺的一種工作流調度引擎,提供了RESTful API接口來(lái)接受用戶(hù)的遞交懇求(提交工作流作業(yè)),當遞交了workflow后,由工作流引擎負責workflow的執行以及狀態(tài)的轉換。用戶(hù)在HDFS上布署好作業(yè)(MR作業(yè)),然后向Oozie遞交Workflow,Oozie以異步方法將作業(yè)(MR作業(yè))提交給Hadoop。這也是為何當調用Oozie 的RESTful插口遞交作業(yè)以后能立刻返回一個(gè)JobId的緣由,用戶(hù)程序毋須等待作業(yè)執行完成(因為有些大作業(yè)可能會(huì )執行許久(幾個(gè)小時(shí)甚至幾天))。Oozie在后臺以異步方法,再將workflow對應的Action遞交給hadoop執行。
  Azkaban也是一種工作流的控制引擎,可以拿來(lái)解決有多個(gè)hadoop或則spark等離線(xiàn)估算任務(wù)之間的依賴(lài)關(guān)系問(wèn)題。azkaban主要是由三部份構成:Relational Database,Azkaban Web Server和Azkaban Executor Server。azkaban將大多數的狀態(tài)信息都保存在MySQL中,Azkaban Web Server提供了Web UI,是azkaban主要的管理者,包括project的管理、認證、調度以及對工作流執行過(guò)程中的監控等;Azkaban Executor Server拿來(lái)調度工作流和任務(wù),記錄工作流或則任務(wù)的日志。
  流計算任務(wù)的處理平臺Sloth,是網(wǎng)易首個(gè)自研流計算平臺,旨在解決公司內各產(chǎn)品日漸下降的流計算需求。作為一個(gè)估算服務(wù)平臺,其特征是易用、實(shí)時(shí)、可靠,為用戶(hù)節約技術(shù)方面(開(kāi)發(fā)、運維)的投入,幫助用戶(hù)專(zhuān)注于解決產(chǎn)品本身的流計算需求。
  四、數據查詢(xún)剖析
  Hive的核心工作就是把SQL句子翻譯成MR程序,可以將結構化的數據映射為一張數據庫表,并提供 HQL(Hive SQL)查詢(xún)功能。Hive本身不儲存和估算數據,它完全依賴(lài)于HDFS和MapReduce??梢詫ive理解為一個(gè)客戶(hù)端工具,將SQL操作轉換為相應的MapReduce jobs,然后在hadoop里面運行。Hive支持標準的SQL句型,免去了用戶(hù)編撰MapReduce程序的過(guò)程,它的出現可以使這些精通SQL技能、但是不熟悉MapReduce 、編程能力較弱與不擅長(cháng)Java語(yǔ)言的用戶(hù)才能在HDFS大規模數據集上很方便地借助SQL 語(yǔ)言查詢(xún)、匯總、分析數據。
  Hive是為大數據批量處理而生的,Hive的出現解決了傳統的關(guān)系型數據庫(MySql、Oracle)在大數據處理上的困局 。Hive 將執行計劃分成map->shuffle->reduce->map->shuffle->reduce…的模型。如果一個(gè)Query會(huì )被編譯成多輪MapReduce,則會(huì )有更多的寫(xiě)中間結果。由于MapReduce執行框架本身的特性,過(guò)多的中間過(guò)程會(huì )降低整個(gè)Query的執行時(shí)間。在Hive的運行過(guò)程中,用戶(hù)只須要創(chuàng )建表,導入數據,編寫(xiě)SQL剖析句子即可。剩下的過(guò)程由Hive框架手動(dòng)的完成。
  Impala是對Hive的一個(gè)補充,可以實(shí)現高效的SQL查詢(xún)。使用Impala來(lái)實(shí)現SQL on Hadoop,用來(lái)進(jìn)行大數據實(shí)時(shí)查詢(xún)剖析。通過(guò)熟悉的傳統關(guān)系型數據庫的SQL風(fēng)格來(lái)操作大數據,同時(shí)數據也是可以?xún)Υ娴紿DFS和HBase中的。Impala沒(méi)有再使用平緩的Hive+MapReduce批處理,而是通過(guò)使用與商用并行關(guān)系數據庫中類(lèi)似的分布式查詢(xún)引擎(由Query Planner、Query Coordinator和Query Exec Engine三部份組成),可以直接從HDFS或HBase中用SELECT、JOIN和統計函數查詢(xún)數據,從而大大增加了延后。Impala將整個(gè)查詢(xún)分成一執行計劃樹(shù),而不是一連串的MapReduce任務(wù),相比Hive沒(méi)了MapReduce啟動(dòng)時(shí)間。
  Hive 適合于長(cháng)時(shí)間的批處理查詢(xún)剖析,而Impala適合于實(shí)時(shí)交互式SQL查詢(xún),Impala給數據人員提供了快速實(shí)驗,驗證看法的大數據剖析工具,可以先使用Hive進(jìn)行數據轉換處理,之后使用Impala在Hive處理好后的數據集上進(jìn)行快速的數據剖析??偟膩?lái)說(shuō):Impala把執行計劃表現為一棵完整的執行計劃樹(shù),可以更自然地分發(fā)執行計劃到各個(gè)Impalad執行查詢(xún),而不用象Hive那樣把它組合成管道型的map->reduce模式,以此保證Impala有更好的并發(fā)性和防止不必要的中間sort與shuffle。但是Impala不支持UDF,能處理的問(wèn)題有一定的限制。
  Spark擁有Hadoop MapReduce所具有的特征,它將Job中間輸出結果保存在顯存中,從而不需要讀取HDFS。Spark 啟用了顯存分布數據集,除了才能提供交互式查詢(xún)外,它還可以?xún)?yōu)化迭代工作負載。Spark 是在 Scala 語(yǔ)言中實(shí)現的,它將 Scala 用作其應用程序框架。與 Hadoop 不同,Spark 和 Scala 能夠緊密集成,其中的 Scala 可以象操作本地集合對象一樣輕松地操作分布式數據集。
  Nutch 是一個(gè)開(kāi)源Java 實(shí)現的搜索引擎。它提供了我們運行自己的搜索引擎所需的全部工具,包括全文搜索和Web爬蟲(chóng)。
  Solr用Java編撰、運行在Servlet容器(如Apache Tomcat或Jetty)的一個(gè)獨立的企業(yè)級搜索應用的全文搜索服務(wù)器。它對外提供類(lèi)似于Web-service的API接口,用戶(hù)可以通過(guò)http請求,向搜索引擎服務(wù)器遞交一定格式的XML文件,生成索引;也可以通過(guò)Http Get操作提出查找懇求,并得到XML格式的返回結果。
  Elasticsearch是一個(gè)開(kāi)源的全文搜索引擎,基于Lucene的搜索服務(wù)器,可以快速的存儲、搜索和剖析海量的數據。設計用于云估算中,能夠達到實(shí)時(shí)搜索,穩定,可靠,快速,安裝使用便捷。
  還涉及到一些機器學(xué)習語(yǔ)言,比如,Mahout主要目標是創(chuàng )建一些可伸縮的機器學(xué)習算法,供開(kāi)發(fā)人員在A(yíng)pache的許可下免費使用;深度學(xué)習框架Caffe以及使用數據流圖進(jìn)行數值估算的開(kāi)源軟件庫TensorFlow等,常用的機器學(xué)習算法例如,貝葉斯、邏輯回歸、決策樹(shù)、神經(jīng)網(wǎng)路、協(xié)同過(guò)濾等。
  五、數據可視化
  對接一些BI平臺,將剖析得到的數據進(jìn)行可視化,用于指導決策服務(wù)。主流的BI平臺例如,國外的敏捷BI Tableau、Qlikview、PowrerBI等,國內的SmallBI和新興的網(wǎng)易有數(可點(diǎn)擊這兒免費試用)等。
  在前面的每一個(gè)階段,保障數據的安全是不可忽略的問(wèn)題。
  基于網(wǎng)路身分認證的合同Kerberos,用來(lái)在非安全網(wǎng)路中,對個(gè)人通訊以安全的手段進(jìn)行身分認證,它容許某實(shí)體在非安全網(wǎng)路環(huán)境下通訊,向另一個(gè)實(shí)體以一種安全的方法證明自己的身分。
  控制權限的ranger是一個(gè)Hadoop集群權限框架,提供操作、監控、管理復雜的數據權限,它提供一個(gè)集中的管理機制,管理基于yarn的Hadoop生態(tài)圈的所有數據權限??梢詫adoop生態(tài)的組件如Hive,Hbase進(jìn)行細細度的數據訪(fǎng)問(wèn)控制。通過(guò)操作Ranger控制臺,管理員可以輕松的通過(guò)配置策略來(lái)控制用戶(hù)訪(fǎng)問(wèn)HDFS文件夾、HDFS文件、數據庫、表、字段權限。這些策略可以為不同的用戶(hù)和組來(lái)設置,同時(shí)權限可與hadoop無(wú)縫對接。
  大數據技術(shù)棧概貌
  博客
  Java技術(shù)庫房《Java程序員復習指南》
  整合全網(wǎng)優(yōu)質(zhì)Java學(xué)習內容,幫助你從基礎到進(jìn)階系統化備考Java
  面試指南
  全網(wǎng)最熱的Java筆試手冊,共200多頁(yè),非常實(shí)用,不管是用于備考還是打算筆試都是不錯的。 查看全部

  
  近幾年,市場(chǎng)上出現了好多和大數據相關(guān)的崗位,不管是數據剖析、數據挖掘,或者是數據研制,都是圍繞著(zhù)大數據來(lái)做事情,那么,到底哪些是大數據,就是我們每一個(gè)要學(xué)習大數據技術(shù)的同學(xué)要了解的事情了,根據百度百科的介紹
  大數據(big data),IT行業(yè)術(shù)語(yǔ),是指未能在一定時(shí)間范圍內用常規軟件工具進(jìn)行捕捉、管理和處理的數據集合,是須要新處理模式能夠具有更強的決策力、洞察發(fā)覺(jué)力和流程優(yōu)化能力的海量、高增長(cháng)率和多元化的信息資產(chǎn)。
  在維克托·邁爾-舍恩伯格及肯尼斯·庫克耶編撰的《大數據時(shí)代》 [1] 中大數據指不用隨機分析法(抽樣調查)這樣捷徑,而采用所有數據進(jìn)行剖析處理。大數據的5V特征(IBM提出):Volume(大量)、Velocity(高速)、Variety(多樣)、Value(低價(jià)值密度)、Veracity(真實(shí)性)。 [2]思維導圖
  大數據方面核心技術(shù)有什么?
  大數據的概念比較具象,而大數據技術(shù)棧的龐大程度將使你嘆為觀(guān)止。
  大數據技術(shù)的體系龐大且復雜,基礎的技術(shù)包含數據的采集、數據預處理、分布式存儲、NoSQL數據庫、數據庫房、機器學(xué)習、并行估算、可視化等各類(lèi)技術(shù)范疇和不同的技術(shù)層面。首先給出一個(gè)通用化的大數據處理框架,主要分為下邊幾個(gè)方面:數據采集與預處理、數據儲存、數據清洗、數據查詢(xún)剖析和數據可視化。
  
  一、數據采集與預處理
  對于各類(lèi)來(lái)源的數據,包括聯(lián)通互聯(lián)網(wǎng)數據、社交網(wǎng)絡(luò )的數據等,這些結構化和非結構化的海量數據是零散的,也就是所謂的數據孤島,此時(shí)的那些數據并沒(méi)有哪些意義,數據采集就是將這種數據寫(xiě)入數據庫房中,把零散的數據整合在一起,對那些數據綜合上去進(jìn)行剖析。數據采集包括文件日志的采集、數據庫日志的采集、關(guān)系型數據庫的接入和應用程序的接入等。在數據量比較小的時(shí)侯,可以寫(xiě)個(gè)定時(shí)的腳本將日志寫(xiě)入儲存系統,但隨著(zhù)數據量的下降,這些方式難以提供數據安全保障,并且運維困難,需要更健壯的解決方案。
  Flume NG作為實(shí)時(shí)日志搜集系統,支持在日志系統中訂制各種數據發(fā)送方,用于搜集數據,同時(shí),對數據進(jìn)行簡(jiǎn)單處理,并講到各類(lèi)數據接收方(比如文本,HDFS,Hbase等)。Flume NG采用的是三層架構:Agent層,Collector層和Store層,每一層均可水平拓展。其中Agent包含Source,Channel和 Sink,source拿來(lái)消費(收集)數據源到channel組件中,channel作為中間臨時(shí)儲存,保存所有source的組件信息,sink從channel中讀取數據,讀取成功以后會(huì )刪掉channel中的信息。
  NDC,Netease Data Canal,直譯為網(wǎng)易數據運河系統,是網(wǎng)易針對結構化數據庫的數據實(shí)時(shí)遷移、同步和訂閱的平臺化解決方案。它整合了網(wǎng)易過(guò)去在數據傳輸領(lǐng)域的各類(lèi)工具和經(jīng)驗,將單機數據庫、分布式數據庫、OLAP系統以及下游應用通過(guò)數據鏈路串在一起。除了保障高效的數據傳輸外,NDC的設計遵守了單元化和平臺化的設計哲學(xué)。
  Logstash是開(kāi)源的服務(wù)器端數據處理管線(xiàn),能夠同時(shí)從多個(gè)來(lái)源采集數據、轉換數據,然后將數據發(fā)送到您最喜歡的 “存儲庫” 中。一般常用的儲存庫是Elasticsearch。Logstash 支持各類(lèi)輸入選擇,可以在同一時(shí)間從眾多常用的數據來(lái)源捕捉風(fēng)波,能夠以連續的流式傳輸方法,輕松地從您的日志、指標、Web 應用、數據儲存以及各類(lèi) AWS 服務(wù)采集數據。
  Sqoop,用來(lái)將關(guān)系型數據庫和Hadoop中的數據進(jìn)行互相轉移的工具,可以將一個(gè)關(guān)系型數據庫(例如Mysql、Oracle)中的數據導出到Hadoop(例如HDFS、Hive、Hbase)中,也可以將Hadoop(例如HDFS、Hive、Hbase)中的數據導出到關(guān)系型數據庫(例如Mysql、Oracle)中。Sqoop 啟用了一個(gè) MapReduce 作業(yè)(極其容錯的分布式并行估算)來(lái)執行任務(wù)。Sqoop 的另一大優(yōu)勢是其傳輸大量結構化或半結構化數據的過(guò)程是完全自動(dòng)化的。
  流式估算是行業(yè)研究的一個(gè)熱點(diǎn),流式估算對多個(gè)高吞吐量的數據源進(jìn)行實(shí)時(shí)的清洗、聚合和剖析,可以對存在于社交網(wǎng)站、新聞等的數據信息流進(jìn)行快速的處理并反饋,目前大數據流剖析工具有很多,比如開(kāi)源的strom,spark streaming等。
  Strom集群結構是有一個(gè)主節點(diǎn)(nimbus)和多個(gè)工作節點(diǎn)(supervisor)組成的主從結構,主節點(diǎn)通過(guò)配置靜態(tài)指定或則在運行時(shí)動(dòng)態(tài)補選,nimbus與supervisor都是Storm提供的后臺守護進(jìn)程,之間的通訊是結合Zookeeper的狀態(tài)變更通知和監控通知來(lái)處理。nimbus進(jìn)程的主要職責是管理、協(xié)調和監控集群上運行的topology(包括topology的發(fā)布、任務(wù)委派、事件處理時(shí)重新委派任務(wù)等)。supervisor進(jìn)程等待nimbus分配任務(wù)后生成并監控worker(jvm進(jìn)程)執行任務(wù)。supervisor與worker運行在不同的jvm上,如果由supervisor啟動(dòng)的某個(gè)worker由于錯誤異常退出(或被kill掉),supervisor會(huì )嘗試重新生成新的worker進(jìn)程。
  當使用上游模塊的數據進(jìn)行估算、統計、分析時(shí),就可以使用消息系統,尤其是分布式消息系統。Kafka使用Scala進(jìn)行編撰,是一種分布式的、基于發(fā)布/訂閱的消息系統。Kafka的設計理念之一就是同時(shí)提供離線(xiàn)處理和實(shí)時(shí)處理,以及將數據實(shí)時(shí)備份到另一個(gè)數據中心,Kafka可以有許多的生產(chǎn)者和消費者分享多個(gè)主題,將消息以topic為單位進(jìn)行歸納;Kafka發(fā)布消息的程序稱(chēng)為producer,也叫生產(chǎn)者,預訂topics并消費消息的程序稱(chēng)為consumer,也叫消費者;當Kafka以集群的形式運行時(shí),可以由一個(gè)服務(wù)或則多個(gè)服務(wù)組成,每個(gè)服務(wù)稱(chēng)作一個(gè)broker,運行過(guò)程中producer通過(guò)網(wǎng)路將消息發(fā)送到Kafka集群,集群向消費者提供消息。Kafka通過(guò)Zookeeper管理集群配置,選舉leader,以及在Consumer Group發(fā)生變化時(shí)進(jìn)行rebalance。Producer使用push模式將消息發(fā)布到broker,Consumer使用pull模式從broker訂閱并消費消息。Kafka可以和Flume一起工作,如果須要將流式數據從Kafka轉移到hadoop,可以使用Flume代理agent,將Kafka當作一個(gè)來(lái)源source,這樣可以從Kafka讀取數據到Hadoop。
  Zookeeper是一個(gè)分布式的,開(kāi)放源碼的分布式應用程序協(xié)調服務(wù),提供數據同步服務(wù)。它的作用主要有配置管理、名字服務(wù)、分布式鎖和集群管理。配置管理指的是在一個(gè)地方更改了配置,那么對這個(gè)地方的配置感興趣的所有的都可以獲得變更,省去了自動(dòng)拷貝配置的冗長(cháng),還挺好的保證了數據的可靠和一致性,同時(shí)它可以通過(guò)名子來(lái)獲取資源或則服務(wù)的地址等信息全網(wǎng)文章采集軟件,可以監控集群中機器的變化全網(wǎng)文章采集軟件,實(shí)現了類(lèi)似于脈搏機制的功能。
  二、數據儲存
  Hadoop作為一個(gè)開(kāi)源的框架,專(zhuān)為離線(xiàn)和大規模數據剖析而設計,HDFS作為其核心的儲存引擎,已被廣泛用于數據儲存。
  HBase,是一個(gè)分布式的、面向列的開(kāi)源數據庫,可以覺(jué)得是hdfs的封裝,本質(zhì)是數據儲存、NoSQL數據庫。HBase是一種Key/Value系統,部署在hdfs上,克服了hdfs在隨機讀寫(xiě)這個(gè)方面的缺點(diǎn),與hadoop一樣,Hbase目標主要借助縱向擴充,通過(guò)不斷降低廉價(jià)的商用服務(wù)器,來(lái)降低估算和儲存能力。
  Phoenix,相當于一個(gè)Java中間件,幫助開(kāi)發(fā)工程師才能象使用JDBC訪(fǎng)問(wèn)關(guān)系型數據庫一樣訪(fǎng)問(wèn)NoSQL數據庫HBase。
  Yarn是一種Hadoop資源管理器,可為下層應用提供統一的資源管理和調度,它的引入為集群在利用率、資源統一管理和數據共享等方面帶來(lái)了巨大益處。Yarn由下邊的幾大組件構成:一個(gè)全局的資源管理器ResourceManager、ResourceManager的每位節點(diǎn)代理NodeManager、表示每位應用的Application以及每一個(gè)ApplicationMaster擁有多個(gè)Container在NodeManager上運行。
  Mesos是一款開(kāi)源的集群管理軟件,支持Hadoop、ElasticSearch、Spark、Storm 和Kafka等應用構架。
  Redis是一種速率十分快的非關(guān)系數據庫,可以?xún)Υ骀I與5種不同類(lèi)型的值之間的映射,可以將儲存在顯存的通配符對數據持久化到硬碟中,使用復制特點(diǎn)來(lái)擴充性能,還可以使用客戶(hù)端分片來(lái)擴充寫(xiě)性能。
  Atlas是一個(gè)坐落應用程序與MySQL之間的中間件。在前端DB看來(lái),Atlas相當于聯(lián)接它的客戶(hù)端,在后端應用看來(lái),Atlas相當于一個(gè)DB。Atlas作為服務(wù)端與應用程序通信,它實(shí)現了MySQL的客戶(hù)端和服務(wù)端合同,同時(shí)作為客戶(hù)端與MySQL通信。它對應用程序屏蔽了DB的細節,同時(shí)為了增加MySQL負擔,它還維護了連接池。Atlas啟動(dòng)后會(huì )創(chuàng )建多個(gè)線(xiàn)程,其中一個(gè)為主線(xiàn)程,其余為工作線(xiàn)程。主線(xiàn)程負責竊聽(tīng)所有的客戶(hù)端聯(lián)接懇求,工作線(xiàn)程只竊聽(tīng)主線(xiàn)程的命令懇求。
  Kudu是圍繞Hadoop生態(tài)圈構建的儲存引擎,Kudu擁有和Hadoop生態(tài)圈共同的設計理念,它運行在普通的服務(wù)器上、可分布式規?;际?、并且滿(mǎn)足工業(yè)界的高可用要求。其設計理念為fast analytics on fast data。作為一個(gè)開(kāi)源的儲存引擎,可以同時(shí)提供低延后的隨機讀寫(xiě)和高效的數據剖析能力。Kudu不但提供了行級的插入、更新、刪除API,同時(shí)也提供了接近Parquet性能的批量掃描操作。使用同一份儲存,既可以進(jìn)行隨機讀寫(xiě),也可以滿(mǎn)足數據剖析的要求。Kudu的應用場(chǎng)景太廣泛,比如可以進(jìn)行實(shí)時(shí)的數據剖析,用于數據可能會(huì )存在變化的時(shí)序數據應用等。
  在數據儲存過(guò)程中,涉及到的數據表都是成千上百列,包含各類(lèi)復雜的Query,推薦使用列式儲存方式,比如parquent,ORC等對數據進(jìn)行壓縮。Parquet 可以支持靈活的壓縮選項,顯著(zhù)減低c盤(pán)上的儲存。
  三、數據清洗
  MapReduce作為Hadoop的查詢(xún)引擎,用于大規模數據集的并行估算,”Map(映射)”和”Reduce(歸約)”,是它的主要思想。它極大的便捷了編程人員在不會(huì )分布式并行編程的情況下,將自己的程序運行在分布式系統中。
  隨著(zhù)業(yè)務(wù)數據量的增多,需要進(jìn)行訓練和清洗的數據會(huì )顯得越來(lái)越復雜,這個(gè)時(shí)侯就須要任務(wù)調度系統,比如oozie或則azkaban,對關(guān)鍵任務(wù)進(jìn)行調度和監控。
  Oozie是用于Hadoop平臺的一種工作流調度引擎,提供了RESTful API接口來(lái)接受用戶(hù)的遞交懇求(提交工作流作業(yè)),當遞交了workflow后,由工作流引擎負責workflow的執行以及狀態(tài)的轉換。用戶(hù)在HDFS上布署好作業(yè)(MR作業(yè)),然后向Oozie遞交Workflow,Oozie以異步方法將作業(yè)(MR作業(yè))提交給Hadoop。這也是為何當調用Oozie 的RESTful插口遞交作業(yè)以后能立刻返回一個(gè)JobId的緣由,用戶(hù)程序毋須等待作業(yè)執行完成(因為有些大作業(yè)可能會(huì )執行許久(幾個(gè)小時(shí)甚至幾天))。Oozie在后臺以異步方法,再將workflow對應的Action遞交給hadoop執行。
  Azkaban也是一種工作流的控制引擎,可以拿來(lái)解決有多個(gè)hadoop或則spark等離線(xiàn)估算任務(wù)之間的依賴(lài)關(guān)系問(wèn)題。azkaban主要是由三部份構成:Relational Database,Azkaban Web Server和Azkaban Executor Server。azkaban將大多數的狀態(tài)信息都保存在MySQL中,Azkaban Web Server提供了Web UI,是azkaban主要的管理者,包括project的管理、認證、調度以及對工作流執行過(guò)程中的監控等;Azkaban Executor Server拿來(lái)調度工作流和任務(wù),記錄工作流或則任務(wù)的日志。
  流計算任務(wù)的處理平臺Sloth,是網(wǎng)易首個(gè)自研流計算平臺,旨在解決公司內各產(chǎn)品日漸下降的流計算需求。作為一個(gè)估算服務(wù)平臺,其特征是易用、實(shí)時(shí)、可靠,為用戶(hù)節約技術(shù)方面(開(kāi)發(fā)、運維)的投入,幫助用戶(hù)專(zhuān)注于解決產(chǎn)品本身的流計算需求。
  四、數據查詢(xún)剖析
  Hive的核心工作就是把SQL句子翻譯成MR程序,可以將結構化的數據映射為一張數據庫表,并提供 HQL(Hive SQL)查詢(xún)功能。Hive本身不儲存和估算數據,它完全依賴(lài)于HDFS和MapReduce??梢詫ive理解為一個(gè)客戶(hù)端工具,將SQL操作轉換為相應的MapReduce jobs,然后在hadoop里面運行。Hive支持標準的SQL句型,免去了用戶(hù)編撰MapReduce程序的過(guò)程,它的出現可以使這些精通SQL技能、但是不熟悉MapReduce 、編程能力較弱與不擅長(cháng)Java語(yǔ)言的用戶(hù)才能在HDFS大規模數據集上很方便地借助SQL 語(yǔ)言查詢(xún)、匯總、分析數據。
  Hive是為大數據批量處理而生的,Hive的出現解決了傳統的關(guān)系型數據庫(MySql、Oracle)在大數據處理上的困局 。Hive 將執行計劃分成map->shuffle->reduce->map->shuffle->reduce…的模型。如果一個(gè)Query會(huì )被編譯成多輪MapReduce,則會(huì )有更多的寫(xiě)中間結果。由于MapReduce執行框架本身的特性,過(guò)多的中間過(guò)程會(huì )降低整個(gè)Query的執行時(shí)間。在Hive的運行過(guò)程中,用戶(hù)只須要創(chuàng )建表,導入數據,編寫(xiě)SQL剖析句子即可。剩下的過(guò)程由Hive框架手動(dòng)的完成。
  Impala是對Hive的一個(gè)補充,可以實(shí)現高效的SQL查詢(xún)。使用Impala來(lái)實(shí)現SQL on Hadoop,用來(lái)進(jìn)行大數據實(shí)時(shí)查詢(xún)剖析。通過(guò)熟悉的傳統關(guān)系型數據庫的SQL風(fēng)格來(lái)操作大數據,同時(shí)數據也是可以?xún)Υ娴紿DFS和HBase中的。Impala沒(méi)有再使用平緩的Hive+MapReduce批處理,而是通過(guò)使用與商用并行關(guān)系數據庫中類(lèi)似的分布式查詢(xún)引擎(由Query Planner、Query Coordinator和Query Exec Engine三部份組成),可以直接從HDFS或HBase中用SELECT、JOIN和統計函數查詢(xún)數據,從而大大增加了延后。Impala將整個(gè)查詢(xún)分成一執行計劃樹(shù),而不是一連串的MapReduce任務(wù),相比Hive沒(méi)了MapReduce啟動(dòng)時(shí)間。
  Hive 適合于長(cháng)時(shí)間的批處理查詢(xún)剖析,而Impala適合于實(shí)時(shí)交互式SQL查詢(xún),Impala給數據人員提供了快速實(shí)驗,驗證看法的大數據剖析工具,可以先使用Hive進(jìn)行數據轉換處理,之后使用Impala在Hive處理好后的數據集上進(jìn)行快速的數據剖析??偟膩?lái)說(shuō):Impala把執行計劃表現為一棵完整的執行計劃樹(shù),可以更自然地分發(fā)執行計劃到各個(gè)Impalad執行查詢(xún),而不用象Hive那樣把它組合成管道型的map->reduce模式,以此保證Impala有更好的并發(fā)性和防止不必要的中間sort與shuffle。但是Impala不支持UDF,能處理的問(wèn)題有一定的限制。
  Spark擁有Hadoop MapReduce所具有的特征,它將Job中間輸出結果保存在顯存中,從而不需要讀取HDFS。Spark 啟用了顯存分布數據集,除了才能提供交互式查詢(xún)外,它還可以?xún)?yōu)化迭代工作負載。Spark 是在 Scala 語(yǔ)言中實(shí)現的,它將 Scala 用作其應用程序框架。與 Hadoop 不同,Spark 和 Scala 能夠緊密集成,其中的 Scala 可以象操作本地集合對象一樣輕松地操作分布式數據集。
  Nutch 是一個(gè)開(kāi)源Java 實(shí)現的搜索引擎。它提供了我們運行自己的搜索引擎所需的全部工具,包括全文搜索和Web爬蟲(chóng)。
  Solr用Java編撰、運行在Servlet容器(如Apache Tomcat或Jetty)的一個(gè)獨立的企業(yè)級搜索應用的全文搜索服務(wù)器。它對外提供類(lèi)似于Web-service的API接口,用戶(hù)可以通過(guò)http請求,向搜索引擎服務(wù)器遞交一定格式的XML文件,生成索引;也可以通過(guò)Http Get操作提出查找懇求,并得到XML格式的返回結果。
  Elasticsearch是一個(gè)開(kāi)源的全文搜索引擎,基于Lucene的搜索服務(wù)器,可以快速的存儲、搜索和剖析海量的數據。設計用于云估算中,能夠達到實(shí)時(shí)搜索,穩定,可靠,快速,安裝使用便捷。
  還涉及到一些機器學(xué)習語(yǔ)言,比如,Mahout主要目標是創(chuàng )建一些可伸縮的機器學(xué)習算法,供開(kāi)發(fā)人員在A(yíng)pache的許可下免費使用;深度學(xué)習框架Caffe以及使用數據流圖進(jìn)行數值估算的開(kāi)源軟件庫TensorFlow等,常用的機器學(xué)習算法例如,貝葉斯、邏輯回歸、決策樹(shù)、神經(jīng)網(wǎng)路、協(xié)同過(guò)濾等。
  五、數據可視化
  對接一些BI平臺,將剖析得到的數據進(jìn)行可視化,用于指導決策服務(wù)。主流的BI平臺例如,國外的敏捷BI Tableau、Qlikview、PowrerBI等,國內的SmallBI和新興的網(wǎng)易有數(可點(diǎn)擊這兒免費試用)等。
  在前面的每一個(gè)階段,保障數據的安全是不可忽略的問(wèn)題。
  基于網(wǎng)路身分認證的合同Kerberos,用來(lái)在非安全網(wǎng)路中,對個(gè)人通訊以安全的手段進(jìn)行身分認證,它容許某實(shí)體在非安全網(wǎng)路環(huán)境下通訊,向另一個(gè)實(shí)體以一種安全的方法證明自己的身分。
  控制權限的ranger是一個(gè)Hadoop集群權限框架,提供操作、監控、管理復雜的數據權限,它提供一個(gè)集中的管理機制,管理基于yarn的Hadoop生態(tài)圈的所有數據權限??梢詫adoop生態(tài)的組件如Hive,Hbase進(jìn)行細細度的數據訪(fǎng)問(wèn)控制。通過(guò)操作Ranger控制臺,管理員可以輕松的通過(guò)配置策略來(lái)控制用戶(hù)訪(fǎng)問(wèn)HDFS文件夾、HDFS文件、數據庫、表、字段權限。這些策略可以為不同的用戶(hù)和組來(lái)設置,同時(shí)權限可與hadoop無(wú)縫對接。
  大數據技術(shù)棧概貌
  博客
  Java技術(shù)庫房《Java程序員復習指南》
  整合全網(wǎng)優(yōu)質(zhì)Java學(xué)習內容,幫助你從基礎到進(jìn)階系統化備考Java
  面試指南
  全網(wǎng)最熱的Java筆試手冊,共200多頁(yè),非常實(shí)用,不管是用于備考還是打算筆試都是不錯的。

官方客服QQ群

微信人工客服

QQ人工客服


線(xiàn)

亚洲国产精品无码久久大片,亚洲AV无码乱码麻豆精品国产,亚洲品质自拍网站,少妇伦子伦精品无码STYLES,国产精久久久久久久