Upload
chihua0826
View
5.658
Download
0
Embed Size (px)
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 程式執行結果