零基礎學習hadoop到上手工作線路指導(編程篇)


問題導讀:
1.hadoop編程需要哪些基礎?
2.hadoop編程需要注意哪些問題?
3.如何創建mapreduce程序及其包含幾部分?
4.如何遠程連接eclipse,可能會遇到什麼問題?
5.如何編譯hadoop源碼?





 

閱讀此篇文章,需要些基礎下面兩篇文章
零基礎學習hadoop到上手工作線路指導(初級篇)
http://www.aboutyun.com/thread-6780-1-1.html
零基礎學習hadoop到上手工作線路指導(中級篇)
http://www.aboutyun.com/thread-7567-1-1.html
如果看過的話,看這篇不成問題,此篇講hadoop編程篇。

hadoop編程,hadoop是一個Java框架,同時也是編程的一次革命,使得傳統開發運行程序由單臺客戶端(單臺電腦)轉換爲可以由多個客戶端運行(多臺機器)運行,使得任務得以分解,這大大提高了效率。

hadoop既然是一個Java框架,因爲我們必須要懂Java,網上有大量的資料,所以學習Java不是件難事。但是學到什麼程度,可能是我們零基礎同學所關心的。
語言很多情況下都是相通的,如果你是學生,還處於打基礎的階段,那麼難度對於你來說還是不小的。

1.初學者要求必須有理論基礎,並且能夠完成一個小項目,最起碼能夠完成幾個小例子,例如圖書館裏等。
初學者基本的要求:
(1)懂什麼是對象、接口、繼續、多態
(2)必須熟悉Java語法
(3)掌握一定的常用包
(4)會使用maven下載代碼
(5)會使用eclipse,包括裏面的快捷鍵,如何打開項目


傳統程序員,因爲具有豐富的編程經驗,因此只要能夠掌握開發工具:
(1)會使用maven下載代碼
(2)會使用eclipse,包括裏面的快捷鍵,如何打開項目
(3)簡單熟悉Java語法

上面的只是基礎,如果想開發hadoop,還需要懂得下面內容
(1)會編譯hadoop
(2)會使用hadoop-eclipse-plugin插件,遠程連接集羣
(3)會運行hadoop程序。

上面列出大概的內容,下面我們具體說一些需要學習的內容。



無論是傳統開發人員還是學生,零基礎下面都是需要掌握的:


我們就需要進入開發了。開發零基礎,該如何,咱們提供了相關的內容分別介紹下面文章
學習hadoop----java零基礎學習線路指導視頻(1)
http://www.aboutyun.com/thread-6920-1-1.html
這一篇我們使用什麼開發工具,甚至考慮使用什麼操作系統。然後就是Java基礎知識篇,包括變量、函數等。

學習hadoop---Java初級快讀入門指導(2)
http://www.aboutyun.com/thread-6921-1-1.html
第一篇是屬於思想篇,那麼這一篇屬於實戰篇,通過不同的方式,交給你怎麼編寫第一個小程序。

Java零基礎:一步步教你如何使用eclipse創建項目及編寫小程序實例
http://www.aboutyun.com/thread-6963-1-1.html
由於上面沒有真正抽象出eclipse的使用,所以這裏專門介紹了使用eclipse如何創建項目,及如何編寫小程序實例


java基礎:eclipse編程不得不知道的技巧
http://www.aboutyun.com/thread-6964-1-1.html
eclipse基本知識會了之後,我們在項目,這些技巧相當有用,而且經常用到


一、考慮開發環境
上面是我們打基礎,有了這些基礎,我們就開始學習開發hadoop了,但是我們該怎麼搭建環境,我們知道Windows有32、64位之分,jdk也有,那麼該如何解決,我們在window32位上需要使用32位jdk,64位則使用64位jdk,同樣如果Linux則使用Linux32位於64位。
更詳細,可以參考
零基礎利用Java開發hadoop需要考慮的問題
http://www.aboutyun.com/thread-6824-1-1.html

