hadoop和大數據的關係?和spark的關係?互補?並行?

hadoop和spark之間的關係?hadoop和所謂的大數據之間的關係?


大數據(Big Data)

大數據,官方定義是指那些數據量特別大、數據類別特別複雜的數據集,這種數據集無法用傳統的資料庫進行存儲,管理和處理。大數據的主要特點為數據量大(Volume)數據類別複雜(Variety)數據處理速度快(Velocity)數據真實性高(Veracity),合起來被稱為4V。

大數據中的數據量非常巨大,達到了PB級別。而且這龐大的數據之中,不僅僅包括結構化數據(如數字、符號等數據),還包括非結構化數據(如文本、圖像、聲音、視頻等數據)。這使得大數據的存儲,管理和處理很難利用傳統的關係型資料庫去完成。在大數據之中,有價值的信息往往深藏其中。這就需要對大數據的處理速度要非常快,才能短時間之內就能從大量的複雜數據之中獲取到有價值的信息。在大數據的大量複雜的數據之中,通常不僅僅包含真實的數據,一些虛假的數據也混雜其中。這就需要在大數據的處理中將虛假的數據剔除,利用真實的數據來分析得出真實的結果。

大數據分析(Big Data Analysis)

大數據,表面上看就是大量複雜的數據,這些數據本身的價值並不高,但是對這些大量複雜的數據進行分析處理後,卻能從中提煉出很有價值的信息。對大數據的分析,主要分為五個方面:可視化分析(Analytic Visualization)數據挖掘演算法(Date Mining Algorithms)預測性分析能力(Predictive Analytic Capabilities)語義引擎(Semantic Engines)數據質量管理(Data Quality Management)

可視化分析是普通消費者常常可以見到的一種大數據分析結果的表現形式,比如說百度製作的「百度地圖春節人口遷徙大數據」就是典型的案例之一。可視化分析將大量複雜的數據自動轉化成直觀形象的圖表,使其能夠更加容易的被普通消費者所接受和理解。

數據挖掘演算法是大數據分析的理論核心,其本質是一組根據演算法事先定義好的數學公式,將收集到的數據作為參數變數帶入其中,從而能夠從大量複雜的數據中提取到有價值的信息。著名的「啤酒和尿布」的故事就是數據挖掘演算法的經典案例。沃爾瑪通過對啤酒和尿布購買數據的分析,挖掘出以前未知的兩者間的聯繫,並利用這種聯繫,提升了商品的銷量。亞馬遜的推薦引擎和谷歌的廣告系統都大量使用了數據挖掘演算法。

預測性分析能力是大數據分析最重要的應用領域。從大量複雜的數據中挖掘出規律,建立起科學的事件模型,通過將新的數據帶入模型,就可以預測未來的事件走向。預測性分析能力常常被應用在金融分析和科學研究領域,用於股票預測或氣象預測等。

語義引擎是機器學習的成果之一。過去,計算機對用戶輸入內容的理解僅僅停留在字元階段,不能很好的理解輸入內容的意思,因此常常不能準確的了解用戶的需求。通過對大量複雜的數據進行分析,讓計算機從中自我學習,可以使計算機能夠盡量精確的了解用戶輸入內容的意思,從而把握住用戶的需求,提供更好的用戶體驗。蘋果的Siri和谷歌的Google Now都採用了語義引擎。

數據質量管理是大數據在企業領域的重要應用。為了保證大數據分析結果的準確性,需要將大數據中不真實的數據剔除掉,保留最準確的數據。這就需要建立有效的數據質量管理系統,分析收集到的大量複雜的數據,挑選出真實有效的數據。

分散式計算(Distributed Computing)

對於如何處理大數據,計算機科學界有兩大方向:第一個方向是集中式計算,就是通過不斷增加處理器的數量來增強單個計算機的計算能力,從而提高處理數據的速度。第二個方向是分散式計算,就是把一組計算機通過網路相互連接組成分散系統,然後將需要處理的大量數據分散成多個部分,交由分散系統內的計算機組同時計算,最後將這些計算結果合併得到最終的結果。儘管分散系統內的單個計算機的計算能力不強,但是由於每個計算機只計算一部分數據,而且是多台計算機同時計算,所以就分散系統而言,處理數據的速度會遠高於單個計算機。

過去,分散式計算理論比較複雜,技術實現比較困難,因此在處理大數據方面,集中式計算一直是主流解決方案。IBM的大型機就是集中式計算的典型硬體,很多銀行和政府機構都用它處理大數據。不過,對於當時的互聯網公司來說,IBM的大型機的價格過於昂貴。因此,互聯網公司的把研究方向放在了可以使用在廉價計算機上的分散式計算上。

伺服器集群(Server Cluster)

伺服器集群是一種提升伺服器整體計算能力的解決方案。它是由互相連接在一起的伺服器群所組成的一個並行式或分散式系統。伺服器集群中的伺服器運行同一個計算任務。因此,從外部看,這群伺服器表現為一台虛擬的伺服器,對外提供統一的服務。

儘管單台伺服器的運算能力有限,但是將成百上千的伺服器組成伺服器集群後,整個系統就具備了強大的運算能力,可以支持大數據分析的運算負荷。Google,Amazon,阿里巴巴的計算中心裡的伺服器集群都達到了5000台伺服器的規模。

大數據的技術基礎:MapReduce、Google File System和BigTable

2003年到2004年間,Google發表了MapReduce、GFS(Google File System)和BigTable三篇技術論文,提出了一套全新的分散式計算理論。

MapReduce是分散式計算框架,GFS(Google File System)是分散式文件系統,BigTable是基於Google File System的數據存儲系統,這三大組件組成了Google的分散式計算模型。

