內容來源:2017年5月13日,週末去哪兒架構師李錫銘在「Java開發者大會 | Java之美【上海站】」進行《大數據平臺快速解決方案中》演講分享。IT大咖說做爲獨家視頻合做方,經主辦方和講者審閱受權發佈。html
閱讀字數:1891 | 4分鐘閱讀node
大數據(big data),指沒法在必定時間範圍內用常規軟件工具進行捕捉、管理和處理的數據集合,是須要新處理模式才能具備更強的決策力、洞察發現力和流程優化能力的海量、高增加率和多樣化的信息資產。週末去哪兒架構師李錫銘根據本身的成功經驗,爲咱們分享大數據平臺快速解決方案。web
嘉賓演講視頻和PPT地址:t.cn/R9an7Rr算法
當時咱們肯定要作大數據的時候,有兩種選型。第一種選型是用用原生的、開源的大數據技術,須要本身搭建;第二種是ODPS。sql
後來咱們選擇了利用原生大數據,本身搭建一個大數據平臺。由於咱們已經有了必定的小積累,而且也想作一個大數據方面的技術沉澱。數據庫
在移動互聯網時代,用戶全部的行爲、瀏覽、記錄和收藏等全部的數據,咱們都會把它拿下來分析,前段時間階段性沉澱的東西有多少,是對以前的一個總結。這個數據還能幫助咱們進行深度挖掘,以後如何對不一樣用戶分類,作一個精準化的營銷定位。編程
每一個公司都會對這些數據進行報表級的展示。咱們最開始的數據實現方式是把全部用戶的行爲數據放到傳統的關係型數據庫中,利用純Java應用程序去讀這張表。當計算某個指標的時候,還會關聯若干張子表。這張主表大概有幾千萬,其它子表也是百萬級甚至千萬級的。若是單純用Java去算的話,還要額外處理多線程。多線程
因此咱們用傳統的Java純程序+關係型數據庫去處理報表的時候,在存儲和計算的性能上會出現問題,以致於報表需求愈來愈慢。架構
在這樣的大背景下,咱們改爲了使用大數據去處理這種場景。框架
Hadoop是如今全部大數據計算存儲的一個底層概念,後面全部衍生的大數據產品都是在Hadoop的基礎上進行衍生的。
這張圖是目前大數據平臺的架構。
原生的Hadoop應該包含了Hdfs(文件存儲)、Yarn(資源調度)和Mapreduce(算法)。
Spark是相似於Mapreduce的一個計算框架,它在不少場景中的性能會比原生的Mapreduce好不少,尤爲是迭代計算的時候,會有好幾個數量級的提高。
Sqoop是一個數據的遷移工具。
Hive是對底層Hdfs系統的文件抽象出一個相似Mysql的關係型數據庫,但大前提是它是在Hadoop這個大的語義下的關係型數據庫。
Oozie是一個任務編排和調度的框架。
Hue是大數據的管理後臺。
Zookeeper是分佈式協調工具。
基礎數據:Mysql,File。基礎數據層是遊離於大數據以外的概念,它是傳統的數據來源。
大數據存儲:Hdfs、Hive。大數據存儲是最基礎的文件存儲,在這基礎上抽象出一個大數據的關係型數據庫。
大數據計算:Mapreduce、Spark、Sqoop。Mapreduce是原生的,Spark是新生的,Sqoop是數據轉移的工具。
大數據協調與調度:Yarn、Zookeeper、Oozie。Yarn是原生的,Zookeeper是一個分佈式保證文件原子性的工具,Oozie是調度工具。
大數據展示:Hue。Curd的展示層。
最開始說過,咱們遇到的問題是,Mysql的表存不下,計算也有問題。在這個場景下要把數據,從Mysql轉到大數據,並利用大數據進行計算,最後作一個展示。
它的流程是,首先經過Sqoop把Mysql的數據一次性或是增量的同步到一張Hive表裏,用Hive Sql寫好查詢後,本質上Hive Sql會轉化成Mapreduce任務再去執行,最後數據就展示出來了。
不少時候後臺的服務Control層會有入口和出口,咱們須要把入口和出口的參數都記下來,方便之後排錯或作統計方面的應用。
在應用程序裏,把這些消息定時寫到消息隊列中,用Spark定時讀消息隊列,並把這些讀取到的消息按Spark的方式作一個編程。這個任務最終會被丟到Hadoop的底層計算裏,而後用Yarn去調度,計算出結果,把這個結果寫入Hive,這就完成了一次流式計算。
這裏寫了一個Hive Sql,與傳統Mysql的寫法幾乎同樣。Hive Sql寫好之後點執行。它的過程是把Sql首先交給Hive去跑,Hive用本身的Sql解析引擎把這個任務翻譯成Mapreduce,Mapreduce再用Yarn跑在Hadoop上,最終把結果跑出來。
HadoopHdfs是基礎的存儲層。
HadoopHdfs其實只包含了兩種類型,一個是Namenode,一個是Datanode。Namenode是一個管理的節點,而datanode只負責數據的存儲和冗餘。
Hadoop原生的計算框架是Mapreduce,而spark是一個新興的計算框架,它更快更全面。
資源管理器的架構內包含rescource manager和node manager。Rescource manager是管理節點,node manager是work節點。
把任務丟給rescource manager,它去把任務分發給每一個節點,作一些狀態的變換,最後把結果經過rescource manager彙總之後,處理完畢交給客戶端。
hive的架構並非很複雜,上層是一些用戶的API、web頁面和命令行。它的核心是執行引擎,把sql翻譯成大數據平臺能夠接受的任務。底層基於存儲,它能夠存在hdfs上。
主要用於在hadoop與傳統的數據庫間進行數據的傳遞。
大數據任務編排調度。
若是想要學習一些大數據相關的東西,我推薦能夠先掌握一些基礎,而後找一個場景套進技術裏,進行快速實踐。在快速實踐的過程當中會發現不少問題須要解決,不少知識須要補充,因此要在實踐中前行,在錯誤中補充。
個人分享到此結束,謝謝你們!