二、使用J2SE、J2EE
使用Java我們需要整體瞭解Java語言,Java包含下面三種
  • J2EE java企業版,主要用於web開發
  • J2SE java 標準版,主要用於WEB開發,但是缺少企業版的一些特性,一般情況下java下的應用都是指J2SE的開發。
  • J2ME java 微小版,主要用於手機等的開發
因此如果我們想處理、並展示數據,可以使用J2EE,更詳細參考
hadoop開發--Java零基礎之J2EE、J2SE、J2ME的區別
http://www.aboutyun.com/thread-6904-1-1.html
三、對Java有了一定的認識,我們開始使用Java
1.環境變量配置
對於慣用集成環境的開發者來講,這有點不適應,比如.net,安裝開發環境vs,直接開發就好了,爲啥還需要配置環境變量。
環境變量可以讓我們找到jdk的命令,這個或許.net的一點好處,就是都封裝起來了。別的不用關心了。對於環境變量,我們
需要配置java_home,path路徑,更詳細參考:
hadoop開發--Java零基礎之開發工具環境變量配置


2.開發工具選擇
開發工具有很多種,不同的人習慣不同,開發工具也不一樣,這裏列出個人認爲比較常用
1.eclipse
2.MyEclipse
3.maven
更多工具參考hadoop開發—Java零基礎,開發選擇什麼開發工具比較合適
http://www.aboutyun.com/thread-6892-1-1.html

而其中maven可以和eclipse一起使用,也可以單獨使用,後面開發中它還是比較常用的,比如我們下載hadoop源碼,編譯hadoop,都是需要maven來完成的。
maven的學習可以參考
源碼編譯maven系列視頻教程彙總
http://www.aboutyun.com/thread-7972-1-1.html

3.Java編譯
Java可以一處編譯處處運行,原因是因爲jvm。編譯後的效果,可以查看:
Java零基礎,學習hadoop:爲什麼要編譯Java源代碼,編譯後會有什麼效果
http://www.aboutyun.com/thread-7620-1-1.html
4.如何打開Java項目
Java項目的開發,還是比較特別的,是通過導入的方式,摺合其它比如.net項目,直接點擊圖標就能打開,Java項目,例如通過eclipse的import導入,詳細參考下面帖子:
零基礎教你如何導入Java項目到eclipse中
http://www.aboutyun.com/thread-8213-1-1.html
5.Java資源下載:

上面補充了一些基本的知識,可能還不夠全面,如果缺少這方面的知識,有兩種辦法:
1.百度,查看視頻,缺什麼看什麼視頻
2.如果想自己什麼時候,都能看,可以下載下面的資源
javaWeb圖書館管理系統源碼mysql版本
http://www.aboutyun.com/thread-7269-1-1.html
Java使用hadoop開發基礎:Javaweb視頻共享
http://www.aboutyun.com/thread-7117-1-1.html
幾百GJava文件共享
http://www.aboutyun.com/thread-7955-1-1.html
java百G內容下載:包含自學,入門,高級應用,案例等
http://www.aboutyun.com/thread-6195-1-1.html




Java基礎完畢,我們終於可以開發了,其實開發也並不怎麼困難,經常遇到的問題如下:
1.使用插件連接不上集羣
windows下連接集有兩個原因
1.用戶名不一致
解決辦法:
1、如果是測試環境,可以取消hadoop hdfs的用戶權限檢查。打開conf/hdfs-site.xml,找到dfs.permissions屬性修改爲false(默認爲true)OK了。(1.2.1 版本只有這個方法可行),如何操作可以參考第一個問題。
 

2、修改hadoop location參數,在advanced parameter選項卡中,找到hadoop.job.ugi項,將此項改爲啓動hadoop的用戶名即可
3 修改window 機器的用戶名爲 hadoop 用戶名。


2.運行mapreduce程序的時候,會檢查權限
根據hadoop開發方式總結及操作指導
http://www.aboutyun.com/thread-6950-1-1.html
我們知道hadoop開發可以使用插件,也可以不使用插件,如果不使用插件開發可能會遇到下面問題


