A. 如何使用Maven構建《hadoop權威指南3》隨書的源碼包
《hadoop:the definitive guide 3th》中的例子默認提供了一種編譯和構建jar包方法——maven,如果沒有maven你會發現編譯測試隨書的源碼會非常的麻煩(至少在命令行下),當然你也可以使用eclipse導入隨書的源碼再自己一個個的添加依賴性jar包(恐怕也不太容易)。不過還好有非常好的開源的軟體項目管理工具來幫助我們做這些無關於程序本身設計與架構的瑣碎的工作,那就是maven!
如果你對maven還不太了解,可以參看這里。
《hadoop:the definitive guide 3th》的源碼包可以從github中下載到,如下圖所示:
下面我們就可以切換到本書的源文件包的根目錄下使用maven來構建本書的jar包了:
% mvn package -DskipTests -Dhadoop.version=1.0.4
執行過這條命令後就是很長時間的等待,maven會到他的中央倉庫和apache的倉庫中下載所需要的jar包和pom.xml文件(這個過程可能要持續大約一個小時,要確保你的電腦已經連上網路,下載完成後在~/.m2/repository文件夾中——也即本地倉庫——可以看到已經下載下來的jar包和pom文件),然後再逐個構建根目錄下pom.xml中配置的moles,等所有的工作做完就可以看到已經打包的各個jar包,從而可以很方便的在命令行使用hadoop命令測試書中的代碼了。
B. Hadoop 請教學習順序
熟練掌握maprece編程,推薦書籍:《hadoop實戰》《hadoop權威指南》《精通hadoop》等。
C. Hadoop與分布式數據處理 Spark VS Hadoop有哪些異同點
1、 Spark VSHadoop有哪些異同點?
Hadoop:分布式批處理計算,強調批處理,常用於數據挖掘、分析
Spark:是一個基於內存計算的開源的集群計算系統,目的是讓數據分析更加快速, Spark 是一種與 Hadoop 相似的開源集群計算環境,但是兩者之間還存在一些不同之處,這些有用的不同之處使 Spark 在某些工作負載方面表現得更加優越,換句話說,Spark 啟用了內存分布數據集,除了能夠提供互動式查詢外,它還可以優化迭代工作負載。
Spark 是在 Scala 語言中實現的,它將 Scala 用作其應用程序框架。與 Hadoop 不同,Spark 和 Scala 能夠緊密集成,其中的 Scala 可以像操作本地集合對象一樣輕松地操作分布式數據集。
盡管創建 Spark 是為了支持分布式數據集上的迭代作業,但是實際上它是對 Hadoop 的補充,可以在 Hadoop 文件系統中並行運行。通過名為Mesos的第三方集群框架可以支持此行為。Spark 由加州大學伯克利分校 AMP 實驗室 (Algorithms,Machines,and People Lab) 開發,可用來構建大型的、低延遲的數據分析應用程序。
雖然 Spark 與 Hadoop 有相似之處,但它提供了具有有用差異的一個新的集群計算框架。首先,Spark 是為集群計算中的特定類型的工作負載而設計,即那些在並行操作之間重用工作數據集(比如機器學習演算法)的工作負載。為了優化這些類型的工作負載,Spark 引進了內存集群計算的概念,可在內存集群計算中將數據集緩存在內存中,以縮短訪問延遲.
在大數據處理方面相信大家對hadoop已經耳熟能詳,基於GoogleMap/Rece來實現的Hadoop為開發者提供了map、rece原語,使並行批處理程序變得非常地簡單和優美。Spark提供的數據集操作類型有很多種,不像Hadoop只提供了Map和Rece兩種操作。比如map,filter, flatMap,sample, groupByKey, receByKey, union,join, cogroup,mapValues, sort,partionBy等多種操作類型,他們把這些操作稱為Transformations。同時還提供Count,collect, rece, lookup, save等多種actions。這些多種多樣的數據集操作類型,給上層應用者提供了方便。各個處理節點之間的通信模型不再像Hadoop那樣就是唯一的Data Shuffle一種模式。用戶可以命名,物化,控制中間結果的分區等。可以說編程模型比Hadoop更靈活.
2、Spark在容錯性方面是否比其他工具更有優越性?
從Spark的論文《Resilient Distributed Datasets: AFault-TolerantAbstraction for In-Memory Cluster Computing》中沒看出容錯性做的有多好。倒是提到了分布式數據集計算,做checkpoint的兩種方式,一個是checkpoint data,一個是loggingthe updates。貌似Spark採用了後者。但是文中後來又提到,雖然後者看似節省存儲空間。但是由於數據處理模型是類似DAG的操作過程,由於圖中的某個節點出錯,由於lineage chains的依賴復雜性,可能會引起全部計算節點的重新計算,這樣成本也不低。他們後來說,是存數據,還是存更新日誌,做checkpoint還是由用戶說了算吧。相當於什麼都沒說,又把這個皮球踢給了用戶。所以我看就是由用戶根據業務類型,衡量是存儲數據IO和磁碟空間的代價和重新計算的代價,選擇代價較小的一種策略。取代給中間結果進行持久化或建立檢查點,Spark會記住產生某些數據集的操作序列。因此,當一個節點出現故障時,Spark會根據存儲信息重新構造數據集。他們認為這樣也不錯,因為其他節點將會幫助重建。
3、Spark對於數據處理能力和效率有哪些特色?
Spark提供了高的性能和大數據處理能力,使得用戶可以快速得到反饋體驗更好。另一類應用是做數據挖掘,因為Spark充分利用內存進行緩存,利用DAG消除不必要的步驟,所以比較合適做迭代式的運算。而有相當一部分機器學習演算法是通過多次迭代收斂的演算法,所以適合用Spark來實現。我們把一些常用的演算法並行化用Spark實現,可以從R語言中方便地調用,降低了用戶進行數據挖掘的學習成本。
Spark配有一個流數據處理模型,與Twitter的 Storm框架相比,Spark採用了一種有趣而且獨特的辦法。Storm基本上是像是放入獨立事務的管道,在其中事務會得到分布式的處理。相反,Spark採用一個模型收集事務,然後在短時間內(我們假設是5秒)以批處理的方式處理事件。所收集的數據成為他們自己的RDD,然後使用Spark應用程序中常用的一組進行處理。作者聲稱這種模式是在緩慢節點和故障情況下會更加穩健,而且5秒的時間間隔通常對於大多數應用已經足夠快了。這種方法也很好地統一了流式處理與非流式處理部分。
總結
這幾天在看Hadoop權威指南、hbase權威指南、hive權威指南、大規模分布式存儲系統、zoopkeeper、大數據互聯網大規模數據挖掘與分布式處理等書同時補充,能靜下心來好好的完整的看完一本書,是相當不錯的。
D. 求助:誰能提供 《hadoop權威指南》 氣象數據集下載鏈接
ClouderaHadoop4系列實戰課程需要的話可以去我的網盤下載
E. 學習hadoop 需要java嗎
java的水平好些,學來習hadoop更方便些,畢自竟hadoop是java開發的
但是不會也沒多少關系,不會java就學啊,java的語法還是比較簡單
對java語法熟悉些看懂hadoop就問題不大
如果是掌握hadoop的使用,java基礎好就可以了,看看hadoop權威指南。想深入學習源碼的話,就需要些網路編程的知識了。
不過個人覺得hadoop最終是用於數據分析的,所以數據挖掘,機器學習這樣的演算法反而比掌握hadoop本身更重要一些,重點看用hadoop來做什麼。
我也是初學,只是一點體會,希望能幫到你。