Google的分散式計算模型相比於傳統的分散式計算模型有三大優勢:首先,它簡化了傳統的分散式計算理論,降低了技術實現的難度,可以進行實際的應用。其次,它可以應用在廉價的計算設備上,只需增加計算設備的數量就可以提升整體的計算能力,應用成本十分低廉。最後,它被Google應用在Google的計算中心,取得了很好的效果,有了實際應用的證明。

後來,各家互聯網公司開始利用Google的分散式計算模型搭建自己的分散式計算系統,Google的這三篇論文也就成為了大數據時代的技術核心。

主流的三大分散式計算系統:Hadoop,Spark和Storm

由於Google沒有開源Google分散式計算模型的技術實現,所以其他互聯網公司只能根據Google三篇技術論文中的相關原理,搭建自己的分散式計算系統。

Yahoo的工程師Doug Cutting和Mike Cafarella在2005年合作開發了分散式計算系統Hadoop。後來,Hadoop被貢獻給了Apache基金會,成為了Apache基金會的開源項目。Doug Cutting也成為Apache基金會的主席,主持Hadoop的開發工作。

Hadoop採用MapReduce分散式計算框架,並根據GFS開發了HDFS分散式文件系統,根據BigTable開發了HBase數據存儲系統。儘管和Google內部使用的分散式計算系統原理相同,但是Hadoop在運算速度上依然達不到Google論文中的標準。

不過,Hadoop的開源特性使其成為分散式計算系統的事實上的國際標準。Yahoo,Facebook,Amazon以及國內的百度,阿里巴巴等眾多互聯網公司都以Hadoop為基礎搭建自己的分散式計算系統。

Spark也是Apache基金會的開源項目,它由加州大學伯克利分校的實驗室開發,是另外一種重要的分散式計算系統。它在Hadoop的基礎上進行了一些架構上的改良。Spark與Hadoop最大的不同點在於,Hadoop使用硬碟來存儲數據,而Spark使用內存來存儲數據,因此Spark可以提供超過Hadoop100倍的運算速度。但是,由於內存斷電後會丟失數據,Spark不能用於處理需要長期保存的數據。

Storm是Twitter主推的分散式計算系統,它由BackType團隊開發,是Apache基金會的孵化項目。它在Hadoop的基礎上提供了實時運算的特性,可以實時的處理大數據流。不同於Hadoop和Spark,Storm不進行數據的收集和存儲工作,它直接通過網路實時的接受數據並且實時的處理數據,然後直接通過網路實時的傳回結果。

Hadoop,Spark和Storm是目前最重要的三大分散式計算系統,Hadoop常用於離線的複雜的大數據處理,Spark常用於離線的快速的大數據處理,而Storm常用於在線的實時的大數據處理。

以上回答版權屬於虎嗅網:原文鏈接【專治不明覺厲】之「大數據」


Fei Dong | LinkedIn

Hadoop Spark學習小結[2014版]Hadoop

Hadoop社區依然發展迅速,2014年推出了2.3,2.4, 2.5 的社區版本,比如增強 Resource Manager HA, YARN Rest API, ACL on HDFS, 改進 HDFS 的 Web UI…

Hadoop Roadmap 根據我的觀察,主要更新在Yarn,HDFS,而Mapreduce幾乎停滯了,還有一些feature 屬於安全,穩定可靠性一方面是比較穩定了,但也可以說是瓶頸了。

Apache Hadoop Project Members

這個是Hadoop project member and committee, 裡面好多來自Hortonworks,也有不少國人上榜。

SparkSpark 介紹

Spark今年大放溢彩,Spark簡單說就是內存計算(包含迭代式計算,DAG計算,流式計算 )框架,之前MapReduce因效率低下大家經常嘲笑,而Spark的出現讓大家很清新。

  • Reynod 作為Spark核心開發者, 介紹Spark性能超Hadoop百倍,演算法實現僅有其1/10或1/100

  • 淺談Apache Spark的6個發光點

  • Spark: Open Source Superstar Rewrites Future of Big Data

  • Spark is a really big deal for big data, and Cloudera gets it

其實起名字也很重要,Spark就佔了先機,CTO說Where There』s Spark There』s Fire: The State of Apache Spark in 2014

Spark 起源

2010年Berkeley AMPLab,發表在hotcloud 是一個從學術界到工業界的成功典範,也吸引了頂級VC:Andreessen Horowitz的 注資

AMPLab這個實驗室非常厲害,做大數據,雲計算,跟工業界結合很緊密,之前就是他們做mesos,hadoop online, crowddb, Twitter,Linkedin等很多知名公司都喜歡從Berkeley找人,比如Twitter也專門開了門課程 Analyzing Big Data with Twitter 還有個BDAS (Bad Ass)引以為傲: The lab that created Spark wants to speed up everything, including cures for cancer

在2013年,這些大牛從Berkeley AMPLab出去成立了Databricks,半年就做了2次summit參會1000人,引無數Hadoop大佬盡折腰,大家看一下Summit的sponsor ,所有hadoop廠商全來了,並且各個技術公司也在巴結,cloudrea, hortonworks, mapr, datastax, yahoo, ooyala, 根據CTO說 Spark新增代碼量活躍度今年遠遠超過了Hadoop本身,要推出商業化產品Cloud。

Spark人物

  • Ion Stoica: Berkeley教授,AMPLab 領軍
  • Matei Zaharia: 天才,MIT助理教授
  • Reynold Xin Apache Spark開源社區的主導人物之一。他在UC Berkeley AMPLab進行博士學業期間參與了Spark的開發,並在Spark之上編寫了Shark和GraphX兩個開源框架。他和AMPLab同僚共同創建了Databricks公司
  • Andy Konwinski
  • Haoyuan Li
  • Patrick Wendell
  • Xiangrui Meng
  • Paco Nathan
  • Lian Cheng
  • Hossein Falaki
  • Mosharaf Chowdhury
  • Zongheng Yang
  • Yin Huai
  • Committers

