You are on page 1of 43

雲端運算-Hadoop 實作開發入門(結合 Eclipse 整合開發環境) 編輯者:陳志華

雲端運算-Hadoop 實作開發入門(結合 Eclipse 整合開發環境)

一、Hadoop 安裝(單機版)
(1) 準備 Ubuntu 作業系統之環境

(2) 安裝 Openssh-server
輸入:sudo apt-get install openssh-server

備註:本文件操作流程參考自國家高速網路與計算中心雲端運算基礎課程

第1頁
雲端運算-Hadoop 實作開發入門(結合 Eclipse 整合開發環境) 編輯者:陳志華

Openssh-server 安裝完成畫面

(3) 設定登入免密碼
輸入:ssh-keygen -t rsa -f ~/.ssh/id_rsa -P ""

第2頁
雲端運算-Hadoop 實作開發入門(結合 Eclipse 整合開發環境) 編輯者:陳志華

產生金鑰畫面

輸入:cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys

第3頁
雲端運算-Hadoop 實作開發入門(結合 Eclipse 整合開發環境) 編輯者:陳志華

(4) 登入確認不用輸入密碼
輸入:ssh localhost

第一次登入時,需輸入「yes」

第4頁
雲端運算-Hadoop 實作開發入門(結合 Eclipse 整合開發環境) 編輯者:陳志華

進行登出
輸入:exit

登出畫面

第5頁
雲端運算-Hadoop 實作開發入門(結合 Eclipse 整合開發環境) 編輯者:陳志華

重新登入確認,此時不用再輸入「yes」
輸入:ssh localhost

進行登出
輸入:exit

第6頁
雲端運算-Hadoop 實作開發入門(結合 Eclipse 整合開發環境) 編輯者:陳志華

(5) 安裝 java 環境
輸入:sudo apt-get purge java-gcj-compat

安裝 java,並在下面畫面中輸入「Y」繼續安裝
輸入:sudo apt-get install sun-java6-bin sun-java6-jdk sun-java6-jre

第7頁
雲端運算-Hadoop 實作開發入門(結合 Eclipse 整合開發環境) 編輯者:陳志華

點選「OK」繼續安裝

點選「Yes」繼續安裝

第8頁
雲端運算-Hadoop 實作開發入門(結合 Eclipse 整合開發環境) 編輯者:陳志華

安裝完成畫面

(6) 下載 Hadoop 安裝套件並進行環境設定


切換至/opt 目錄
輸入:cd /opt

第9頁
雲端運算-Hadoop 實作開發入門(結合 Eclipse 整合開發環境) 編輯者:陳志華

下載 Hadoop 套件
輸入: sudo wget http://ftp.twaren.net/Unix/Web/apache/hadoop/core/hadoop-0.20.2/hadoop-0.20.2.tar.gz

解壓縮 Hadoop 套件
輸入:sudo tar zxvf hadoop-0.20.2.tar.gz

第 10 頁
雲端運算-Hadoop 實作開發入門(結合 Eclipse 整合開發環境) 編輯者:陳志華

將解壓縮後資料移動至 hadoop 目錄
輸入:sudo mv hadoop-0.20.2/ hadoop

設定使用者權限,本文件以使用者 chihua 為例進行設定


輸入:sudo chown -R hadooper:hadooper hadoop

第 11 頁
雲端運算-Hadoop 實作開發入門(結合 Eclipse 整合開發環境) 編輯者:陳志華

建立資料夾/var/hadoop
輸入:sudo mkdir /var/hadoop

設定使用者權限,本文件以使用者 chihua 為例進行設定


輸入:sudo chown -R hadooper:hadooper /var/hadoop

第 12 頁
雲端運算-Hadoop 實作開發入門(結合 Eclipse 整合開發環境) 編輯者:陳志華

(7) 設定 hadoop-env.sh
切換至 hadoop 目錄
輸入:cd hadoop/

編輯 hadoop-env.sh 內容
輸入:cat >> conf/hadoop-env.sh << EOF

第 13 頁
雲端運算-Hadoop 實作開發入門(結合 Eclipse 整合開發環境) 編輯者:陳志華