解決辦法修改下權限就好了
windows eclipse運行mapreduce遇到權限問題該如何解決
http://www.aboutyun.com/thread-7660-1-1.html

3.缺少hadoop.dll,以及winutils.exe
(1)缺少winutils.exe回報如下錯誤:
Could not locate executable null \bin\winutils.exe in the hadoop binaries
 


windows通過hadoop-eclipse-plugin插件遠程開發hadoop運行mapreduce遇到問題及解決
http://www.aboutyun.com/thread-8311-1-1.html
(2)缺少hadoop.dll
錯誤如下:
Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
解決辦法:
1.首先將hadoop.dll放到hadoop的bin目錄下,如下圖所示
 


2.配置hadoop home及path

path,這裏使用的是絕對路徑,path裏面配置的是hadoop的bin路徑。配置完畢,切忌重啓機器
如下圖所示

 




包及插件的下載,可以在這裏面找
hadoop家族、strom、spark、Linux、flume等jar包、安裝包彙總下載(持續更新)
http://www.aboutyun.com/thread-8178-1-1.html
上面總結了我們開發環境中經常遇到的問題,上面問題打了預防針,我們後面在連接的時候,就會順利多了。






開發hadoop,可以在Linux下,也可以在window下面
這裏主要講的是window下面:


該如何遠程連接hadoop集羣
對於不同版本不同的配置,遠程連接的配置有所不同,特別是端口的配置,但是總體的步驟是差不多的,下面分別是hadoop1.X與hadoop2.X

1.插件遠程連接
hadoop1.X 
hadoop開發方式之一:利用插件開發指導
http://www.aboutyun.com/thread-6947-1-1.html
hadoop2.X
新手指導:Windows上使用Eclipse遠程連接Hadoop進行程序開發
http://www.aboutyun.com/thread-6001-1-1.html
hadoop2.2 eclipse鏈接hdfs(hadoop)
http://www.aboutyun.com/thread-8190-1-1.html
配置Hadoop 2.x開發環境(Eclipse)
http://www.aboutyun.com/thread-7538-1-1.html
2.遠程連接問題
連接中存在問題上面總結了一部分,比如插件、缺.dll、版本等問題

Win7中使用Eclipse連接虛擬機中的Ubuntu中的Hadoop2.4經驗總結
http://www.aboutyun.com/thread-7784-1-1.html
windows 7 使用 eclipse 下hadoop應用開發環境搭建及問題總結
http://www.aboutyun.com/thread-8179-1-1.html
3.運行mapreduce
已經連接上集羣,我們開始運行可以編程了,這裏面我們可以操作hdfs,如下例:
hadoop實戰:Java對hdfs的編程
http://www.aboutyun.com/thread-6500-1-1.html
Java創建hdfs文件實例
http://www.aboutyun.com/thread-6779-1-1.html
Java操作HDFS錯誤總結
http://www.aboutyun.com/thread-6261-1-1.html
當然操作hdfs,會遇到權限問題,修改hdfs-site.xml即可,我們不在重複。
除了操作hdfs上傳下載文件等操作,我們還需要完成一定的功能,比如wordcount等簡單功能。這裏面編程完成三方面內容:
1.map函數,起到分割的作用
2.reduce函數,處理然後彙總
3.main()驅動。
4.如何帶參數還需要繼續Tool接口,帶參數詳細參考
如何編寫運行帶參數輸入輸出路徑hadoop程序


(1)創建mapreduce
運行mapreduce參數參考下面:
我們首先可以完成一定的功能,功能的實現,可以參考
MapReduce初級案例(1):使用MapReduce去重
http://www.aboutyun.com/thread-7041-1-1.html
MapReduce初級案例(2):使用MapReduce數據排序
http://www.aboutyun.com/thread-7046-1-1.html
MapReduce初級案例(3):使用MapReduce實現平均成績
http://www.aboutyun.com/thread-7048-1-1.html
通過上面的實現,這裏有一個例子,可以放到項目中,直接運行,當然你需要創建數據文件,及根據自己的實際情況修改uri,也就是hdfs://。。。需要修改成自己的內容。
新手指導,該如何在開發環境中,創建mapreduce程序
http://www.aboutyun.com/thread-7945-1-1.html