Spark基本概念

  1. RDD——Resillient Distributed Dataset A Fault-Tolerant Abstraction for In-Memory Cluster Computing彈性分散式數據集。
  2. Operation——作用於RDD的各種操作分為transformation和action。
  3. Job——作業,一個JOB包含多個RDD及作用於相應RDD上的各種operation。
  4. Stage——一個作業分為多個階段。
  5. Partition——數據分區, 一個RDD中的數據可以分成多個不同的區。
  6. DAG——Directed Acycle graph,有向無環圖,反應RDD之間的依賴關係。
  7. Narrow dependency——窄依賴,子RDD依賴於父RDD中固定的data partition。
  8. Wide Dependency——寬依賴,子RDD對父RDD中的所有data partition都有依賴。
  9. Caching Managenment——緩存管理,對RDD的中間計算結果進行緩存管理以加快整 體的處理速度。

目前還有一些子項目,比如 Spark SQL, Spark Streaming, MLLib, Graphx 工業界也引起廣泛興趣,國內Taobao, baidu也開始使用:Powered by Spark

Apache Spark支持4種分散式部署方式,分別是Amazon EC2, standalone、spark on mesos和 spark on YARN 比如AWS

Spark Summit

  • 2014 Summit

  • 取代而非補充,Spark Summit 2014精彩回顧

  • 擁抱Spark,機遇無限——Spark Summit 2013精彩回顧

  • Databricks Cloud Demo 今年最叫好的demo是Dtabricks Cloud, 把Twitter上面實時收集的數據做作為machine learning素材,用類似IPython notebook,可視化呈現驚艷,而搭建整個sampling系統就花了20分鐘!

培訓資料和視頻

  • 官方文檔

  • Databricks Blog

  • Summit Training

  • Databricks upcoming training

  • Stanford Spark Class

  • CSDN Spark專欄

10月份還有個培訓在灣區的培訓,只不過3天就要1500刀,看來做個講師也不錯:)

第三方項目

  • Web interactive UI on Hadoop/Spark
  • Spark on cassandra
  • Spark Cassandra Connector
  • Calliope
  • H2O + Spark
  • Shark - Hive and SQL on top of Spark
  • MLbase - Machine Learning research project on top of Spark
  • BlinkDB - a massively parallel, approximate query engine built on top of Shark and Spark
  • GraphX - a graph processing analytics framework on top of Spark (GraphX has been merged into Spark 0.9)
  • Apache Mesos - Cluster management system that supports running Spark
  • Tachyon - In memory storage system that supports running Spark
  • Apache MRQL - A query processing and optimization system for large-scale, distributed data analysis, built on top of Apache Hadoop, Hama, and Spark
  • OpenDL - A deep learning algorithm library based on Spark framework. Just kick off.
  • SparkR - R frontend for Spark
  • Spark Job Server - REST interface for managing and submitting Spark jobs on the same cluster.

相關參考資料

  • Resilient Distributed Datasets

  • spark on yarn的技術挑戰

  • Hive原理與不足

  • Impala/Hive現狀分析與前景展望

  • Apache Hadoop: How does Impala compare to Shark

  • MapReduce:一個巨大的倒退

  • Google Dremel 原理 — 如何能3秒分析1PB

  • Isn』t Cloudera Impala doing the same job as Apache Drill incubator project?

  • Shark

  • Big Data Benchmark

  • How does Impala compare to Shark

  • EMC講解Hawq SQL性能:左手Hive右手Impala

  • Shark, Spark SQL, Hive on Spark, and the future of SQL on Spark

  • Cloudera: Impala』s it for interactive SQL on Hadoop; everything else will move to Spark

  • Databricks – an interesting plan for Spark, Shark, and Spark SQL

  • Apache Storm vs Spark Streaming

  • Apache Spark源碼走讀


首先,要明白大數據的概念,簡單來說,大數據就是超過單機尺度的數據,在處理大數據時,一般的傳統數據處理軟體不足以應付大量級和複雜的數據集,Hadoop就是在這種情況而誕生的。

在處理大數據之前,首先要存下大數據。Hadoop Distributed File System (HDFS)是Hadoop的主要組件之一,被設計成適合運行在通用硬體(commodity hardware)上的分散式文件系統,能夠讓大量的數據分散式地存儲到成千上百台機器。存下數據之後,就可以開始分析處理數據了,單機處理顯然不現實,所以出現了MapReduce、Spark、Tez等計算引擎,我們通常拿Spark和MapReduce作比較,在處理速度上面,Spark有天然的優勢,Spark 每次將處理過程載入到內存之中,然後該操作作為緩存一直保持在內存中直到下一步操作。 但是當涉及單次讀取、類似 ETL操作的任務,比如數據轉化、數據整合等時,MapReduce 是更優的選擇。有了計算引擎,但是我們還會嫌它們使用起來太麻煩,要實現各種介面,我們想要更友好的語言來做計算,於是就有了Hive、Pig、SparkSQL等。計算問題解決了,但是需要給這麼多不同的任務分配資源,於是就有了Yarn。隨著各種各樣工具的出現,Hadoop已經慢慢成為一個大數據生態圈。

總而言之,Hadoop或者說Hadoop生態圈,是為了解決大數據應用場景而出現的,它包含了文件系統、計算框架、調度系統等,Spark是Hadoop生態圈裡的一種分散式計算引擎。


轉一下馬鐵教授本人的回答:

