在本系列文章的第一篇:用 Hadoop 進(jìn)行分布式并行編程,第 1 部分: 基本概念與安裝部署中,介紹了 MapReduce 計(jì)算模型,分布式文件系統(tǒng) HDFS,分布式并行計(jì)算等的基本原理, 并且詳細(xì)介紹了如何安裝 Hadoop,如何在單機(jī)及偽分布式環(huán)境 (在一臺(tái)單機(jī)中用多進(jìn)程模擬) 運(yùn)行基于 Hadoop 的并行程序。在本系列文章的第二篇:用 Hadoop 進(jìn)行分布式并行編程,第 2 部分:程序?qū)嵗c分析中, 介紹了如何針對(duì)一個(gè)具體的計(jì)算任務(wù),基于 Hadoop 編寫 MapReduce 并行程序。 本文將介紹真實(shí)的 Hadoop 分布式運(yùn)行環(huán)境, 包括如何在多臺(tái)普通的計(jì)算機(jī)上部署分布式運(yùn)行環(huán)境,如何將 MapReduce 程序遠(yuǎn)程部署并運(yùn)行在這個(gè)分布式環(huán)境上,并簡略介紹了”云計(jì)算平臺(tái)” 以及計(jì)算能力按需租用服務(wù)。
使用三臺(tái)機(jī)器,機(jī)器名分別為 homer06, homer07, homer08,均安裝 Redhat Enterprise Linux 5.0 (其它 Linux 發(fā)行版亦可), 確保各臺(tái)機(jī)器之間網(wǎng)絡(luò)暢通,機(jī)器名與 IP 地址之間解析正確,從任一臺(tái)機(jī)器都可以 ping 通其它機(jī)器的機(jī)器名。如有機(jī)器名的解析問題,可通過設(shè)置 /etc/hosts 文件解決,當(dāng)然更好的解決方法是在你的網(wǎng)絡(luò)中配置 DNS 服務(wù)器。此外,需要在三臺(tái)機(jī)器上創(chuàng)建相同的用戶賬號(hào),如 caoyuz, 或直接使用 root 賬號(hào)亦可。
我們將使用 homer06 作為分布式文件系統(tǒng) HDFS 的 Name Node 及 MapReduce 運(yùn)行過程中的 Job Tracker 結(jié)點(diǎn),我們將 homer06 稱之為主結(jié)點(diǎn)。其它兩臺(tái)機(jī)器 (homer07, homer08) 作為 HDFS 的 Data Node 以及 MapReduce 運(yùn)行過程中的 Task Tracker 結(jié)點(diǎn),這些結(jié)點(diǎn)可統(tǒng)稱為從結(jié)點(diǎn)。如你需要部署更多的機(jī)器,也是很容易的,將新加入的機(jī)器作為 Data Node 以及 Task Tracker 結(jié)點(diǎn)即可,其配置過程與本文介紹的三臺(tái)機(jī)器的環(huán)境類似,此不贅述。
在 Hadoop 分布式環(huán)境中,Name Node (主節(jié)點(diǎn)) 需要通過 SSH 來啟動(dòng)和停止 Data Node (從結(jié)點(diǎn))上的各類進(jìn)程。我們需要保證環(huán)境中的各臺(tái)機(jī)器均可以通過 SSH 登錄訪問,并且 Name Node 用 SSH 登錄 Data Node 時(shí),不需要輸入密碼,這樣 Name Node 才能在后臺(tái)自如地控制其它結(jié)點(diǎn)??梢詫⒏髋_(tái)機(jī)器上的 SSH 配置為使用無密碼公鑰認(rèn)證方式來實(shí)現(xiàn)。
現(xiàn)在流行的各類 Linux 發(fā)行版一般都安裝了 SSH 協(xié)議的開源實(shí)現(xiàn) OpenSSH, 并且已經(jīng)啟動(dòng)了 SSH 服務(wù), 即這些機(jī)器缺省應(yīng)該就是支持 SSH 登錄的。如果你的機(jī)器缺省不支持 SSH, 請(qǐng)下載安裝 OpenSSH。
以下是配置 SSH 的無密碼公鑰認(rèn)證的過程。首先,在 homer06 機(jī)器上執(zhí)行命令,如代碼清單 1 所示:
代碼清單1
homer06: $ ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/caoyuz/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/caoyuz/.ssh/id_rsa. Your public key has been saved in /home/caoyuz/.ssh/id_rsa.pub. The key fingerprint is: 2e:57:e2:bf:fd:d4:45:5c:a7:51:3d:f1:51:3c:69:68 root@krusty04 |
這個(gè)命令將為 homer06 上的當(dāng)前用戶 caoyuz 生成其密鑰對(duì),密鑰對(duì)的保存路徑使用缺省的 /home/caoyuz/.ssh/id_rsa, 要求輸入 passphrase 的時(shí)候,直接回車。這樣生成的證書以及公鑰將存儲(chǔ)在 /home/caoyuz/.ssh 目錄,形成兩個(gè)文件 id_rsa,id_rsa.pub。然后將 id_rsa.pub 文件的內(nèi)容復(fù)制到每一臺(tái)機(jī)器(包括本機(jī) homer06)的 /home/caoyuz/.ssh/authorized_keys 文件的尾部,如果機(jī)器上不存在 /home/caoyuz/.ssh/authorized_keys 文件,可以自行創(chuàng)建一個(gè)。請(qǐng)注意 id_rsa.pub 文件的內(nèi)容是長長的一行,復(fù)制時(shí)需注意,不要遺漏字符或混入了多余換行符。
接下來可以做一下 SSH 連接測試,從 homer06 分別向 homer06, homer07, homer08 發(fā)起 SSH 連接請(qǐng)求,確保不需要輸入密碼就能 SSH 連接成功。 注意第一次 SSH 連接時(shí)會(huì)出現(xiàn)如下提示信息:
The authenticity of host [homer06] can't be established. The key fingerprint is: 74:32:91:f2:9c:dc:2e:80:48:73:d4:53:ab:e4:d3:1a Are you sure you want to continue connecting (yes/no)?
請(qǐng)輸入 yes, 這樣 OpenSSH 會(huì)把連接過來的這臺(tái)主機(jī)的信息自動(dòng)加到 /home/caoyuz/.ssh/know_hosts 文件中去,第二次再連接時(shí),就不會(huì)有這樣的提示信息了。
我們首先在主控結(jié)點(diǎn) homer06 上安裝和配置好 Hadoop,安裝過程可以參考本系列文章的第一篇。 假定我們把 Hadoop 安裝在 /home/caoyuz/hadoop-0.16.0目錄中,并且 JRE 1.5 安裝在 /home/caoyuz/jre 目錄下。
在其中設(shè)置 JAVA_HOME 環(huán)境變量:export JAVA_HOME=”/home/caoyuz/jre”
在本系列文章的第一篇中,我們通過修改此文件,配置了 Hadoop 的偽分布式運(yùn)行模式?,F(xiàn)在,我們同樣可以通過配置此文件,配置 Hadoop 的真實(shí)的分布式運(yùn)行環(huán)境。請(qǐng)參照代碼清單 2 修改 conf/hadoop-site.xml:
代碼清單2
<configuration> <property> <name>fs.default.name</name> <value>homer06.austin.ibm.com:9000</value> <description>The name of the default file system. Either the literal string "local" or a host:port for DFS.</description> </property> <property> <name>mapred.job.tracker</name> <value>homer06.austin.ibm.com:9001</value> <description>The host and port that the MapReduce job tracker runs at. If "local", then jobs are run in-process as a single map and reduce task.</description> </property> <name>dfs.name.dir</name> <value>/home/caoyuz/hadoopfs/name</value> <description>Determines where on the local filesystem the DFS name node should store the name table. If this is a comma-delimited list of directories then the name table is replicated in all of the directories, for redundancy. </description> </property> <property> <name>dfs.data.dir</name> <value>/home/caoyuz/hadoopfs/data</value> <description>Determines where on the local filesystem an DFS data node should store its blocks. If this is a comma-delimited list of directories, then data will be stored in all named directories, typically on different devices. Directories that do not exist are ignored.</description> </property> <property> <name>dfs.replication</name> <value>2</value> <description>Default block replication. The actual number of replications can be specified when the file is created. The default is used if replication is not specified in create time.</description> </property> </configuration> |
參數(shù) fs.default.name 指定 Name Node 的 IP 地址和端口號(hào),此處我們將其設(shè)定為 homer06 及 9000 端口,參數(shù) mapred.job.tracker 指定 JobTracker 的 IP 地址和端口號(hào),此處我們將其設(shè)定為 homer06 及 9001 端口。 參數(shù) dfs.name.dir 指定 Name Node 相關(guān)數(shù)據(jù)在本地文件系統(tǒng)上的存放位置, 此處我們將其設(shè)定為 /home/caoyuz/hadoopfs/name ,參數(shù) dfs.data.dir 指定 Data Node 相關(guān)數(shù)據(jù)在本地文件系統(tǒng)上的存放位置,此處我們將其設(shè)定為 /home/caoyuz/hadoopfs/data 。注意, Hadoop 會(huì)自動(dòng)創(chuàng)建這兩個(gè)目錄,無需事先創(chuàng)建。
更多的參數(shù)配置,可以參考 conf/hadoop-default.xml 文件,并在 conf/hadoop-site.xml 文件中設(shè)置。
修改 conf/masters 文件,將其中的 localhost 改為 homer06 ,修改 conf/slaves 文件, 刪掉其中的 localhost, 將我們的另兩臺(tái)機(jī)器 homer07, homer08 加入, 注意每個(gè)機(jī)器一行。
至此, 我們已經(jīng)在 homer06 上安裝和配置好了 hadoop 和 jre, 現(xiàn)在需要將其部署到其它機(jī)器上去,通過 scp 命令即可完成,如代碼清單 3 所示:
代碼清單3
homer06: $ scp -r /home/caoyuz/hadoop-0.16.0 homer07:/home/caoyuz/hadoop-0.16.0 homer06: $ scp -r /home/caoyuz/jre homer07:/home/caoyuz/jre homer06: $ scp -r /home/caoyuz/hadoop-0.16.0 homer08:/home/caoyuz/hadoop-0.16.0 homer06: $ scp -r /home/caoyuz/jre homer08:/home/caoyuz/jre |
其中用 scp 拷貝 jre 目錄到其它機(jī)器上去不是必須的。你只需保證你的所有機(jī)器上均安裝了 JRE1.5 以上版本,并且都是安裝在同一目錄。
6. 在 homer06 上格式化一個(gè)新的分布式文件系統(tǒng)
如代碼清單 4 所示:
代碼清單4
homer06: $ cd /home/caoyuz/hadoop-0.16.0 homer06: $ bin/hadoop namenode -format |
7. 在 homer06 上啟動(dòng) hadoop 進(jìn)程
如代碼清單5所示:
代碼清單5
homer06: $ cd /home/caoyuz/hadoop-0.16.0 homer06: $ bin/start-all.sh |
啟動(dòng)完成之后,運(yùn)行 ps -ef 命令應(yīng)該可以看到 homer06 上啟動(dòng)了 3 個(gè)新的 java 進(jìn)程 (namenode, secondary namenode, jobtracker), 同時(shí),我們可以到 homer07, homer08 兩臺(tái)機(jī)器上用 ps –ef 查看,這兩臺(tái)機(jī)器上應(yīng)該已經(jīng)自動(dòng)啟動(dòng)了 2 個(gè)新的 java 進(jìn)程 (datanode, tasktracker)
至此,整個(gè) Hadoop 分布式環(huán)境已經(jīng)部署完畢,并已啟動(dòng)相關(guān)后臺(tái)進(jìn)程?,F(xiàn)在我們可以嘗試運(yùn)行一下我們在第二篇文章中介紹的 wordcount 程序,如代碼清單 6 所示:
代碼清單 6
homer06: $ mkdir -p /home/test-in # 請(qǐng)先將待測的文件放到本地文件系統(tǒng)的/home/test-in目錄 homer06: $ cd /home/caoyuz/hadoop-0.16.0 homer06: $ bin/hadoop dfs –put /home/test-in input # 將本地文件系統(tǒng)上的 /home/test-in 目錄拷到 HDFS 的根目錄上,目錄名改為 input $ bin/hadoop jar hadoop-0.16.0-examples.jar wordcount input output #查看執(zhí)行結(jié)果: # 將文件從 HDFS 拷到本地文件系統(tǒng)中再查看: $ bin/hadoop dfs -get output output $ cat output/* # 也可以直接查看 $ bin/hadoop dfs -cat output/* |
代碼清單 6 所示的執(zhí)行 wordcount 程序的過程,與我們在第一篇文章中 介紹的在偽分布式運(yùn)行環(huán)境運(yùn)行完全一致,但我們現(xiàn)在擁有了一個(gè)真正的分布式執(zhí)行環(huán)境,我們的數(shù)據(jù)分布存儲(chǔ)于數(shù)據(jù)節(jié)點(diǎn) homer07 及 homer08 上,可以在這兩臺(tái)機(jī)器的 /home/caoyuz/hadoopfs/data 目錄 (這是我們在 conf/hadoop-site.xml 中指定的 dfs.data.dir 參數(shù)) 下看到一些數(shù)據(jù)文件,并且整個(gè) wordcount 的計(jì)算過程神奇地由 homer06, homer07, homer08 三臺(tái)機(jī)器并行協(xié)同完成,我們還可以很方便的增加更多的機(jī)器來參與運(yùn)算。這就是分布式并行程序的優(yōu)勢: 可以很容易地通過加入新的機(jī)器來獲得更多的存儲(chǔ)空間和計(jì)算能力, 部署的機(jī)器越多, 就越能有效地完成海量數(shù)據(jù)的計(jì)算。
五 使用 IBM MapReduce Tools 部署分布式程序
在第二篇文章中,已經(jīng)介紹了 IBM MapReduce Tools 的基本功能和用法。現(xiàn)在我們重點(diǎn)介紹如何使用 IBM MapReduce Tools 將 MapReduce 程序遠(yuǎn)程部署到 Hadoop 分布式環(huán)境中去運(yùn)行。
假定我們還是使用上一節(jié)部署完成的分布式環(huán)境,然后是在另一臺(tái)機(jī)器上使用 Eclipse 開發(fā) MapReduce 程序。
首先請(qǐng)確保你的 Eclipse 已經(jīng)安裝了 IBM MapReduce Tools 這個(gè)插件。啟動(dòng) Eclipse, 選擇 Window -> Open Perspective ->other, 再從彈出框中選擇 MapReduce, 這樣 Eclipse 會(huì)進(jìn)入專門的 MapReduce 視圖 ( perspective )。
隨后,請(qǐng)檢查你的 MapReduce perspective中是否有一個(gè)專門的 MapReduce Servers view, 如果沒有,請(qǐng)選擇 Window -> Show View ->other, 再從彈出框中選擇 MapReduce Tools 類別下面的 MapReduce Servers, 打開這個(gè) view.
然后,請(qǐng)點(diǎn)擊 MapReduce Servers view 右上角的藍(lán)色圖標(biāo),就會(huì)出現(xiàn)如圖一所示的設(shè)置 Hadoop Server 的位置的界面。此處所說的 Hadoop server,具體到本文,就是 homer06 這臺(tái)機(jī)器。在輸入各項(xiàng)參數(shù)之后,請(qǐng)點(diǎn)擊 ”Validate location” 按鈕,檢查是否能夠正確的找到并連接上你的 Hadoop server. 如果出錯(cuò),請(qǐng)嘗試在命令行下執(zhí)行命令:ssh the_hostname_of_your_hadoop_server, (或使用圖形界面的 SSH 遠(yuǎn)程登錄軟件), 確保 ssh 能夠連接成功。
圖一 定義 Hadoop server 的位置
2. 創(chuàng)立一個(gè) MapReduce Project
在 Eclipse 中新創(chuàng)建一個(gè) MapReduce Project, 將我們在第二篇文章中 定義的 WordCount 類加到此 Project 中。這個(gè)類需要略作修改才能直接遠(yuǎn)程部署到我們已經(jīng)搭建好的分布式環(huán)境中去運(yùn)行,因?yàn)槲覀冊瓉碓凇ordCount 程序中是通過讀取命令行參數(shù)獲得計(jì) 算任務(wù)的輸入路徑和輸出路徑,而當(dāng)前版本的 IBM MapReduce Tools 不支持遠(yuǎn)程部署時(shí)讀取命令行參數(shù)。為測試的簡便起見,我在程序中直接將輸入路徑定義為 input, 輸出路徑定義為 output。在測試 WordCount 程序之前,需要事先將需要做詞頻統(tǒng)計(jì)的一批文件拷貝到分布式文件系統(tǒng)的 input 目錄下去。
完整的 WordCount 類的代碼如代碼清單 7 所示:
代碼清單7
//import 語句省略
public class WordCount extends Configured implements Tool {
public static class MapClass extends MapReduceBase
implements Mapper<LongWritable, Text, Text, IntWritable> {
private final static IntWritable one = new IntWritable(1);
private Text word = new Text();
private String pattern="[^\\w]";
public void map(LongWritable key, Text value,
OutputCollector<Text, IntWritable> output,
Reporter reporter) throws IOException {
String line = value.toString().toLowerCase();
line = line.replaceAll(pattern, " ");
StringTokenizer itr = new StringTokenizer(line);
while (itr.hasMoreTokens()) {
word.set(itr.nextToken());
output.collect(word, one);
}
}
}
public static class Reduce extends MapReduceBase
implements Reducer<Text, IntWritable, Text, IntWritable> {
public void reduce(Text key, Iterator<IntWritable> values,
OutputCollector<Text, IntWritable> output,
Reporter reporter) throws IOException {
int sum = 0;
while (values.hasNext()) {
sum += values.next().get();
}
output.collect(key, new IntWritable(sum));
}
}
public int run(String[] args) throws Exception {
Path tempDir = new Path("wordcount-temp-" +
Integer.toString(new Random().nextInt(Integer.MAX_VALUE)));
JobConf conf = new JobConf(getConf(), WordCount.class);
try {
conf.setJobName("wordcount");
conf.setOutputKeyClass(Text.class);
conf.setOutputValueClass(IntWritable.class);
conf.setMapperClass(MapClass.class);
conf.setCombinerClass(Reduce.class);
conf.setReducerClass(Reduce.class);
conf.setInputPath(new Path(args[0]));
conf.setOutputPath(tempDir);
conf.setOutputFormat(SequenceFileOutputFormat.class);
JobClient.runJob(conf);
JobConf sortJob = new JobConf(getConf(), WordCount.class);
sortJob.setJobName("sort");
sortJob.setInputPath(tempDir);
sortJob.setInputFormat(SequenceFileInputFormat.class);
sortJob.setMapperClass(InverseMapper.class);
sortJob.setNumReduceTasks(1);
sortJob.setOutputPath(new Path(args[1]));
sortJob.setOutputKeyClass(IntWritable.class);
sortJob.setOutputValueClass(Text.class);
sortJob.setOutputKeyComparatorClass(IntWritableDecreasingComparator.class);
JobClient.runJob(sortJob);
} finally {
FileSystem.get(conf).delete(tempDir);
}
return 0;
}
private static class IntWritableDecreasingComparator extends IntWritable.Comparator {
public int compare(WritableComparable a, WritableComparable b) {
return -super.compare(a, b);
}
public int compare(byte[] b1, int s1, int l1, byte[] b2, int s2, int l2) {
return -super.compare(b1, s1, l1, b2, s2, l2);
}
}
public static void main(String[] args) throws Exception {
String[] paths = {"input" , "output"};
int res = ToolRunner.run(new Configuration(), new WordCount(), paths);
System.exit(res);
}
}
|
在左側(cè)的 Project Explorer 中選中 WordCount 類,在右鍵彈出菜單中選擇 Run As->Run on hadoop, 如圖二 所示:
圖二
然后在 “select hadoop server” 彈出框中選擇我們已經(jīng)定義好的 Hadoop server, 點(diǎn)擊 Finish 之后,MapReduce Tool 會(huì)自動(dòng)將 WordCount project打包成一個(gè) jar 并拷到遠(yuǎn)程 Hadoop server 上運(yùn)行起來, 整個(gè)運(yùn)行過程的輸出在 Eclipse 的 console 中即可看到,非常方便。
當(dāng)定義好 Hadoop server 的位置之后,在左側(cè)的 Project Explorer 會(huì)出現(xiàn)一個(gè)新的 project( 項(xiàng)目名前面有一個(gè)藍(lán)色的小象圖標(biāo)), , 通過這個(gè) project 可以瀏覽 Hadoop 分布式文件系統(tǒng)中的文件。雙擊 output 目錄下的 part-0000 文件,我們就可以直接在 Eclipse 中查看 WordCount 程序的輸出結(jié)果,如圖三所示:
圖三
我們知道,在分布式集群環(huán)境中才能發(fā)揮 Hadoop 的并行優(yōu)勢,擁有的機(jī)器數(shù)量越多,越能快速有效的處理海量數(shù)據(jù)。現(xiàn)實(shí)問題是,雖然很多公司都有處理海量數(shù)據(jù)的需求,卻又不可能專門投資去搭建大規(guī)模的集群 環(huán)境,Hadoop 于他們,不免淪為”屠龍之技”,無處發(fā)揮其優(yōu)勢,如之奈何?在過去,這個(gè)問題還真是難以解決,今天的情況就不一樣了。讀者如果關(guān)注 IT 業(yè)界動(dòng)態(tài),當(dāng)知現(xiàn)在 IT 業(yè)界正在極力鼓吹”云計(jì)算”, 并有一些公司開始投資搭建所謂的”云計(jì)算平臺(tái)”,這里的”云”, 就是一堆機(jī)器組成的分布式環(huán)境外加一些基礎(chǔ)構(gòu)架軟件和管理軟件,其中便會(huì)有類似于 Hadoop 這樣的分布式計(jì)算軟件,HDFS 這樣的分布式文件系統(tǒng),有需求的公司和個(gè)人可以到這樣的”云計(jì)算平臺(tái)”上去租用存儲(chǔ)空間,租用計(jì)算結(jié)點(diǎn)(計(jì)算能力)做分布式運(yùn)算。
比如 Amazon 公司基于 Hadoop 推出了 Amazon S3 ( Amazon Simple Storage Service ),提供可靠,快速,可擴(kuò)展的網(wǎng)絡(luò)存儲(chǔ)服務(wù),以及一個(gè)商用的云計(jì)算平臺(tái) Amazon EC2 ( Amazon Elastic Compute Cloud )。用戶可以將其數(shù)據(jù)存儲(chǔ)在 Amazon S3 分布式存儲(chǔ)平臺(tái)上, 然后到 Amazon EC2 上去租用計(jì)算能力,完成對(duì)數(shù)據(jù)的計(jì)算。Amazon EC2 提供所謂的按需租用服務(wù),目前的收費(fèi)標(biāo)準(zhǔn)是每臺(tái)虛擬計(jì)算機(jī) (Amazon EC2 稱之為一個(gè) instance) 每小時(shí)0.10美元。與傳統(tǒng)的主機(jī)租用服務(wù)完全不同,用戶可以根據(jù)自己某次運(yùn)算處理的規(guī)模,租用相應(yīng)數(shù)量的虛擬計(jì)算機(jī),運(yùn)算完畢后就可以釋放你租用的虛擬 計(jì)算機(jī),Amazon 則會(huì)根據(jù)你租用的虛擬計(jì)算機(jī)的數(shù)量以及本次計(jì)算的實(shí)際運(yùn)行時(shí)間向你收費(fèi),等于說你花錢租用計(jì)算能力,但不會(huì)浪費(fèi)一個(gè)子兒。IBM 公司的云計(jì)算平臺(tái)"藍(lán)云"也面向企業(yè)用戶提供了類似的功能。
如果我們打算基于 Hadoop 編寫分布式并行程序來處理大量的數(shù)據(jù),完全可以到 IBM, Amazon 等提供的云計(jì)算平臺(tái)上去進(jìn)行計(jì)算,對(duì)于 IBM 藍(lán)云,Amazon S3, Amazon EC2 的詳細(xì)介紹超出了本文范圍,有興趣的讀者可以去其官方網(wǎng)站了解更多的信息。
這是系列文章的最后一篇。第一篇文章介紹了 MapReduce 計(jì)算模型,分布式文件系統(tǒng) HDFS,分布式并行計(jì)算等的基本原理, 如何安裝和部署單機(jī) Hadoop 環(huán)境, 在第二篇文章中, 我們實(shí)際編寫了一個(gè) Hadoop 并行計(jì)算程序,并了解了一些重要的編程細(xì)節(jié),了解了如何使用 IBM MapReduce Tools 在 Eclipse 環(huán)境中編譯,運(yùn)行和調(diào)試 Hadoop 并行計(jì)算程序。本篇文章則詳細(xì)介紹了如何部署分布式 Hadoop 環(huán)境,如何利用 IBM MapReduce Tools 將程序部署到分布式環(huán)境中運(yùn)行,并簡略介紹了現(xiàn)在流行的”云計(jì)算平臺(tái)” 以及計(jì)算能力按需租用服務(wù)。
希望這三篇文章能起到一個(gè)拋磚引玉的作用,讓你感受到 MapReduce 分布式并行編程的樂趣并從此入門且樂在其中,為即將到來的所謂”云計(jì)算”時(shí)代提前熱熱身。
聲明:本文僅代表作者個(gè)人之觀點(diǎn),不代表 IBM 公司之觀點(diǎn)。
學(xué)習(xí)
-
訪問 Hadoop 官方網(wǎng)站,了解 Hadoop 及其子項(xiàng)目 HBase 的信息。
-
Hadoop wiki上, 有許多 Hadoop 的用戶文檔,開發(fā)文檔,示例程序等。
-
閱讀 Google Mapduce 論文:
MapReduce: Simplified Data Processing on Large Clusters, 深入了解 Mapreduce 計(jì)算模型。
-
深入了解 Hadoop 分布式文件系統(tǒng) HDFS:
The Hadoop Distributed File System:Architecture and Design
-
深入了解 Google 文件系統(tǒng) GFS:
The Google File System, Hadoop HDFS 實(shí)現(xiàn)了與 GFS 類似的功能。
- IBM MapReduce Tools:
http://www.alphaworks.ibm.com/tech/mapreducetools,
-
閱讀本系列文章的第一篇:
用 Hadoop 進(jìn)行分布式并行編程,第 1 部分:基本概念與安裝部署
-
閱讀本系列文章的第二篇:
用 Hadoop 進(jìn)行分布式并行編程,第 2 部分:程序?qū)嵗c分析
討論
曹 羽中,在北京航空航天大學(xué)獲得計(jì)算機(jī)軟件與理論專業(yè)的碩士學(xué)位,具有數(shù)年的 unix 環(huán)境下的 C 語言,Java,數(shù)據(jù)庫以及電信計(jì)費(fèi)軟件的開發(fā)經(jīng)驗(yàn),他的技術(shù)興趣還包括 OSGi 和搜索技術(shù)。他目前在IBM中國系統(tǒng)與科技實(shí)驗(yàn)室從事系統(tǒng)管理軟件的開發(fā)工作,可以通過 caoyuz@cn.ibm.com與他聯(lián)系。


平均分 (9個(gè)評(píng)分)

