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

Preview:

DESCRIPTION

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

Citation preview

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

第 1 頁

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

一、Hadoop 安裝(單機版)

(1) 準備 Ubuntu 作業系統之環境

(2) 安裝 Openssh-server

輸入:sudo apt-get install openssh-server

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

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

第 2 頁

Openssh-server 安裝完成畫面

(3) 設定登入免密碼

輸入:ssh-keygen -t rsa -f ~/.ssh/id_rsa -P ""

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

第 3 頁

產生金鑰畫面

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

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

第 4 頁

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

輸入:ssh localhost

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

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

第 5 頁

進行登出

輸入:exit

登出畫面

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

第 6 頁

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

輸入:ssh localhost

進行登出

輸入:exit

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

第 7 頁

(5) 安裝 java 環境

輸入:sudo apt-get purge java-gcj-compat

安裝 java,並在下面畫面中輸入「Y」繼續安裝

輸入:sudo apt-get install sun-java6-bin sun-java6-jdk sun-java6-jre

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

第 8 頁

點選「OK」繼續安裝

點選「Yes」繼續安裝

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

第 9 頁

安裝完成畫面

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

切換至/opt 目錄

輸入:cd /opt

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

第 10 頁

下載 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

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

第 11 頁

將解壓縮後資料移動至 hadoop 目錄

輸入:sudo mv hadoop-0.20.2/ hadoop

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

輸入:sudo chown -R hadooper:hadooper hadoop

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

第 12 頁

建立資料夾/var/hadoop

輸入:sudo mkdir /var/hadoop

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

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

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

第 13 頁

(7) 設定 hadoop-env.sh

切換至 hadoop 目錄

輸入:cd hadoop/

編輯 hadoop-env.sh 內容

輸入:cat >> conf/hadoop-env.sh << EOF

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

第 14 頁

輸入以下資訊至 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

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

第 15 頁

輸入以下資訊至 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 設定

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

第 16 頁

(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 設定

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

第 17 頁

(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 設定

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

第 18 頁

(11) 格式化 HDFS

輸入:bin/hadoop namenode -format

完成畫面

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

第 19 頁

(12) 啟動 Hadoop

輸入:bin/start-all.sh

完成畫面

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

第 20 頁

(13) 啟動查運作狀態

連結 http://localhost:50030/,瀏覽 Hadoop 管理介面

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

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

第 21 頁

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

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

第 22 頁

二、Eclipse 和 Hadoop 的 Eclipse plugin 安裝

(1) 下載 Eclipse

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

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

第 23 頁

(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

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

第 24 頁

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

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

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

第 25 頁

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

(4) 開啟新專案

點選「File\New\Other…」

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

第 26 頁

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

輸入 Project name,本文件以「wordcount」為例

點選「Configure Hadoop install directory」進行環境設定

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

第 27 頁

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

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

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

第 28 頁

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

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

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

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

第 29 頁

設定 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」

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

第 30 頁

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」

完成畫面如下圖所示

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

第 31 頁

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

點選右下角之「 」

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

第 32 頁

設定 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」完成專案環境設定

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

第 33 頁

(5) MapReduce 程式開發

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

設定 Mapper 類別資訊

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

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

第 34 頁

輸入「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);

}

}

}

完成畫面

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

第 35 頁

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

設定 Reducer 類別資訊

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

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

第 36 頁

輸入「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);

}

}

完成畫面

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

第 37 頁

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

設定 MapReduce Driver 類別資訊

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

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

第 38 頁

輸入「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);

}

}

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

第 39 頁

完成畫面

(6) MapReduce 程式編譯

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

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

第 40 頁

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

於專案路徑下產生 Makefile 檔案

本文件以「/home/chihua/workspace/woudcount」為例

輸入 Makefile 內容

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

第 41 頁

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"

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

第 42 頁

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

MapReduce 程式執行過程

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

第 43 頁

MapReduce 程式完成畫面

MapReduce 程式執行結果