輸入以下資訊至 hadoop-env.sh
export JAVA_HOME=/usr/lib/jvm/java-6-sun
export HADOOP_HOME=/opt/hadoop
export HADOOP_CONF_DIR=/opt/hadoop/conf
EOF

輸入畫面,輸入後按 Enter 即完成 hadoop-env.sh 設定

(8) 設定 core-site.xml
編輯 core-site.xml 內容
輸入:/opt/hadoop$ cat > conf/core-site.xml << EOF

第 14 頁
雲端運算-Hadoop 實作開發入門(結合 Eclipse 整合開發環境) 編輯者:陳志華

輸入以下資訊至 core-site.xml
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/var/hadoop/hadoop-\${user.name}</value>
</property>
</configuration>
EOF

輸入畫面,輸入後按 Enter 即完成 core-site.xml 設定

第 15 頁
雲端運算-Hadoop 實作開發入門(結合 Eclipse 整合開發環境) 編輯者:陳志華

(9) 設定 hdfs-site.xml
編輯 hdfs-site.xml 內容
輸入:/opt/hadoop$ cat > conf/hdfs-site.xml << EOF

輸入以下資訊至 hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
EOF

輸入畫面,輸入後按 Enter 即完成 hdfs-site.xml 設定

第 16 頁
雲端運算-Hadoop 實作開發入門(結合 Eclipse 整合開發環境) 編輯者:陳志華

(10) 設定 mapred-site.xml
編輯 mapred-site.xml 內容
輸入:/opt/hadoop$ cat > conf/mapred-site.xml << EOF

輸入以下資訊至 mapred-site.xml
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>localhost:9001</value>
</property>
</configuration>
EOF

輸入畫面,輸入後按 Enter 即完成 mapred-site.xml 設定

第 17 頁
雲端運算-Hadoop 實作開發入門(結合 Eclipse 整合開發環境) 編輯者:陳志華

(11) 格式化 HDFS


輸入:bin/hadoop namenode -format

完成畫面

第 18 頁
雲端運算-Hadoop 實作開發入門(結合 Eclipse 整合開發環境) 編輯者:陳志華

(12) 啟動 Hadoop
輸入:bin/start-all.sh

完成畫面

第 19 頁
雲端運算-Hadoop 實作開發入門(結合 Eclipse 整合開發環境) 編輯者:陳志華

(13) 啟動查運作狀態
連結 http://localhost:50030/,瀏覽 Hadoop 管理介面

連結 http://localhost:50060/,瀏覽 Hadoop Task Tracker 狀態

第 20 頁
雲端運算-Hadoop 實作開發入門(結合 Eclipse 整合開發環境) 編輯者:陳志華

連結 http://localhost:50070/,Hadoop DFS 狀態

第 21 頁
雲端運算-Hadoop 實作開發入門(結合 Eclipse 整合開發環境) 編輯者:陳志華

二、Eclipse 和 Hadoop 的 Eclipse plugin 安裝


(1) 下載 Eclipse

本文件將 eclipse 放置於/opt 目錄下

第 22 頁
雲端運算-Hadoop 實作開發入門(結合 Eclipse 整合開發環境) 編輯者:陳志華

(2) 匯入 hadoop 0.20.2 eclipse plugin


輸入: sudo cp /opt/hadoop/contrib/eclipse-plugin/hadoop-0.20.2-eclipse-plugin.jar /opt/eclipse/plugins

(3) 開啟 eclipse
連續點選 eclipse 圖案滑鼠左鍵兩下,開啟 eclipse

第 23 頁
雲端運算-Hadoop 實作開發入門(結合 Eclipse 整合開發環境) 編輯者:陳志華

設定 workspace 路徑,本文件以/home/chihua/workspace 為例

設定視野,點選「 」,並選擇「Other…」

第 24 頁
雲端運算-Hadoop 實作開發入門(結合 Eclipse 整合開發環境) 編輯者:陳志華

設定為「MapReduce」,並點選「OK」完成設定

(4) 開啟新專案
點選「File\New\Other…」