如果我們對mapreduce有一個深度的瞭解,我們可以把大部分程序轉換爲mapreduce來實現,詳細參考如何讓傳統程序轉換成mapreduce
http://www.aboutyun.com/thread-8314-1-1.html

hadoop編程需要注意的問題雖然hadoop是Java語言編寫的,但是其有自己的數據類型,及並且可能會遇到編碼問題,同時由於mapreduce的分區,採用的是hash算髮,下面的內容,可以瞭解一下
hadoop編程基礎:數據類型介紹及與Java數據類型之間轉換
http://www.aboutyun.com/thread-7036-1-1.html
eclipse 調試hadoop需要注意編碼問題
http://www.aboutyun.com/thread-6910-1-1.html
hadoop基礎:Java中的Hash值介紹
http://www.aboutyun.com/thread-7560-1-1.html
(2)運行mapreduce 
創建完畢,我們有兩種方式運行mapreduce,一種打包到集羣運行,一種在eclipse中運行。
hadoop集羣,如何運行Java jar包---如何運行mapreduce程序
http://www.aboutyun.com/thread-7408-1-1.html

打包集羣運行:參考下面內容
java零基礎:將java源碼打成jar包各種方法介紹
http://www.aboutyun.com/thread-7058-1-1.html
hadoop編程:解決eclipse能運行,打包放到集羣上ClassNotFoundException:經驗總結
http://www.aboutyun.com/thread-7086-1-1.html

(3)運行中會遇到的問題
在開頭已經說了一些經典的問題,這裏在列出一些相關帖子。
1.eclipse中開發Hadoop2.x的Map/Reduce項目彙總
http://www.aboutyun.com/thread-7541-1-1.html
闡述了下面問題:
1.如何創建MR程序?
2.如何配置運行參數?
3.HADOOP_HOME爲空會出現什麼問題?
4.hadoop-common-2.2.0-bin-master/bin的作用是什麼?
擴展:
4.winutils.exe是什麼?


2.Win7 Eclipse調試Centos Hadoop2.2-Mapreduce出現問題解決方案
http://www.aboutyun.com/thread-8030-1-1.html
闡述下面問題:
1.建一個MapReduce Project,運行時發現出問題:Could not locate executable null,該如何解決?
2.Could not locate executabl   ....\hadoop-2.2.0\hadoop-2.2.0\bin\winutils.exe in the Hadoop binaries.該如何解決?

3.win7下使用hadoop-eclipse-plugin插件開發添加了hadoop.dll不生效
http://www.aboutyun.com/thread-8322-1-1.html
4.通過eclipse中的Java API上傳至集羣爲什麼replication默認3份,該如何設置
http://www.aboutyun.com/thread-7085-1-1.html
5.eclipse運行出現 Call From to master:8020 failed on connection exception:
http://www.aboutyun.com/thread-8321-1-1.html
6.hadoop eclipse插件出現問題
http://www.aboutyun.com/thread-8269-1-1.html
7.Linux下面eclipse連接報錯,請教大神
http://www.aboutyun.com/thread-5104-1-1.html
(4)mapreduce調試:
調試的方法有多種,這裏說一種最簡單、原始的一種。
記得Javascript剛開始之初是不能調試的,於是我們就採用alert的方法,看看結果是不是我們想要的,這裏我們調試mapreduce採用的是類似的方法。我們通過Counter countPrint1 = context.getCounter("Map中循環strScore", “輸出信息”);來輸出調試信息,getCounter可以把程序裏面的變量輸出到Java控制檯,這樣就達到了調試效果。
詳細參考:
Hadoop中調試(mapreduce)map與redcue信息的輸出辦法
http://www.aboutyun.com/thread-7682-1-1.html
當然還有其他調試方法,可以參考下面
Win7 Eclipse調試Centos Hadoop2.2-Mapreduce出現問題解決方案
http://www.aboutyun.com/thread-8030-1-1.html
調試Hadoop源代碼:eclipse調試及日誌打印
http://www.aboutyun.com/thread-8021-1-1.html

