新手入門大數據,大數據的入門!!!認識大數據

大數據介紹

大數據的由來

大數據的應用領域

大數據方面核心技術有哪些?

一、數據採集與預處理

Flume NG

NDC

Logstash

Sqoop

流式計算

Zookeeper

二、數據存儲

HBase

Phoenix

Yarn

Mesos

Redis

Atlas

Kudu

三、數據清洗

Oozie

Azkaban

四、數據查詢分析

Hive

Impala

Spark

Nutch

Solr

Elasticsearch

五、數據可視化

大數據的由來

對於“大數據”(Big data)研究機構Gartner給出了這樣的定義。“大數據”是需要新處理模式才能具有更強的決策力、洞察發現力和流程優化能力來適應海量、高增長率和多樣化的信息資產。

互聯網科技發展蓬勃興起,人工智能時代來臨,抓住下一個風口。為幫助那些往想互聯網方向轉行想學習,卻因為時間不夠,資源不足而放棄的人。我自己整理的一份最新的大數據進階資料和高級開發教程,大數據學習群: 740041381就可以找到組織學習 歡迎進階中和進想深入大數據的小夥伴加入

1

麥肯錫全球研究所給出的定義是:一種規模大到在獲取、存儲、管理、分析方面大大超出了傳統數據庫軟件工具能力範圍的數據集合,具有海量的數據規模、快速的數據流轉、多樣的數據類型和價值密度低四大特徵。

大數據技術的戰略意義不在於掌握龐大的數據信息,而在於對這些含有意義的數據進行專業化處理。換而言之,如果把大數據比作一種產業,那麼這種產業實現盈利的關鍵,在於提高對數據的“加工能力”,通過“加工”實現數據的“增值”。

從技術上看,大數據與雲計算的關係就像一枚硬幣的正反面一樣密不可分。大數據必然無法用單臺的計算機進行處理,必須採用分佈式架構。它的特色在於對海量數據進行分佈式數據挖掘。但它必須依託雲計算的分佈式處理、分佈式數據庫和雲存儲、虛擬化技術。

隨著雲時代的來臨,大數據(Big data)也吸引了越來越多的關注。分析師團隊認為,大數據(Big data)通常用來形容一個公司創造的大量非結構化數據和半結構化數據,這些數據在下載到關係型數據庫用於分析時會花費過多時間和金錢。大數據分析常和雲計算聯繫到一起,因為實時的大型數據集分析需要像MapReduce一樣的框架來向數十、數百或甚至數千的電腦分配工作。

大數據需要特殊的技術,以有效地處理大量的容忍經過時間內的數據。適用於大數據的技術,包括大規模並行處理(MPP)數據庫、數據挖掘、分佈式文件系統、分佈式數據庫、雲計算平臺、互聯網和可擴展的存儲系統。

最小的基本單位是bit,按順序給出所有單位:bit、Byte、KB、MB、GB、TB、PB、EB、ZB、YB、BB、NB、DB。

大數據與牆的故事引入:https://baike.baidu.com/tashuo/browse/content?id=45bd8fd350d6aab5b6d81047&lemmaId=1356941&lemmaId=1356941&fr=qingtian

大數據的應用領域

大數據無處不在,大數據應用於各個行業,包括金融、汽車、餐飲、電信、能源、體能和娛樂等在內的社會各行各業都已經融入了大數據的印跡。

製造業,利用工業大數據提升製造業水平,包括產品故障診斷與預測、分析工藝流程、改進生產工藝,優化生產過程能耗、工業供應鏈分析與優化、生產計劃與排程。

金融行業,大數據在高頻交易、社交情緒分析和信貸風險分析三大金融創新領域發揮重大作用。

汽車行業,利用大數據和物聯網技術的無人駕駛汽車,在不遠的未來將走入我們的日常生活。

互聯網行業,藉助於大數據技術,可以分析客戶行為,進行商品推薦和針對性廣告投放。