第 25 頁
雲端運算-Hadoop 實作開發入門(結合 Eclipse 整合開發環境) 編輯者:陳志華

選擇「Map/Reduce Project」,並點選「Next >」

輸入 Project name,本文件以「wordcount」為例
點選「Configure Hadoop install directory」進行環境設定

第 26 頁
雲端運算-Hadoop 實作開發入門(結合 Eclipse 整合開發環境) 編輯者:陳志華

設定 Hadoop installation directory 路徑為「/opt/hadoop」

點選「Finish」,完成新增專案

第 27 頁
雲端運算-Hadoop 實作開發入門(結合 Eclipse 整合開發環境) 編輯者:陳志華

點選「File\Properties」,進行專案參數設定

點選左邊選單的「Java Build Path」,並點選右方之「Libraries」


對 hadoop-0.20.2-ant.jar 之 Source attachment 和 Javadoc location 進行設定

第 28 頁
雲端運算-Hadoop 實作開發入門(結合 Eclipse 整合開發環境) 編輯者:陳志華

設定 hadoop-0.20.2-ant.jar 之 Source attachment 為「/opt/hadoop/src/ant」

設定 hadoop-0.20.2-ant.jar 之 Javadoc location 為「file:/opt/hadoop/docs/api」

第 29 頁
雲端運算-Hadoop 實作開發入門(結合 Eclipse 整合開發環境) 編輯者:陳志華

hadoop-0.20.2-ant.jar 設定完成畫面

依此類推,分別設定 hadoop-0.20.2-core.jar 和 hadoop-0.20.2-tools.jar


設定 hadoop-0.20.2-core.jar 之 Source attachment 為「/opt/hadoop/src/core」
設定 hadoop-0.20.2-core.jar 之 Javadoc location 為「file:/opt/hadoop/docs/api」
設定 hadoop-0.20.2-tools.jar 之 Source attachment 為「/opt/hadoop/src/tools」
設定 hadoop-0.20.2-tools.jar 之 Javadoc location 為「file:/opt/hadoop/docs/api」
完成畫面如下圖所示

第 30 頁
雲端運算-Hadoop 實作開發入門(結合 Eclipse 整合開發環境) 編輯者:陳志華

設定 Javadoc location path 路徑為「file:/usr/lib/jvm/java-6-sun/docs/api/」

點選右下角之「 」

第 31 頁
雲端運算-Hadoop 實作開發入門(結合 Eclipse 整合開發環境) 編輯者:陳志華

設定 Hadoop 環境資訊

(a) Location name (可任意設置)


本文件設為「hadoop」

(b) Map/Recuce Master 的部分:


Host 設為「localhost」
Port 設為「9001」

(c) Use M/R Master host 的部分:


Host 設為「localhost」
Port 設為「9000」

(d) User name (需與文件第 11 頁和第 12 頁步驟中之 user name 相同)


本文件設為「chihua」

完成後點選「Finish」完成專案環境設定

第 32 頁
雲端運算-Hadoop 實作開發入門(結合 Eclipse 整合開發環境) 編輯者:陳志華

(5) MapReduce 程式開發


點選「File\New\Mapper」產生 Mapper 類別

設定 Mapper 類別資訊
本文件之 Package 設為「wordcount」,Name 設為「mapper」

第 33 頁
雲端運算-Hadoop 實作開發入門(結合 Eclipse 整合開發環境) 編輯者:陳志華

輸入「mapper.java」的內容
package wordcount;
import java.io.IOException;
import java.util.StringTokenizer;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

public class mapper extends Mapper<Object, Text, Text, IntWritable> {


private final static IntWritable one = new IntWritable(1);
private Text word = new Text();
public void map(Object key, Text value, Context context)
throws IOException, InterruptedException {
StringTokenizer itr = new StringTokenizer(value.toString());
while (itr.hasMoreTokens()) {
word.set(itr.nextToken());
context.write(word, one);
}
}
}

完成畫面

第 34 頁
雲端運算-Hadoop 實作開發入門(結合 Eclipse 整合開發環境) 編輯者:陳志華

點選「File\New\Reducer」產生 Reducer 類別

