Ⅰ 如何學習hadoop源碼
首先,不得不說,hadoop發展到現在這個階段,代碼已經變得非常龐大臃腫,如果你直接閱讀最新版本的源代碼,難度比較大,需要足夠的耐心和時間,所以,如果你覺得認真一次,認真閱讀一次hadoop源代碼,一定要有足夠的心理准備和時間預期。
其次,需要注意,閱讀Hadoop源代碼的效率,因人而異,如果你有足夠的分布式系統知識儲備,看過類似的系統,則能夠很快地讀它的源代碼進行通讀,並快速切入你最關注的局部細節
Ⅱ 如何在eclipse中查看hadoop的.java源代碼
首先,你得有hadoop的源代碼
然後,導入
mirrors. cnnic.cn/apache/hadoop/common/stable2/ 下載
hadoop-2.2.0-src.tar.gz
Ⅲ 怎麼看hadoop源碼
我是新手,剛剛開始學hadoop,幫不了你的忙,不過你可以去http://forum.hadoop.tw/這個論壇問問,台灣的論壇,基本上當天晚上版主就會回答你的問題,而且特別詳細,特別好的論壇,我安裝hadoop時出現的問題都是在那解決的,呵呵
Ⅳ Hadoop源碼分析如何下手
在Eclipse中新建一個java項目,將src下的文件復制到項目的src下,然後導入lib下的jar文件,即可查看源碼了。網上有教程
Ⅳ hadoop源碼是c語言寫的嗎
//******友情提示:如想速度快點,請改小_sleep(500)函數中參數***** #include #include #include #include #include const int H = 8; //地圖的高 const int L = 16; //地圖的長 char GameMap[H][L]; //游戲地圖 int key; //按鍵保存 int sum = 1, over = 0; //蛇的長度, 游戲結束(自吃或碰牆) int dx[4] = {0, 0, -1, 1}; //左、右、上、下的方向 int dy[4] = {-1, 1, 0, 0}; struct Snake //蛇的每個節點的數據類型 { int x, y; //左邊位置 int now; //保存當前節點的方向, 0,1,2,3分別為左右上下 }Snake[H*L]; const char Shead = '@'; //蛇頭 const char Sbody = '#'; //蛇身 const char Sfood = '*'; //食物 const char Snode = '.'; //'.'在地圖上標示為空 void Initial(); //地圖的初始化 void Create_Food(); //在地圖上隨機產生食物 void Show(); //刷新顯示地圖 void Button(); //取出按鍵,並判斷方向 void Move(); //蛇的移動 void Check_Border(); //檢查蛇頭是否越界 void Check_Head(int x, int y); //檢查蛇頭移動後的位置情況 int main() { Initial(); Show(); return 0; } void Initial() //地圖的初始化 { int i, j; int hx, hy; system("title 貪吃蛇"); //控制台的標題 memset(GameMap, '.', sizeof(GameMap)); //初始化地圖全部為空'.' system("cls"); srand(time(0)); //隨機種子 hx = rand()%H; //產生蛇頭 hy = rand()%L; GameMap[hx][hy] = Shead; Snake[0].x = hx; Snake[0].y = hy; Snake[0].now = -1; Create_Food(); //隨機產生食物 for(i = 0; i _= H || Snake[0].y = L) over = 1; } void Check_Head(int x, int y) //檢查蛇頭移動後的位置情況 { if(GameMap[ Snake[0].x ][ Snake[0].y ] == '.') //為空 GameMap[ Snake[0].x ][ Snake[0].y ] = '@'; else if(GameMap[ Snake[0].x ][ Snake[0].y ] == '*') //為食物 { GameMap[ Snake[0].x ][ Snake[0].y ] = '@'; Snake[sum].x = x; //新增加的蛇身為蛇頭後面的那個 Snake[sum].y = y; Snake[sum].now = Snake[0].now; GameMap[ Snake[sum].x ][ Snake[sum].y ] = '#'; sum++; Create_Food(); //食物吃完了馬上再產生一個食物 } else over = 1; }
Ⅵ hadoop 源代碼 從哪裡可以找到啊怎麼下載,說詳細一點謝謝
你可以用SVN軟體在這里同步到最新的代碼:
http://svn.apache.org/repos/asf/hadoop
其實你同步你研究領域的分支就可以了,全同步實在太大了。
SVN軟體可以用Tortoise SVN,使用方法一下就可以了。
當然也可以到cloudera或Yahoo!的hadoop官網的download鏈接去下載。
Ⅶ hadoop的源代碼怎麼下載應該下載哪一個文件不知道選擇那個
根據你的系統和需求來下載
如果你的OS是Fedora ,是64位機的話,可以選擇下載後綴是amd64.rpm包,使用rpm命令安裝。
如果你的OS是Fedora ,是32位機的話,可以選擇下載後綴是i386.rpm包,使用rpm命令安裝。
如果你的OS是Debian或Ubuntu, 是64位機的話,可以下載amd64.deb包。
如果你的OS是Debian或Ubuntu, 是32位機的話,可以下載i386.deb包。
如果不確定的話,那麼下載tar.gz包,解壓縮到你想安裝的目錄(/usr/local/)即可,然後做環境配置。
Ⅷ CDH版的hadoop有沒有源碼提供
首先,不得不說,hadoop發展到現在這個階段,代碼已經變得非常龐大臃腫,如果你直接閱讀最新版本的源代碼,難度比較大,需要足夠的耐心和時間,所以,如果你覺得認真一次,認真閱讀一次hadoop源代碼,一定要有足夠的心理准備和時間預期。 其次,需要注意,閱讀Hadoop源代碼的效率,因人而異,如果你有足夠的分布式系統知識儲備,看過類似的系統,則能夠很快地讀它的源代碼進行通讀,並快速切入你最關注的局部細節,比如你之前看過某個分布式資料庫的源代碼,對分布式系統的網路通信模塊,調度模塊等有一定了解,這對閱讀hadoop源代碼有極大幫助;如果你是一個初學者,對hadoop一無所知,只了解一些java語法,那閱讀hadoop源代碼是極具挑戰的一件事情,尤其是從無到開始入門的過程,是極度煎熬和困惑的,這時候需要你在閱讀代碼過程中,不斷補充缺乏的相關知識(比如RPC,NIO,設計模式等),循序漸進,直到入門。 接下來進入主題,說一下閱讀源代碼的個人經驗。由於我也是從無到入門,再到修改源代碼,逐步過渡的,所以,對於很多人而言,具有借鑒意義。 ============ 第一個階段:學習hadoop基本使用和基本原理,從應用角度對hadoop進行了解和學習 這是第一個階段,你開始嘗試使用hadoop,從應用層面,對hadoop有一定了解,比如你可以使用hadoop shell對hdfs進行操作,使用hdfs API編寫一些程序上傳,下載文件;使用MapRece API編寫一個數據處理程序。一旦你對hadoop的基本使用方法比較熟悉了,接下來可以嘗試了解它的內部原理,注意,不需要通過閱讀源代碼了解內部原理,只需看一些博客,書籍,比如《Hadoop權威指南》,對於HDFS而言,你應該知道它的基本架構以及各個模塊的功能;對於MapRece而言,你應該知道其具體的工作流程,知道partition,shuffle,sort等工作原理,可以自己在紙上完整個畫完maprece的流程,越詳細越好。 在這個階段,建議你多看一些知名博客,多讀讀《hadoop權威指南》(可選擇性看相關的幾章)。如果你有實際項目驅動,那是再好不過了,理論聯系實際是最好的hadoop學習方法;如果你沒有項目驅動,那建議你不要自己一個人悶頭學,多跟別人交流,多主動給別人講講,最好的學習方式還是「講給別人聽」。 ============ 第二個階段:從無到入門,開始閱讀hadoop源代碼 這個階段是最困苦和漫長的,尤其對於那些沒有任何分布式經驗的人。 很多人這個階段沒有走完,就放棄了,最後停留在hadoop應用層面。 這個階段,第一件要做的事情是,選擇一個hadoop組件。如果你對分布式存儲感興趣,那麼你可以選擇HDFS,如果你讀分布式計算感興趣,你可以選擇MapRece,如果你對資源管理系統感興趣,你可以選擇YARN。 選擇好系統後,接下來的經歷是最困苦的。當你把hadoop源代碼導入eclipse或intellij idea,沏上一杯茶,開始准備優哉游哉地看hadoop源代碼時,你懵逼了:你展開那數不盡的package和class,覺得無從下手,好不容易找到了入口點,然後你屁顛屁顛地通過eclipse的查找引用功能,順著類的調用關系一層層找下去,最後迷失在了代碼的海洋中,如同你在不盡的壓棧,最後棧溢出了,你忘記在最初的位置。很多人經歷過上面的過程,最後沒有順利逃出來,而放棄。 如果你正在經歷這個過程,我的經驗如下:首先,你要摸清hadoop的代碼模塊,知道client,master,slave各自對應的模塊(hadoop中核心系統都是master/slave架構,非常類似),並在閱讀源代碼過程中,時刻謹記你當前閱讀的代碼屬於哪一個模塊,會在哪個組件中執行;之後你需要摸清各個組件的交互協議,也就是分布式中的RPC,這是hadoop自己實現的,你需要對hadoop RPC的使用方式有所了解,然後看各模塊間的RPC protocol,到此,你把握了系統的骨架,這是接下來閱讀源代碼的基礎;接著,你要選擇一個模塊開始閱讀,我一般會選擇Client,這個模塊相對簡單些,會給自己增加信心,為了在閱讀代碼過程中,不至於迷失自己,建議在紙上畫出類的調用關系,邊看邊畫,我記得我閱讀hadoop源代碼時,花了一疊紙。注意,看源代碼過程中,很容易煩躁不安,建議經常起來走走,不要把自己逼得太緊。 在這個階段,建議大家多看一些源代碼分析博客和書籍,比如《Hadoop技術內幕》系列叢書(軒相關網站:Hadoop技術內幕)就是最好的參考資料。藉助這些博客和書籍,你可以在前人的幫助下,更快地學習hadoop源代碼,節省大量時間,注意,目前博客和書籍很多,建議大家廣泛收集資料,找出最適合自己的參考資料。 這個階段最終達到的目的,是對hadoop源代碼整體架構和局部的很多細節,有了一定的了解。比如你知道MapRece Scheler是怎樣實現的,MapRece shuffle過程中,map端做了哪些事情,rece端做了哪些事情,是如何實現的,等等。這個階段完成後,當你遇到問題或者困惑點時,可以迅速地在Hadoop源代碼中定位相關的類和具體的函數,通過閱讀源代碼解決問題,這時候,hadoop源代碼變成了你解決問題的參考書
Ⅸ hadoop hdfs 源碼怎麼看
在使用Hadoop的過程中,很容易通過FileSystem類的API來讀取HDFS中的文件內容,讀取內容的過程是怎樣的呢?今天來分析客戶端讀取HDFS文件的過程,下面的一個小程序完成的功能是讀取HDFS中某個目錄下的文件內容,然後輸出到控制台,代碼如下:
[java] view plain
public class LoadDataFromHDFS {
public static void main(String[] args) throws IOException {
new LoadDataFromHDFS().loadFromHdfs("hdfs://localhost:9000/user/wordcount/");
}
public void loadFromHdfs(String hdfsPath) throws IOException {
Configuration conf = new Configuration();
Path hdfs = new Path(hdfsPath);
FileSystem in = FileSystem.get(conf);
//in = FileSystem.get(URI.create(hdfsPath), conf);//這兩行都會創建一個DistributedFileSystem對象
FileStatus[] status = in.listStatus(hdfs);
for(int i = 0; i < status.length; i++) {
byte[] buff = new byte[1024];
FSDataInputStream inputStream = in.open(status[i].getPath());
while(inputStream.read(buff) > 0) {
System.out.print(new String(buff));
}
inputStream.close();
}
}
}
FileSystem in = FileSystem.get(conf)這行代碼創建一個DistributedFileSystem,如果直接傳入一個Configuration類型的參數,那麼默認會讀取屬性fs.default.name的值,根據這個屬性的值創建對應的FileSystem子類對象,如果沒有配置fs.default.name屬性的值,那麼默認創建一個org.apache.hadoop.fs.LocalFileSystem類型的對象。但是這里是要讀取HDFS中的文件,所以在core-site.xml文件中配置fs.default.name屬性的值為hdfs://localhost:9000,這樣FileSystem.get(conf)返回的才是一個DistributedFileSystem類的對象。 還有一種創建DistributedFileSystem這種指定文件系統類型對像的方法是使用FileSystem.get(Configuration conf)的一個重載方法FileSystem.get(URI uri, Configuration),其實調用第一個方法時在FileSystem類中先讀取conf中的屬性fs.default.name的值,再調用的FileSystem.get(URI uri, Configuration)方法。
Ⅹ 如何閱讀hadoop namenode源碼
1.導入查看hadoop源碼 (1)選擇Existing Projects into Workspace (2)選擇源碼路徑 (3)查看源碼 這樣我們就完成了全部的內容。 2.閱讀hadoop源碼 其中比較常用的 Open Call Hierarchy: 用Open Call Hierarchy可以查看方法的調用層次。