電信行業,利用大數據技術實現客戶離網分析,及時掌握客戶離網傾向,出臺客戶挽留措施。

能源行業,隨著智能電網的發展,電力公司可以掌握海量的用戶用電信息,利用大數據技術分析用戶用電模式,可以改進電網運行,合理設計電力需求響應系統,確保電網運行安全。

物流行業,利用大數據優化物流網絡,提高物流效率,降低物流成本。

城市管理,可以利用大數據實現智能交通、環保監測、城市規劃和智能安防。

生物醫學,大數據可以幫助我們實現流行病預測、智慧醫療、健康管理,同時還可以幫助我們解讀DNA,瞭解更多的生命奧秘。

體育娛樂,大數據可以幫助我們訓練球隊,決定投拍哪種題財的影視作品,以及預測比賽結果。

安全領域,政府可以利用大數據技術構建起強大的國家安全保障體系,企業可以利用大數據抵禦網絡攻擊,警察可以藉助大數據來預防犯罪。

個人生活, 大數據還可以應用於個人生活,利用與每個人相關聯的“個人大數據”,分析個人生活行為習慣,為其提供更加周到的個性化服務。

大數據的價值,遠遠不止於此,大數據對各行各業的滲透,大大推動了社會生產和生活,未來必將產生重大而深遠的影響。

大數據方面核心技術有哪些?

大數據技術的體系龐大且複雜,基礎的技術包含數據的採集、數據預處理、分佈式存儲、NoSQL數據庫、數據倉庫、機器學習、並行計算、可視化等各種技術範疇和不同的技術層面。首先給出一個通用化的大數據處理框架,主要分為下面幾個方面:數據採集與預處理、數據存儲、數據清洗、數據查詢分析和數據可視化。

1

一、數據採集與預處理

對於各種來源的數據,包括移動互聯網數據、社交網絡的數據等,這些結構化和非結構化的海量數據是零散的,也就是所謂的數據孤島,此時的這些數據並沒有什麼意義,數據採集就是將這些數據寫入數據倉庫中,把零散的數據整合在一起,對這些數據綜合起來進行分析。數據採集包括文件日誌的採集、數據庫日誌的採集、關係型數據庫的接入和應用程序的接入等。在數據量比較小的時候,可以寫個定時的腳本將日誌寫入存儲系統,但隨著數據量的增長,這些方法無法提供數據安全保障,並且運維困難,需要更強壯的解決方案。

1

Flume NG

Flume NG作為實時日誌收集系統,支持在日誌系統中定製各類數據發送方,用於收集數據,同時,對數據進行簡單處理,並寫到各種數據接收方(比如文本,HDFS,Hbase等)。Flume NG採用的是三層架構:Agent層,Collector層和Store層,每一層均可水平拓展。其中Agent包含Source,Channel和 Sink,source用來消費(收集)數據源到channel組件中,channel作為中間臨時存儲,保存所有source的組件信息,sink從channel中讀取數據,讀取成功之後會刪除channel中的信息。

NDC

NDC,Netease Data Canal,直譯為網易數據運河系統,是網易針對結構化數據庫的數據實時遷移、同步和訂閱的平臺化解決方案。它整合了網易過去在數據傳輸領域的各種工具和經驗,將單機數據庫、分佈式數據庫、OLAP系統以及下游應用通過數據鏈路串在一起。除了保障高效的數據傳輸外,NDC的設計遵循了單元化和平臺化的設計哲學。

強調文本 強調文本

Logstash

Logstash是開源的服務器端數據處理管道,能夠同時從多個來源採集數據、轉換數據,然後將數據發送到您最喜歡的 “存儲庫” 中。一般常用的存儲庫是Elasticsearch。Logstash 支持各種輸入選擇,可以在同一時間從眾多常用的數據來源捕捉事件,能夠以連續的流式傳輸方式,輕鬆地從您的日誌、指標、Web 應用、數據存儲以及各種 AWS 服務採集數據。