設定 Reducer 類別資訊
本文件之 Package 設為「wordcount」,Name 設為「reducer」

第 35 頁
雲端運算-Hadoop 實作開發入門(結合 Eclipse 整合開發環境) 編輯者:陳志華

輸入「reducer.java」的內容
package wordcount;
import java.io.IOException;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;
public class reducer extends Reducer<Text, IntWritable, Text,
IntWritable> {
private IntWritable result = new IntWritable();
public void reduce(Text key, Iterable<IntWritable> values, Context
context)
throws IOException, InterruptedException {
int sum = 0;
for (IntWritable val : values) {
sum += val.get();
}
result.set(sum);
context.write(key, result);
}
}

完成畫面

第 36 頁
雲端運算-Hadoop 實作開發入門(結合 Eclipse 整合開發環境) 編輯者:陳志華

點選「File\New\MapReduce Driver」產生 MapReduce Driver 類別

設定 MapReduce Driver 類別資訊


本文件之 Package 設為「wordcount」,Name 設為「WordCount」

第 37 頁
雲端運算-Hadoop 實作開發入門(結合 Eclipse 整合開發環境) 編輯者:陳志華

輸入「WordCount.java」的內容
package wordcount;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.util.GenericOptionsParser;

public class WordCount {

public static void main(String[] args) throws Exception {


Configuration conf = new Configuration();
String[] otherArgs = new GenericOptionsParser(conf, args)
.getRemainingArgs();
if (otherArgs.length != 2) {
System.err.println("Usage: wordcount <in> <out>");
System.exit(2);
}
Job job = new Job(conf, "word count");
job.setJarByClass(WordCount.class);
job.setMapperClass(mapper.class);

job.setCombinerClass(reducer.class);
job.setReducerClass(reducer.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
FileInputFormat.addInputPath(job, new Path(otherArgs[0]));
FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));
System.exit(job.waitForCompletion(true) ? 0 : 1);
}
}

第 38 頁
雲端運算-Hadoop 實作開發入門(結合 Eclipse 整合開發環境) 編輯者:陳志華

完成畫面

(6) MapReduce 程式編譯


於專案點選滑鼠右鍵,選擇「Run As\Run on Hadoop」進行編譯

第 39 頁
雲端運算-Hadoop 實作開發入門(結合 Eclipse 整合開發環境) 編輯者:陳志華

(7) MapReduce 程式編譯(Makefile 方式)


於專案路徑下產生 Makefile 檔案
本文件以「/home/chihua/workspace/woudcount」為例

輸入 Makefile 內容

第 40 頁
雲端運算-Hadoop 實作開發入門(結合 Eclipse 整合開發環境) 編輯者:陳志華

Makefile 內容如下
JarFile="wordcount.jar"
MainFunc="wordcount.WordCount"
LocalOutDir="/tmp/output"
HADOOP_BIN="/opt/hadoop/bin"

all:jar run output clean

jar:
jar -cvf ${JarFile} -C bin/ .

run:
${HADOOP_BIN}/hadoop jar ${JarFile} ${MainFunc} input output

clean:
${HADOOP_BIN}/hadoop fs -rmr output

output:
rm -rf ${LocalOutDir}
${HADOOP_BIN}/hadoop fs -get output ${LocalOutDir}
gedit ${LocalOutDir}/part-r-00000 &

help:
@echo "Usage:"
@echo " make jar - Build Jar File."
@echo " make clean - Clean up Output directory on HDFS."
@echo " make run - Run your MapReduce code on Hadoop."
@echo " make output - Download and show output file"
@echo " make help - Show Makefile options."
@echo " "
@echo "Example:"
@echo " make jar; make run; make output; make clean"

第 41 頁
雲端運算-Hadoop 實作開發入門(結合 Eclipse 整合開發環境) 編輯者:陳志華

於專案路徑下輸入「make」進行編譯和執行

MapReduce 程式執行過程

第 42 頁
雲端運算-Hadoop 實作開發入門(結合 Eclipse 整合開發環境) 編輯者:陳志華

MapReduce 程式完成畫面

MapReduce 程式執行結果

第 43 頁

You might also like