4.獲取源碼、閱讀源碼

獲取源碼可以通過git,maven等方式。

(1)maven
maven可以單獨使用,也可以作爲插件放在eclipse中,由於hadoop src採用的是maven的方式,所以我們需要學習和使用maven。
eclipse maven plugin 插件安裝和配置及maven實戰書籍下載
http://www.aboutyun.com/thread-8014-1-1.html

源碼編譯maven系列視頻教程彙總
http://www.aboutyun.com/thread-7972-1-1.html
如果看了上面的內容,那麼我們對maven已經算是很熟悉了,可以通過maven獲取hadoop源碼了,在獲取的源碼的時候,最起碼要保持網絡暢通,如何獲取,以及查看hadoop源碼,查看的時候,我們還需要關聯一些包,否則會出現下面情況,source not found。


更多內容,詳細可參考:

從零教你如何獲取hadoop2.4源碼並使用eclipse關聯hadoop2.4源碼
http://www.aboutyun.com/thread-8211-1-1.html

Eclipse查看hadoop源代碼出現Source not found,是因爲沒有添加.zip
http://www.aboutyun.com/thread-7047-1-1.html


在eclipse中編輯hadoop2.2.0源代碼指導
http://www.aboutyun.com/thread-7283-1-1.html
源碼獲取了,我們該如何查看閱讀源碼,如何通過eclipse查看類的定義,函數的實現,通過下面帖子即可達到我們的目的。
如何通過eclipse查看、閱讀hadoop2.4源碼
http://www.aboutyun.com/thread-8225-1-1.html

(2)其它獲取源碼工具git、svn

源碼管理、獲取網絡源碼工具:TortoiseSVN使用手冊
http://www.aboutyun.com/thread-7982-1-1.html
Eclipse上GIT插件EGIT使用手冊
http://www.aboutyun.com/thread-8034-1-1.html

5.編譯hadoop源碼


源碼編譯,剛開始還是比較複雜的,需要安裝不少的軟件包括maven、protobuf、CMake、ant等工具的安裝,編譯完畢之後,我們就可以安裝了。更詳細,可以查看下面內容
從零教你在Linux環境下(ubuntu)如何編譯hadoop2.4
http://www.aboutyun.com/thread-8130-1-1.html
Hadoop 源代碼 eclipse 編譯教程
http://www.aboutyun.com/thread-5653-1-1.html
對於編譯的.class文件,如果想查看源碼,可以通過反編譯工具實現
java的class文件反編譯和Eclipse、MyEclipse反編譯插件安裝、使用
http://www.aboutyun.com/thread-7053-1-1.html

6.插件製作

eclipse開發,有的同學,感興趣,想製作插件,可以查看下面內容


Hadoop2.4.0 Eclipse插件製作
http://www.aboutyun.com/thread-8117-1-1.html
Hadoop2.4.0 Eclipse插件製作及問題記錄
http://www.aboutyun.com/thread-7780-1-1.html
Hadoop 2.2.0編譯hadoop-eclipse-plugin插件
http://www.aboutyun.com/thread-7516-1-1.html


7.資源:
由於一些同學經常找不到安裝包、插件等,這裏彙總一些資源:

hadoop家族、strom、spark、Linux、flume等jar包、安裝包彙總下載(持續更新)
http://www.aboutyun.com/thread-8178-1-1.html

hadoop2.4彙總:hadoop2.4插件下載、完全分佈式、僞分佈、eclipse插件開發大全
http://www.aboutyun.com/thread-7795-1-1.html
hadoop-eclipse-plugin-2.2.0.jar插件包分享
http://www.aboutyun.com/thread-6342-1-1.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章