Sqoop

Sqoop,用來將關係型數據庫和Hadoop中的數據進行相互轉移的工具,可以將一個關係型數據庫(例如Mysql、Oracle)中的數據導入到Hadoop(例如HDFS、Hive、Hbase)中,也可以將Hadoop(例如HDFS、Hive、Hbase)中的數據導入到關係型數據庫(例如Mysql、Oracle)中。Sqoop 啟用了一個 MapReduce 作業(極其容錯的分佈式並行計算)來執行任務。Sqoop 的另一大優勢是其傳輸大量結構化或半結構化數據的過程是完全自動化的。

流式計算

流式計算是行業研究的一個熱點,流式計算對多個高吞吐量的數據源進行實時的清洗、聚合和分析,可以對存在於社交網站、新聞等的數據信息流進行快速的處理並反饋,目前大數據流分析工具有很多,比如開源的strom,spark streaming等。

1

Strom集群結構是有一個主節點(nimbus)和多個工作節點(supervisor)組成的主從結構,主節點通過配置靜態指定或者在運行時動態選舉,nimbus與supervisor都是Storm提供的後臺守護進程,之間的通信是結合Zookeeper的狀態變更通知和監控通知來處理。nimbus進程的主要職責是管理、協調和監控集群上運行的topology(包括topology的發佈、任務指派、事件處理時重新指派任務等)。supervisor進程等待nimbus分配任務後生成並監控worker(jvm進程)執行任務。supervisor與worker運行在不同的jvm上,如果由supervisor啟動的某個worker因為錯誤異常退出(或被kill掉),supervisor會嘗試重新生成新的worker進程。

當使用上游模塊的數據進行計算、統計、分析時,就可以使用消息系統,尤其是分佈式消息系統。Kafka使用Scala進行編寫,是一種分佈式的、基於發佈/訂閱的消息系統。Kafka的設計理念之一就是同時提供離線處理和實時處理,以及將數據實時備份到另一個數據中心,Kafka可以有許多的生產者和消費者分享多個主題,將消息以topic為單位進行歸納;Kafka發佈消息的程序稱為producer,也叫生產者,預訂topics並消費消息的程序稱為consumer,也叫消費者;當Kafka以集群的方式運行時,可以由一個服務或者多個服務組成,每個服務叫做一個broker,運行過程中producer通過網絡將消息發送到Kafka集群,集群向消費者提供消息。Kafka通過Zookeeper管理集群配置,選舉leader,以及在Consumer Group發生變化時進行rebalance。Producer使用push模式將消息發佈到broker,Consumer使用pull模式從broker訂閱並消費消息。Kafka可以和Flume一起工作,如果需要將流式數據從Kafka轉移到hadoop,可以使用Flume代理agent,將Kafka當做一個來源source,這樣可以從Kafka讀取數據到Hadoop。

Zookeeper

Zookeeper是一個分佈式的,開放源碼的分佈式應用程序協調服務,提供數據同步服務。它的作用主要有配置管理、名字服務、分佈式鎖和集群管理。配置管理指的是在一個地方修改了配置,那麼對這個地方的配置感興趣的所有的都可以獲得變更,省去了手動拷貝配置的繁瑣,還很好的保證了數據的可靠和一致性,同時它可以通過名字來獲取資源或者服務的地址等信息,可以監控集群中機器的變化,實現了類似於心跳機制的功能。

二、數據存儲

Hadoop作為一個開源的框架,專為離線和大規模數據分析而設計,HDFS作為其核心的存儲引擎,已被廣泛用於數據存儲。

1

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啟動後會創建多個線程,其中一個為主線程,其餘為工作線程。主線程負責監聽所有的客戶端連接請求,工作線程只監聽主線程的命令請求。

Kudu