Matei Zaharia"s answer to Will Apache Spark ever overtake Apache Hadoop?

我自己的答案:

  1. 回答這類問題我們首先應該區分MapReduce,Apache Hadoop系統,和Hadoop生態圈

  • MapReduce是和Spark並行的概念,兩者都是計算引擎。兩者的比較可以參見 Reynold Xin"s answer to When is Hadoop MapReduce better than Spark? 。我傾向於這樣總結:Spark通過lineage這個核心思想實現了基於內存的輕量的容錯機制,取代了MR保守硬碟數據冗餘
  • Apache Hadoop系統其實就像一個操作系統。主要包含HDFS -相當於Linux下面的ext3,ext4,和Yarn - 相當於Linux下面的進程調度和內存分配模塊。
  • Hadoop生態圈包括Apache Hadoop以及更上層的應用。在Spark/MapReduce這一層計算引擎上面,還可以加Hive來做SQL,各種流處理應用,等等。比如Hive就有on MapReduce和on Spark兩個版本。

  • Spark不完全屬於Hadoop生態圈,它也可以脫離Apache Hadoop。比如用紅帽的Gluster FS做文件系統,Mesos做調度。但是從現在的情況來看它主要還是一個Hadoop應用。比如最近打破TeraSort紀錄(Spark officially sets a new record in large-scale sorting)就是基於HDFS做的。
  • 大數據這個概念就模糊多了。但我覺得最起碼可以很安全的說 大部分的大數據應用運行在Hadoop生態圈裡

  • 大數據好比一張需要被處理的圖片,Hadoop相當於Windows操作系統,圖片可以存在HDFS里並被讀取,mapreduce相當於Win自帶的繪圖板,spark相當於Photoshop。就這關係。


    hadoop和Spark是兩種不同的大數據處理框架,他們的組件都非常多,往往也不容易學,我把他們兩者整理在一幅圖中,給大家一個全貌的感覺。至於各組件的詳細介紹、相關聯繫和區別,以及它們在大數據平台建設中的具體實施關注點,待點贊數達到1000,我再對帖子進行詳細的更新,請大家隨手幫忙點個贊。

    以上這些大數據組件是日常大數據工作中經常會碰到的,每個組件大概的功能,我已經在圖中做了標識。下面,針對這幅圖我給大家兩點重要提示:

    a.藍色部分,是Hadoop生態系統組件,黃色部分是Spark生態組件,雖然他們是兩種不同的大數據處理框架,但它們不是互斥的,Spark與hadoop 中的MapReduce是一種相互共生的關係。Hadoop提供了Spark許多沒有的功能,比如分散式文件系統,而Spark 提供了實時內存計算,速度非常快。有一點大家要注意,Spark並不是一定要依附於Hadoop才能生存,除了Hadoop的HDFS,還可以基於其他的雲平台,當然啦,大家一致認為Spark與Hadoop配合默契最好擺了。

    b.技術趨勢:Spark在崛起,hadoop和Storm中的一些組件在消退。大家在學習使用相關技術的時候,記得與時俱進掌握好新的趨勢、新的替代技術,以保持自己的職業競爭力。

    HSQL未來可能會被Spark SQL替代,現在很多企業都是HIVE SQL和Spark SQL兩種工具共存,當Spark SQL逐步成熟的時候,就有可能替換HSQL;

    MapReduce也有可能被Spark 替換,趨勢是這樣,但目前Spark還不夠成熟穩定,還有比較長的路要走;

    Hadoop中的演算法庫Mahout正被Spark中的演算法庫MLib所替代,為了不落後,大家注意去學習Mlib演算法庫;

    Storm會被Spark Streaming替換嗎?在這裡,Storm雖然不是hadoop生態中的一員,但我仍然想把它放在一起做過比較。由於Spark和hadoop天衣無縫的結合,Spark在逐步的走向成熟和穩定,其生態組件也在逐步的完善,是冉冉升起的新星,我相信Storm會逐步被擠壓而走向衰退。

    歡迎大家關注我的知乎專欄「大數據實踐與職業生涯」並留言,專欄會陸續的推出過往十多年的大數據工作經驗總結和我的一些研究實踐成果。如果你是大數據新人,或者想轉行進入大數據領域,或者大數據職業生涯上存在一些疑惑,都歡迎關注我的知乎live分享「大數據人的職業生涯規劃」 、 「數據分析師-從零入門到精通」、「大數據人的數據科學家之路」。


    關於大數據的「大」,我想糾正一下大家的看法。

    大數據不僅僅是大,它Bigger than big。如果是「大」,那麼,多大才是大?PB?TB?

    大數據的關鍵特性在於,區別於傳統的統計學,它處理的對象是數據的整體,而不是「樣本」。傳統的統計學,都是根據樣本來推測整體,免不了偏差——所以它有個概念叫做「顯著」(Confidence),告訴你,我針對樣本得出的結論,有多大把握對整體也是真的。

    之所以會這樣,因為過去計算機科學不發達,數據的採集和計算都是大問題,只能抽樣。

    現在不同了,數據的採集,存儲,計算都不是問題,為什麼還要抽樣呢?因此,誕生了大數據概念,直接處理數據整體,而不是抽樣。

    有了上述鋪墊,再舉個栗子。如果回答PB是大,OK,10PB算大了吧?是不是大數據?是。OK,那我告訴你,這10PB來自阿里,但只是其已處理數據量的1/10。那麼,現在它還是不是大數據?

    對比一下,一個中小型網站,每天只有10G的數據,是不是大數據?可能不是?OK,但這已經是他全部的數據量了。

    所以,大數據,不僅僅是大,而是「全」


    近年來,大數據越來越火熱,不論是如今新興的Facebook, Google, Uber, Amazon, Airbnb 等互聯網公司,還是 Microsoft, Cisco, IBM 等傳統的老牌技術公司,甚至是諮詢公司、投行、傳統實業企業等,對大數據專業人才的需求都在不斷增長中

    想要從事大數據領域工作,在簡歷中有一些必不可少的關鍵詞,包括:Hadoop, MapReduce, Distributed System, Spark 等。目前,市場上對一枚 Hadoop 工程師的標價至少在年薪 115k 以上。

    Hadoop是一個對海量數據進行處理的分散式系統架構。Hadoop的框架最核心的設計就是:HDFS 和 MapReduce。

    HDFS為海量的數據提供了存儲,而 MapReduce為海量的數據提供了計算。

    而關於Spark, 如果說 Hadoop 是一個工具箱,那麼Spark就只是一種工具,所以,只要你學會了Hadoop,Spark的上手也是非常快的!

    運用 Hadoop 可以做一些什麼實戰項目呢?

    首先,我們可以基於 Haoop 框架,運用面試演算法中常用的 top k 演算法,來進行熱門話題的篩選,比如,「微博今日熱門話題」 「今日頭條」 等。

    難度再升級一點,我們也可以運用 Hadoop 框架,結合更多的數據,例如用戶自身的搜索和瀏覽習慣數據,來做一個推薦系統: Netflix Recommender System

    更多內容可以關注我的微信公眾號:ninechapter


    hadoop側重離線的批處理 而在應付流計算和迭代計算上略顯不足,因為hadoop的每次運算結果都要寫入文件系統,下次計算重新從文件系統讀進來,這就造成很大的IO開銷,

    spark採用RDD的分散式內存抽象,是一棧的大數據解決方案,包括spark core、spark streaming、spark sql、mllib,目的是不是補充hadoop 而是取而代之

    還有一個比較關注的是spark的資料庫,一個基於採樣的資料庫,可以在精度和效率上面權衡


    1. 大數據,數據量至少在TB級別。

    2. Hadoop是大數據處理的開源軟體,也是使用最廣的。

    3. Hadoop的計算過程,大量使用磁碟存儲。Spark的計算,大量使用內存存儲,所以Spark塊。兩者並行。

    4. spark支持從Hadoop的hdfs做數據輸入輸出。

    5. Hadoop 2.x支持Spark作為一個組件。


    Hadoop是一個基礎平台,存儲有HDFS、資源調度有YARN、計算引擎有內置的MapReduce(跑在YARN上),Hadoop的HDFS、YARN是大數據系統的底層組件。

    對於Spark,我從以下角度理解:

    1. 是一種內存計算引擎,與MR是競爭關係,但效率比MR高。

    2. 需要外部的資源調度系統來支持,可以跑在YARN上,也可以跑在Mesos上,當然可以用Standalone模式。

    3. Spark核心計算引擎外圍有若干數據分析組件,Spark SQL(SQL介面)、Spark Streaming(流計算)、MLlib(機器學習)、GraphX(圖計算),「One Stack to rule them all」。

    總體來說,Spark是跑在Hadoop上(依賴YARN和HDFS)的內存計算引擎,內置多種豐富組件,可以處理數據分析各個領域的問題。


    最近面試騰訊, 一面和二面都問起了hadoop和spark的區別和聯繫, 回答的不太好。

    應用場景: hadoop更擅長於離線批處理

    spark更擅長於迭代處理。

    但是 hadoop和spark的區別也在於 前者基於磁碟多次IO, 後者基於內存計算移動計算而非數據。需要注意的是hadoop和spark的Map / Reduce思想 以及其二者的shuffle過程。 我一直沒有講明白shuffle的過程。

    Hadoop提供map和reduce運算元,而spark提供了大量的transform和action運算元,比Hadoop豐富。


    提到大數據,就不能不提Hadoop和 Spark,那麼作為大數據領域中的兩座大山,它們到底是什麼?各自又有什麼魅力呢?

    1.
    Hadoop Spark為何物?

    Hadoop是http://Apache.org的一個項目

    Spark是一個運算速度快如閃電的Apache項目

    一種軟體庫和框架

    可跨計算器集群對龐大數據集(大數據)進行分散式處理

    大數據分析領域的重量級大數據平台

    一種用於數據大規模處理的快速通用引擎

    處理PB級別數據運算速度最快的開源工具

    它有四個主要模塊:

    1) Hadoop Common

    2) Hadoop分散式文件系統(HDFS)

    3) Hadoop YARN

    4) Hadoop MapReduce

    Spark核心組件可以和其他一些高效的軟體庫無縫連接使用

    這些軟體庫包括:

    SparkSQL

    Spark Streming

    MLlib(機器學習專用)

    GraphX

    Spark是一種集群計算框架,意味著Hadoop vs Spark Spark VS MapReduce

    2. Hadoop vs Spark使用難易度

    隨帶易於使用的API,支持Scala(原生語言)、Java、Python和Spark SQL。Spark
    SQL非常類似於SQL 92,且有一種交互模式,可馬上上手。

    Hadoop MapReduce沒有交互模式,有Hive和Pig等附加模塊,採用者使用MapReduce更加容易。

    Spark因易用性受到追捧

    3. Hadoop vs Spark使用成本大比拼

    MapReduce和Spark都是Apache項目,是開源免費軟體產品

    MapReduce使用常規數量的內存

    Spark需要大量內存

    需要速度更快的磁碟和大量磁碟空間來運行MapReduce

    需要更多的系統,將磁碟輸入/輸出分布到多個系統上

    使用常規數量的常規轉速磁碟

    不使用磁碟輸入/輸入用於處理,已使用的磁碟空間可以用於SAN或NAS

    Spark系統的成本更高,但技術減少了數量,最終結果是系統成本較高,但是數量大大減少

    4.Hadoop與Spark的特性

    ?
    數據處理方式

    Hadoop
    MapReduce使用批量處理

    Spark使用內存處理

    不斷收集來自網站的信息,不需要這些數據具有實時性或近乎實時性

    它在內存中處理一切數據,為來自多個來源的數據提供了近乎實時分析的功能

    Hadoop MapReduce運行順序:集群讀取-執行操作-寫回到集群-讀取更新後的數據-執行下一個數據操作

    Spark執行類似的操作,不過是在內存中一步執行:集群讀取-執行操作-寫回到集群

    ?
    兼容性

    在兼容性一點上,二者互相兼容,MapReduce通過JDBC和ODC兼容諸多數據源、文件格式和商業智能工具,Spark亦是如此。

    ?
    容錯性

    MapReduce

    Spark

    使用TaskTracker節點,它為 JobTracker節點提供了心跳(heartbeat)

    用彈性分散式數據集(RDD),它們是容錯集合,裡面的數據元素可執行並行操作,使RDD可以引用外部存儲系統中的數據集,Spark可以用Hadoop支持的任何存儲源創建RDD ,Spark的緩存也具有容錯性。

    ?
    可擴展性

    MapReduce和Spark都可以使用HDFS來擴展

    據目前所知,最大的Hadoop集群是42000個節點,可以說擴展無極限

    最大的已知Spark集群是8000個節點,隨著大數據增多,預計集群規模也會隨之變大

    ? 安全性

    Hadoop支持Kerberos身份驗證

    Spark的安全性弱一點,目前只支持通過共享密鑰(密碼驗證)的身份驗證

    能夠充分利用活動目錄Kerberos和LDAP用於身份驗證

    在HDFS上運行Spark,它可以使用HDFS ACL和文件級許可權

    Hadoop分散式文件系統支持訪問控制列表(ACL)和傳統的文件許可權模式,確保用戶擁有正確的許可權

    Spark可以在YARN上運行,因而能夠使用Kerberos身份驗證

    事實上,Hadoop vs Spark並沒有真正的孰優孰劣,它們不是你死我活的關係,而是一種相互共生的關係,Spark幫助人們簡化了處理大規模數據的步驟流程,而Hadoop又提供了Spark所沒有的功能特性,可以說二者只有相輔相成,互利共生,才能夠為企業、為團隊提供更為有效的數據分析,為決策者提供更為有效的建議。

    文章來源:啟創方舟


    可以看看《為什麼會有第一代大數據Hadoop和第二代大數據Spark?》這個視頻,深刻講解了spark和Hadoop的優缺點和hadoop和大數據的關係,觀點一針見血,分析的入木三分


    要分開存儲和計算看這問題。

    Hadoop中,hdfs已經算是大數據存儲的標配了,mr基本已淘汰(即便用hive都改tez了)。

    數據分析和挖掘,spark已經是趨勢了。

    Spark也能支持秒級的流式計算,但毫秒級的,還得用storm。

    Hadoop還有個組件yarn,做資源管理調度的,spark可以運行在yarn上,也可以獨立運行(還)有種方式是運行在mesos上。


    大數據是一個現象 由於現在不僅僅局限於transaction 各種移動端 App web music video都在創造越來越多的數據 傳統的關係型資料庫已經不能解決這個問題了 於是有人開發出了Hadoop.

    Hadoop 最大的特點在我看來就是把processing 和store data結合在一起處理 而不是分開處理. 其實hadoop如果沒有說是Hadoop ecosystem的話 更傾向於理解成hdfs 也就是Hadoop file system. 這是一種存儲方式 不適用於update比較多的操作 不適用於及時查詢

    而除了hdfs之外, Hadoop 更是一個ecosystem. 它包括很多的組件. 簡單來說就是 即使有了hdfs 我們在自己想要處理大數據需要很多code 所以就有了其他相繼開發出的組件 比如pig hive HBase map reduce. Map reduce用於處理數據 不過只有對大數據才有優勢 對於小數據沒有必要使用 比如我想找文件中dfs出現了多少次 linux command 可以做 mapreduce 也可以做 在能load data進memory的情況下 大數據map reduce 明顯有優勢.

    Spark是map reduce的高級版本.

    簡單來講 hadoop是一個eco system, Hadoop 包括map reduce , 而mapreduce是spark的低配版.


    感覺沒有人回答到正題。廣義的hadoop是一套生態系統,其中包含mr,spark,hive等一系列的軟體。就這個意義而言spark跟hadoop沒法比。狹義的hadoop指mr,hdfs,yarn。這時候spark僅相當於mr。因此討論mr跟spark的關係會更好。


    正好我也在看這方面的資料,如下選自《分散式系統常用技術及安全分析》

    更好的回復請參考與 Hadoop 對比,如何看待 Spark 技術?中排名第一的@用心閣的回答

    從以下幾方面來比較Apache Spark與Apache Hadoop.

    1.解決問題的層面不同

    首先,Apache Spark與Apache Hadoop兩者都是大數據框架,但是各自存在的目的不盡相同。Hadoop實質上更多是一個分散式數據基礎設施,它將巨大的數據集分派到一個由普通計算機組成的集群中的多個節點進行存儲,意味著我們不需要購買和維護昂貴的伺服器硬體。

    同時,Hadoop還會索引和跟蹤這些數據、讓大數據處理和分析效率達到前所未有的高度。Spark則是一個用來對那些分散式存儲的大數據進行處理的工具,它並不會進行分散式數據的存儲。

    2.數據處理方式不同

    Spark因為其處理的方式不一樣,會比Hadoop MapRecue快上很多。Hadoop MapRecue是分步對數據進行處理的,先從集群中讀取數據,進行一次處理,將結果寫到集群,從集群中讀取更新後的數據,再進行下一次的處理,將結果寫到集群。

    而反觀Spark,它會在內在中以接近「實時」的時間完成所有的數據分析,集群中讀取數據,完成所有必須的分析處理,將結果寫回集群,整個計算過程就完成了。所以Spark的批處理速度比Hadoop MapRecue快近10倍,內存中的數據分析速度則快近100倍。

    如果需要處理的數據和結果需求大部分情況下是靜態的,而且你也不耐心等待批處理完成的話,Hadoop MapRecue的處理方式也是完成可以接受的。但如果你需要對流數據進行分析,比如那些來自工廠的感測器收集回來的數據,又或者說你的應用是需要多重數據處理的,那你也許更應該使用Spark進行處理。

    大部分機器學習演算法都是需要多重數據處理的。此外,通常會用到Spark的應用場景有以下幾個方面:實時的市場活動、在線產品推薦、網路安全分析、機器日誌監控等。

    3.容災處理

    兩者的空難恢復方式迥異,但是都不錯。因為Hadoop將每次處理後的數據寫入到磁碟上,所以其天生就能很有彈性地對系統錯誤進行處理。Spark的數據對象存儲在分布於數據集群中的叫作彈性分散式數據集(RDD,Resilient Distributed Dataset)中。這些數據對象即可以放在內存中,也可以放在磁碟中,所以RDD同樣也可以提供完整的空難恢復功能。

    4.兩者各為互補

    Hadoop除了提供我們熟悉的HDFS分散式數據存儲功能,還提供了MapRecue的數據處理功能,YARN的資源調試系統。所以這裡我們完成拋開Spark,使用Hadoop自身的MapRecue來完成對數據的處理。

    相反,Spark也不是非要依附在Hadoop身上才能生存。但如上所述,畢竟它沒有提供文件管理系統,所以,它必須和其他的分散式文件系統進行集成才能運作。這裡我們可以選擇Hadoop的HDFS,也可以選擇其他的,比如Red Hat GlusterFS。當需要外部的資源調度系統來支持時,Spark可以跑在YARN上,也可以跑在Apache Mesos上,當然也可以用Standalone模式。但Spark默認來說還是被用在Hadoop上面的,畢境,大家都認為它們的結合是最好的。

    概念:
    Spark

    Spark是一個快速和通用的集群計算系統。特別:

    1. 快速 Spack具有支持循環數據流和內存計算的先進的DAG執行引擎,所以比Hadoop MapRecue在內存計算上快100倍,在硬碟計算上快10倍。
    2. 易於使用 Spark提供了Java,Scala,Python和R等語言的高級API,可以用於快速開發相關語言應用。Spark提供了超過80個高級的操作,可以輕鬆構建並行應用程序。
    3. 全面 Spark提供了Spark SQL,機器學習的MLlib,進行圖形處理的GraphX,以及Spark Streaming等庫。你可以在同一應用程序無縫地合併這些庫。
    4. 到處運行 可以standalone cluster mode運行EC2、Hadoop YARN、或者Apache Mesos中。可以訪問HDFS、Cassandra、HBase、Hive、Tachyon,以及任意的Hadoop數據源。

    MapRecue

    在過去的20年里,互聯網產生了大量的數據,比如爬蟲文檔、Web講求日誌等;也包括了計算各種類型的派生數據,比如,倒排索引、Web文檔的圖結構的各種表示、每台主機頁面數量概要、每天被請求數量最多的集合,等等。很多這樣的計算在概念上很容易理解的。然而,當輸入的數據量很大時,這些計算必須要被分割到成百上千的機器上才有可能在可以接受的時間內完成。怎樣來實現並行計算?如何分發數據?如何進行錯誤處理?所有這些問題綜合在一起,使得原來很簡潔的計算,因為要大量的複雜代碼來處理這些問題,而變得讓人難以處理。 Google公司為了應對大數據的處理,內部已經實現了數據以百計的為專門目的而寫的計算程序,其中MapRecue就是其著名的計算框架之王,與GFS、Bigtable一起被稱為Google技術的「三寶」。
    MapRecue簡介

    MapRecue是一個編程模型,用於大規模數據集(TB級)的並行運算。有關MapRecue的論文介紹,最早可以追溯到由Google的Jeffrey Dean和Sanjay Ghemawat發表在2004年OSDI(USENIX Symposium on Operationg Systems Design and Implementation)的《MapRecue:Simplified Data Processing on LargeClusters》。這篇文章描述了Google如何分割、處理、整合他們令人難以置信的大數據集。讀者有興趣可以在線閱讀該論文https://www.usenix.org/legacy/events/osdi04/tech/full_papers/dean/dean.pdf。 隨後,開源軟體先驅Doug Cutting等人受到該論文的啟發,開始嘗試實現MapRecue計算框架,並將它與NDFS(Nutch Distributed File System)結合,用以支持Nutch引擎的主要演算法。由於NDFS與MapRecue在Nutch引擎中有著良好的應用,所以它們於2006年2月被分離出來,成為一套完整而獨立的軟體,並命名為Hadoop。 MapRecue程序模型應用成功要歸功於以下幾個方面。首先,由於該模型隱藏了並行、容錯、本地優化以及負載平衡的細節,所以即便是那些沒有並行和分散式系統經驗的程序員也易於使用該模型。其次MapRecue計算可以很容易地表達大數據的各種問題。比如,MapRecue用於為Google的網頁搜索服務生成數據,用於排序,用於數據挖掘,用於機器學習以及其他許多系統。再次,MapRecue的實現符合「由數千機器組成的大集群」的尺度,有效地利用了機器資源,所以非常適合解決大型計算問題。
    MapRecue的編程模型

    MapRecue是一個用於大規模數據集(TB級)並行運算的編程模型,其基本原理就是將大的數據分成小塊逐個分析,最後再將提取出來的數據匯總分析,最終獲得我們想要的內容。從名字可以看出,「Map(映射)」和「Reduce(歸納)」是MapRecue模型的核心,其靈感來源於函數式語言(比如Lisp)中的內置函數map和reduce:用戶通過定義一個Map函數,處理key/value(鍵值對)以生成一個中間key/value集合,MapRecue庫將所有擁有相同的key(key I)的中間狀態key合併起來傳遞到Redure職數;一個叫作Reduce的函數用以合併所有先前Map過後的有相同key(Key I)的中間量。map(k1,v1) -&> list& list(k3,v3)但上面的定義顯然還是過於抽象。現實世界中的許多任務在這個模型中得到了很好的表達。Shekhar Gulati就在他的博客里《How I explained MapReduce to my Wife?》舉了一個辣椒醬製作過程的例子,來形象地描述MapRecue的原理,如下所述。1.MapRecue製作辣椒醬的過程辣椒醬製作的過程是這樣的,先取一個洋蔥,把它切碎,然後拌入鹽和水,最後放進混合研磨機研磨。這樣就能得到洋蔥辣椒醬了。 現在,假設你想用薄荷、洋蔥、番茄、辣椒、大蒜弄一瓶混合辣椒醬。你會怎麼做呢?你會取薄荷葉一撮,洋蔥一個,番茄一個,辣椒一根,大蒜一根,切碎後加入適量的鹽和水,再放入混合研磨機里研磨,這樣你就可以得到一瓶混合辣椒醬了。
    現在把MapRecue的概念應用到食譜上,Map和Reduce其實就是兩種操作。 Map:把洋蔥、番茄、辣椒和大蒜切磋,是各自作用在這些物體上的一個Map操作。所以你給Map一個洋蔥,Map就會把洋蔥切碎。同樣地,你把辣椒、大蒜和番茄一一地拿給Map,你也會得到各種碎塊。所以,當你在切像洋蔥這樣的蔬菜時,你執行的就是一個Map操作。Map操作適用於每一種蔬菜,它會相應地生產出一種或多種碎塊,在我們的例子中生產的是蔬菜塊。在Map操作中可能會出現有個洋蔥壞掉了的情況,你只要把洋蔥丟了就行了。所以,如果出現壞洋蔥了,Map操作就會過濾掉這個壞洋蔥而不會生產出任何的壞洋蔥塊。 Reduce:在這一階段,你將各種蔬菜都放入研磨機時在進行研磨,你就可以得到一瓶辣椒醬了。這意味要製成一瓶辣椒醬,你得研磨所有的原料。因此,研磨機通常將Map操作的蔬菜聚焦在了一起。 當然上面內容只是MapRecue的一部分,MapRecue的強大在於分散式計算。假設你每天需要生產10000瓶辣椒醬,你會怎麼辦?這個時候你就不得不僱傭更多的人和研磨機來完成這項工作了,你需要幾個人一起切蔬菜。每個人都要處理滿滿一袋子的蔬菜,而每一個人都相當於在執行一個簡單的Map操作。每一個人都將不斷地從袋子里拿出蔬菜來,並且每次只對一種蔬菜進行處理,也就是將它們切碎,直到袋子空了為止。這樣,當所有的工人都切完以後,工作台(每個人工作的地方)上就有了洋蔥塊、番茄塊和蒜蓉,等等。 MapRecue將所有輸出的蔬菜都攪拌在了一起,這些蔬菜都在以key為基礎的Map操作下產生的。攪拌將自動完成,你可以假設key是一種原料的名字,你像洋蔥一樣。所以全部的洋蔥key都攪拌在一起,並轉移到研磨洋蔥的研磨器里。這樣,你就能得到洋蔥辣椒醬了。同樣地,所有的番茄也會被轉移地標記著番茄的研磨器里,並製造出番茄辣椒醬。


    推薦這篇文章,詳細介紹了hadoop 和spark差異,重點介紹了spark的shuffle。

    http://www.cnblogs.com/fxjwind/p/3522219.html


    相同的面料,都是基於MapReduce實現分散式計算,可能在面料選取(架構)或個別針線活上稍有些技巧性的區別。 Spark的實現略不同於Hadoop的是,Job中間輸出和結果可以保存在內存中,從而不再需要讀寫HDFS,因此Spark能更好地適用於數據挖掘與機器學習等需要迭代的MapReduce的演算法。


    大數據這個概念很寬泛,就類似於什麼PC時代、互聯網、移動互聯網再到現在的大數據時代,一種技術不斷發展的時代浪潮而已,定義有很多,我認為可以這樣定義:以數據為中心更加精準的服務。你能想像到很多例子,如果不知道的話可以看《大數據時代》這本書。

    而Hadoop、Spark都是處理大數據的一種技術手段,Spark由於是在內存中計算,速度要更快一些。還有很多其它處理大數據的方式,技術沒有最好只有最合適的。


    推薦閱讀:

    Zookeeper在哪些系統中使用,又是怎麼用的?
    分散式計算框架 Hadoop 為什麼叫 "Hadoop" ?
    演算法研發工作中對於MPI和Spark的一些困惑?
    做大數據相關專業,如Hadoop、Hive、Impala等研究與優化的人就業情況如何呢?
    如何進入大數據領域,學習路線是什麼?

    TAG:Hadoop | 大數據 | Spark |