Sqoop:(發音:skup)做爲一款開源的離線數據傳輸工具,主要用於Hadoop(Hive) 與傳統數據庫(MySql,PostgreSQL)間的數據傳遞。它能夠將一個關係數據庫中數據導入Hadoop的HDFS中,前端
也能夠將HDFS中的數據導入關係型數據庫中。算法
Flume:實時數據採集的一個開源框架,它是Cloudera提供的一個高可用用的、高可靠、分佈式的海量日誌採集、聚合和傳輸的系統。目前已是Apache的頂級子項目。使用Flume能夠收集諸如日誌、時間等數據數據庫
並將這些數據集中存儲起來供下游使用(尤爲是數據流框架,例如Storm)。和Flume相似的另外一個框架是Scribe(FaceBook開源的日誌收集系統,它爲日誌的分佈式收集、統一處理提供一個可擴展的、高容錯的簡單方案)編程
Kafka:一般來講Flume採集數據的速度和下游處理的速度一般不一樣步,所以實時平臺架構都會用一個消息中間件來緩衝,而這方面最爲流行和應用最爲普遍的無疑是Kafka。它是由LinkedIn開發的一個分佈式消息系統,後端
以其能夠水平擴展和高吞吐率而被普遍使用。目前主流的開源分佈式處理系統(如Storm和Spark等)都支持與Kafka 集成。服務器
Kafka是一個基於分佈式的消息發佈-訂閱系統,特色是速度快、可擴展且持久。與其餘消息發佈-訂閱系統相似,Kafka可在主題中保存消息的信息。生產者向主題寫入數據,消費者從主題中讀取數據。網絡
做爲一個分佈式的、分區的、低延遲的、冗餘的日誌提交服務。和Kafka相似消息中間件開源產品還包括RabbiMQ、ActiveMQ、ZeroMQ等。前端工程師
MapReduce:架構
MapReduce是Google公司的核心計算模型,它將運行於大規模集羣上的複雜並行計算過程高度抽象爲兩個函數:map和reduce。MapReduce最偉大之處在於其將處理大數據的能力賦予了普通開發人員,框架
以致於普通開發人員即便不會任何的分佈式編程知識,也能將本身的程序運行在分佈式系統上處理海量數據。
Hive: MapReduce將處理大數據的能力賦予了普通開發人員,而Hive進一步將處理和分析大數據的能力賦予了實際的數據使用人員(數據開發工程師、數據分析師、算法工程師、和業務分析人員)。
Hive是由Facebook開發並貢獻給Hadoop開源社區的,是一個創建在Hadoop體系結構上的一層SQL抽象。Hive提供了一些對Hadoop文件中數據集進行處理、查詢、分析的工具。它支持相似於傳統RDBMS的SQL語言
的查詢語言,一幫助那些熟悉SQL的用戶處理和查詢Hodoop在的數據,該查詢語言稱爲Hive SQL。Hive SQL實際上先被SQL解析器解析,而後被Hive框架解析成一個MapReduce可執行計劃,
並按照該計劃生產MapReduce任務後交給Hadoop集羣處理。
Spark:儘管MapReduce和Hive能完成海量數據的大多數批處理工做,而且在打數據時代稱爲企業大數據處理的首選技術,可是其數據查詢的延遲一直被詬病,並且也很是不適合迭代計算和DAG(有限無環圖)計算。
因爲Spark具備可伸縮、基於內存計算能特色,且能夠直接讀寫Hadoop上任何格式的數據,較好地知足了數據即時查詢和迭代分析的需求,所以變得愈來愈流行。
Spark是UC Berkeley AMP Lab(加州大學伯克利分校的 AMP實驗室)所開源的類Hadoop MapReduce的通用並行框架,它擁有Hadoop MapReduce所具備的優勢,但不一樣MapReduce的是,
Job中間輸出結果能夠保存在內存中,從而不須要再讀寫HDFS ,所以能更好適用於數據挖掘和機器學習等須要迭代的MapReduce算法。
Spark也提供類Live的SQL接口,即Spark SQL,來方便數據人員處理和分析數據。
Spark還有用於處理實時數據的流計算框架Spark Streaming,其基本原理是將實時流數據分紅小的時間片斷(秒或幾百毫秒),以相似Spark離線批處理的方式來處理這小部分數據。
Storm:MapReduce、Hive和Spark是離線和準實時數據處理的主要工具,而Storm是實時處理數據的。
Storm是Twitter開源的一個相似於Hadoop的實時數據處理框架。Storm對於實時計算的意義至關於Hadoop對於批處理的意義。Hadoop提供了Map和Reduce原語,使對數據進行批處理變得很是簡單和優美。
一樣,Storm也對數據的實時計算提供了簡單的Spout和Bolt原語。Storm集羣表面上和Hadoop集羣很是像,可是在Hadoop上面運行的是MapReduce的Job,而在Storm上面運行的是Topology(拓撲)。
Storm拓撲任務和Hadoop MapReduce任務一個很是關鍵的區別在於:1個MapReduce Job最終會結束,而1一個Topology永遠運行(除非顯示的殺掉它,),因此實際上Storm等實時任務的資源使用相比離線
MapReduce任務等要大不少,由於離線任務運行完就釋放掉所使用的計算、內存等資源,而Storm等實時任務必須一直佔有直到被顯式的殺掉。
Storm具備低延遲、分佈式、可擴展、高容錯等特性,能夠保證消息不丟失,目前Storm, 類Storm或基於Storm抽象的框架技術是實時處理、流處理領域主要採用的技術。
Flink:在數據處理領域,批處理任務和實時流計算任務通常被認爲是兩種不一樣的任務,一個數據項目通常會被設計爲只能處理其中一種任務,例如Storm只支持流處理任務,而MapReduce, Hive只支持批處理任務。
Apache Flink是一個同時面向分佈式實時流處理和批量數據處理的開源數據平臺,它能基於同一個Flink運行時(Flink Runtime),提供支持流處理和批處理兩種類型應用的功能。Flink在實現流處理和批處理時,
與傳統的一些方案徹底不一樣,它從另外一個視角看待流處理和批處理,將兩者統一塊兒來。Flink徹底支持流處理,批處理被做爲一種特殊的流處理,只是它的數據流被定義爲有界的而已。基於同一個Flink運行時,
Flink分別提供了流處理和批處理API,而這兩種API也是實現上層面向流處理、批處理類型應用框架的基礎。
Beam:Google開源的Beam在Flink基礎上更進了一步,不但但願統一批處理和流處理,並且但願統一大數據處理範式和標準。Apache Beam項目重點在於數據處理的的編程範式和接口定義,並不涉及具體執行引擎
的實現。Apache Beam但願基於Beam開發的數據處理程序能夠執行在任意的分佈式計算引擎上。
Apache Beam主要由Beam SDK和Beam Runner組成,Beam SDK定義了開發分佈式數據處理任務業務邏輯的API接口,生成的分佈式數據處理任務Pipeline交給具體的Beam Runner執行引擎。Apache Flink
目前支持的API是由Java語言實現的,它支持的底層執行引擎包括Apache Flink、Apache Spark和Google Cloud Flatform。
HDFS:Hadoop Distributed File System,簡稱FDFS,是一個分佈式文件系統。它有必定高度的容錯性和高吞吐量的數據訪問,很是適合大規模數據集上的應用。HDFS提供了一個高容錯性和高吞吐量的海量數據存儲解決方案。
在Hadoop的整個架構中,HDFS在MapReduce任務處理過程在中提供了對文件操做的和存儲的的支持,MapReduce在HDFS基礎上實現了任務的分發、跟蹤和執行等工做,並收集結果,二者相互做用,共同完成了
Hadoop分佈式集羣的主要任務。
HBase:HBase是一種構建在HDFS之上的分佈式、面向列族的存儲系統。在須要實時讀寫並隨機訪問超大規模數據集等場景下,HBase目前是市場上主流的技術選擇。
HBase技術來源於Google論文《Bigtable :一個結構化數據的分佈式存儲系統》。如同Bigtable利用了Google File System提供的分佈式數據存儲方式同樣,HBase在HDFS之上提供了相似於Bigtable的能力。
HBase解決了傳遞數據庫的單點性能極限。實際上,傳統的數據庫解決方案,尤爲是關係型數據庫也能夠經過複製和分區的方法來提升單點性能極限,但這些都是後知後覺的,安裝和維護都很是複雜。
而HBase從另外一個角度處理伸縮性的問題,即經過線性方式從下到上增長節點來進行擴展。
HBase 不是關係型數據庫,也不支持SQL,它的特性以下:
一、大:一個表能夠有上億上,上百萬列。
二、面向列:面向列表(簇)的存儲和權限控制,列(簇)獨立檢索。
三、稀疏:爲空(null)的列不佔用存儲空間,所以表能夠設計的很是稀疏。
四、無模式::每一行都有一個能夠排序的主鍵和任意多的列。列能夠根據需求動態增長,同一張表中不一樣的行能夠有大相徑庭的列。
五、數據多版本:每一個單元的數據能夠有多個版本,默認狀況下,版本號字段分開,它是單元格插入時的時間戳。
六、數據類型單一:HBase中數據都是字符串,沒有類型。
數據有不少應用方式,如固定報表、即時分析、數據服務、數據分析、數據挖掘和機器學習等。下面說下即時分析Drill框架、數據分析R語言、機器學習TensorFlow框架。
Drill:Apache Drill是一個開源實時大數據分佈式查詢引擎,目前已成爲Apache的頂級項目。Drill開源版本的Google Dremel。Dremel是Google的「交互式」數據分析系統,能夠組建成規模上千的集羣,處理PB級別的數據。
MapReduce處理數據通常在分鐘甚至小時級別,而Dremel將處理時間縮短至秒級,即Drill是對MapReduce的有力補充。Drill兼容ANSI SQL語法做爲接口,支持本地文件、HDFS、Hive、HBase、MongoDb做爲
存儲的數據查詢。文件格式支持Parquet、CSV、TSV以及Json這種無模式(schema-free)數據。全部這些數據都像傳統數據庫的表查詢同樣進行快速實時查詢。
R語言:R是一種開源的數據分析解決方案。R流行緣由以下:
一、R是自由軟件:徹底免費、開源。可在官方網站及其鏡像中下載任何有關的安裝程序、源代碼、程序包及其源代碼、文檔資料,標準的安裝文件自身就帶有許多模塊和內嵌統計函數,安裝好後能夠直接實現許多
經常使用的統計功能。
二、R是一種可編程的語言:做爲一個開放的統計編程環境,R語言的語法通俗易懂,並且目前大多數新的統計方法和技術均可以在R中找到。
三、R具備很強的互動性:除了圖形輸出在另外的窗口,它的熟入輸出都是在一個窗口進行的,輸入語法中若是有錯立刻會在窗口中給出提示,對之前輸入過的命令有記憶功能,能夠隨時再現、編輯、修改以知足
用戶的須要,輸出的圖形能夠直接保存爲JPG、BMP、PNG等圖片格式,還能夠直接保存爲PDF文件。此外,R語言和其它編程語言和數據庫直接有很好的接口。
TensorFlow:TensorFlow是一個很是靈活的框架,它可以運行在我的電腦或服務器的單個/多個cpu和GPU上,甚至是移動設備上,它最先是爲了研究機器學習和深度神經網絡而開發的,後來由於通用而開源。
TensorFlow是基於數據流圖的處理框架,TensorFlow節點表示數學運算,邊表示運算節點之間的數據交互。TensorFlow從字母意義上來說有兩層含義:一是Tensor表明的是節點之間傳遞的數據,一般這個數據
是一個多維度矩陣(multidimensional data arrays)或一維向量;二是Flow指的數據流,形象理解就是數據按照流的形式進入數據運算圖的各個節點。
後臺數據庫和日誌文件通常只能知足常規的統計分析,對於具體的產品和項目來講,通常還要根據項目的目標和分析需求進行鍼對性的「數據埋點」工做,所謂埋點:就是在額外的正常功能邏輯上添加針對性的邏輯統計,即指望的
事件是否發生,發生後應該記錄那些信息,好比用戶在當前頁面是否用鼠標滾動頁面、有關的頁面區域是否曝光了、當前的用戶操做的的時間是多少、停留時長多少、這些都須要前端工程師進行鍼對性的埋點才能知足有關的分析需求。
數據埋點工做通常由產品經理和分析師預先肯定分析需求,而後由數據開發團隊對接前端和後端開發完成具體的埋點工做。
參考資料:《離線和實時大數據開發實戰》