Kudu是圍繞Hadoop生態圈建立的存儲引擎,Kudu擁有和Hadoop生態圈共同的設計理念,它運行在普通的服務器上、可分佈式規模化部署、並且滿足工業界的高可用要求。其設計理念為fast analytics on fast data。作為一個開源的存儲引擎,可以同時提供低延遲的隨機讀寫和高效的數據分析能力。Kudu不但提供了行級的插入、更新、刪除API,同時也提供了接近Parquet性能的批量掃描操作。使用同一份存儲,既可以進行隨機讀寫,也可以滿足數據分析的要求。Kudu的應用場景很廣泛,比如可以進行實時的數據分析,用於數據可能會存在變化的時序數據應用等。

在數據存儲過程中,涉及到的數據表都是成千上百列,包含各種複雜的Query,推薦使用列式存儲方法,比如parquent,ORC等對數據進行壓縮。Parquet 可以支持靈活的壓縮選項,顯著減少磁盤上的存儲。

三、數據清洗

MapReduce作為Hadoop的查詢引擎,用於大規模數據集的並行計算,”Map(映射)”和”Reduce(歸約)”,是它的主要思想。它極大的方便了編程人員在不會分佈式並行編程的情況下,將自己的程序運行在分佈式系統中。

1

隨著業務數據量的增多,需要進行訓練和清洗的數據會變得越來越複雜,這個時候就需要任務調度系統,比如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和MapReduce。可以將Hive理解為一個客戶端工具,將SQL操作轉換為相應的MapReduce jobs,然後在hadoop上面運行。Hive支持標準的SQL語法,免去了用戶編寫MapReduce程序的過程,它的出現可以讓那些精通SQL技能、但是不熟悉MapReduce 、編程能力較弱與不擅長Java語言的用戶能夠在HDFS大規模數據集上很方便地利用SQL 語言查詢、彙總、分析數據。

Hive是為大數據批量處理而生的,Hive的出現解決了傳統的關係型數據庫(MySql、Oracle)在大數據處理上的瓶頸 。Hive 將執行計劃分成map->shuffle->reduce->map->shuffle->reduce…的模型。如果一個Query會被編譯成多輪MapReduce,則會有更多的寫中間結果。由於MapReduce執行框架本身的特點,過多的中間過程會增加整個Query的執行時間。在Hive的運行過程中,用戶只需要創建表,導入數據,編寫SQL分析語句即可。剩下的過程由Hive框架自動的完成。

Impala

Impala是對Hive的一個補充,可以實現高效的SQL查詢。使用Impala來實現SQL on Hadoop,用來進行大數據實時查詢分析。通過熟悉的傳統關係型數據庫的SQL風格來操作大數據,同時數據也是可以存儲到HDFS和HBase中的。Impala沒有再使用緩慢的Hive+MapReduce批處理,而是通過使用與商用並行關係數據庫中類似的分佈式查詢引擎(由Query Planner、Query Coordinator和Query Exec Engine三部分組成),可以直接從HDFS或HBase中用SELECT、JOIN和統計函數查詢數據,從而大大降低了延遲。Impala將整個查詢分成一執行計劃樹,而不是一連串的MapReduce任務,相比Hive沒了MapReduce啟動時間。

Hive 適合於長時間的批處理查詢分析,而Impala適合於實時交互式SQL查詢,Impala給數據人員提供了快速實驗,驗證想法的大數據分析工具,可以先使用Hive進行數據轉換處理,之後使用Impala在Hive處理好後的數據集上進行快速的數據分析。總的來說:Impala把執行計劃表現為一棵完整的執行計劃樹,可以更自然地分發執行計劃到各個Impalad執行查詢,而不用像Hive那樣把它組合成管道型的map->reduce模式,以此保證Impala有更好的併發性和避免不必要的中間sort與shuffle。但是Impala不支持UDF,能處理的問題有一定的限制。

Spark

Spark擁有Hadoop MapReduce所具有的特點,它將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無縫對接。


分享到:


相關文章: