Hadoop環(huán)境搭建測(cè)試以及MapReduce實(shí)例實(shí)現(xiàn)
目錄
1 任務(wù)
2 過(guò)程
2.1?熟悉常用的 Hadoop 命令
2.2?Hadoop環(huán)境搭建
1.SSH登錄權(quán)限設(shè)置
2.安裝Java環(huán)境
3.Hadoop的安裝
4.偽分布式安裝配置
2.3?Wordcount實(shí)例
2.4 搭建eclipse環(huán)境編程實(shí)現(xiàn)Wordcount程序
1、安裝eclipse
2.配置Hadoop-Eclipse-Plugin
3.在Eclipse中操作HDFS中的文件
4.在Eclipse中創(chuàng)建MapReduce項(xiàng)目
5.通過(guò) Eclipse 運(yùn)行 MapReduce
2.5基于Hadoop的數(shù)據(jù)去重實(shí)例實(shí)現(xiàn)
1.實(shí)例描述
2.設(shè)計(jì)思路
3.程序部分代碼
4.實(shí)驗(yàn)結(jié)果
3 總結(jié)
1 任務(wù)
熟悉常用的 Hadoop 命令
運(yùn)行 Wordcount 實(shí)例
搭建 Eclipse 編程環(huán)境
編程實(shí)現(xiàn) Wordcount 程序
2 過(guò)程
2.1?熟悉常用的 Hadoop 命令
1.利用Shell命令操作
Hadoop支持很多Shell命令,其中fs是HDFS最常用的命令,利用fs可以查看HDFS文件系統(tǒng)的目錄結(jié)構(gòu)、上傳和下載數(shù)據(jù)、創(chuàng)建文件等。
注意
有三種shell命令方式的區(qū)別:
(1) hadoop fs
(2) hadoop dfs
(3) hdfs dfs
hadoop fs適用于任何不同的文件系統(tǒng),比如本地文件系統(tǒng)和HDFS文件系統(tǒng)
hadoop dfs只能適用于HDFS文件系統(tǒng)
hdfs dfs跟hadoop dfs的命令作用一樣,也只能適用于HDFS文件系統(tǒng)
我們可以在終端輸入如下命令,查看fs總共支持了哪些命令
./bin/hadoop fs
2.查看help命令如何使用
3.利用HDFS的Web界面管理
2.2?Hadoop環(huán)境搭建
1.SSH登錄權(quán)限設(shè)置
(1) Ubuntu 默認(rèn)已安裝了 SSH client,現(xiàn)在安裝 SSH server:
(2)安裝成功后
(3)登錄
(4)登錄成功
2.安裝Java環(huán)境
(1)下載JDK1.7.0
(2)下載成功
(3)環(huán)境變量的配置
(4)保存.bashrc文件并退出vim編輯器并命令讓.bashrc文件的配置立即生效
(5)查看是否安裝成功
3.Hadoop的安裝
(1)在計(jì)算機(jī)中建立一個(gè)共享文件夾,并將hadoop下載到其中,并解壓
(2)將文件名改為hadoop
(3)修改文件權(quán)限
(4)檢查版本信息
4.偽分布式安裝配置
(1)修改配置文件core-site.xml
(2)修改配置文件hdfs-site.xml
(3)初始化文件系統(tǒng)
(4)初始化過(guò)程中出現(xiàn)環(huán)境變量配置問(wèn)題,因此我們打開(kāi)hadoop-env.sh文件進(jìn)行修改
(5)修改后,再次進(jìn)行初始化
(6)初始化成功
2.3?Wordcount實(shí)例
1.格式化namenode
2.格式化成功
3.啟動(dòng)進(jìn)程
4.查看進(jìn)程
5.把本地到hadoop/input (自己建立的)文件夾中到文件上傳到hdfs文件系統(tǒng)到input文件夾下
6.查看文件是否上傳成功
7.運(yùn)行wordcount實(shí)例
8.查看mapreduce進(jìn)度
9.查看運(yùn)行結(jié)果
10.將運(yùn)行結(jié)果取回本地文件系統(tǒng)
11.關(guān)閉進(jìn)程
2.4 搭建eclipse環(huán)境編程實(shí)現(xiàn)Wordcount程序
1、安裝eclipse
(1) 下載eclipse
(2)安裝并創(chuàng)建快捷方式
(3)下載并安裝Hadoop-Eclipse-Plugin,在共享文件夾中下載,再解壓
2.配置Hadoop-Eclipse-Plugin
(1)啟動(dòng)eclipse
(2)安裝好Hadoop-Eclipse-Plugin插件的效果
(3)對(duì)插件的進(jìn)一步配置
① 選擇Hadoop的安裝目錄
② 切換Map/Reduce開(kāi)發(fā)視圖
③ Hadoop Location的設(shè)置
④ 建立與Hadoop集群的連接
3.在Eclipse中操作HDFS中的文件
配置好后,點(diǎn)擊左側(cè) Project Explorer 中的 MapReduce Location (點(diǎn)擊三角形展開(kāi))就能直接查看 HDFS 中的文件列表了(HDFS 中要有文件,如下圖是 WordCount 的輸出結(jié)果),雙擊可以查看內(nèi)容,右鍵點(diǎn)擊可以上傳、下載、刪除 HDFS 中的文件,無(wú)需再通過(guò)繁瑣的 hdfs dfs -ls 等命令進(jìn)行操作了。
以下output/part-r-00000文件記錄了輸出結(jié)果。
4.在Eclipse中創(chuàng)建MapReduce項(xiàng)目
(1) 創(chuàng)建Project
(2)創(chuàng)建MapReduce項(xiàng)目
(3)填寫(xiě)項(xiàng)目名
(4)項(xiàng)目創(chuàng)建完成
(5)新建Class
(6)填寫(xiě)Class信息
(7)編輯WordCount.java文件
5.通過(guò) Eclipse 運(yùn)行 MapReduce
(1) 將 /usr/local/hadoop/etc/hadoop 中將有修改過(guò)的配置文件(如偽分布式需要 core-site.xml 和 hdfs-site.xml),以及 log4j.properties 復(fù)制到WordCount 項(xiàng)目下的 src 文件夾
(2)Wordcount運(yùn)行結(jié)果同shell指令結(jié)果對(duì)比
2.5基于Hadoop的數(shù)據(jù)去重實(shí)例實(shí)現(xiàn)
1.實(shí)例描述
"數(shù)據(jù)去重"主要是為了掌握和利用并行化思想來(lái)對(duì)數(shù)據(jù)進(jìn)行有意義的篩選。統(tǒng)計(jì)大數(shù)據(jù)集上的數(shù)據(jù)種類個(gè)數(shù)、從網(wǎng)站日志中計(jì)算訪問(wèn)地等這些看似龐雜的任務(wù)都會(huì)涉及數(shù)據(jù)去重。
對(duì)數(shù)據(jù)文件中的數(shù)據(jù)進(jìn)行去重。數(shù)據(jù)文件中的每行都是一個(gè)數(shù)據(jù)。
2.設(shè)計(jì)思路
數(shù)據(jù)去重的最終目標(biāo)是讓原始數(shù)據(jù)中出現(xiàn)次數(shù)超過(guò)一次的數(shù)據(jù)在輸出文件中只出現(xiàn)一次。我們自然而然會(huì)想到將同一個(gè)數(shù)據(jù)的所有記錄都交給一臺(tái)reduce機(jī)器,無(wú)論這個(gè)數(shù)據(jù)出現(xiàn)多少次,只要在最終結(jié)果中輸出一次就可以了。具體就是reduce的輸入應(yīng)該以數(shù)據(jù)作為key,而對(duì)value-list則沒(méi)有要求。當(dāng)reduce接收到一個(gè)
在MapReduce流程中,map的輸出
3.程序部分代碼
public?class?WordCountDatededuplication {
//map將輸入中的value復(fù)制到輸出數(shù)據(jù)的key上,并直接輸出
public?static?class?Map?extends?Mapper
private?static?Text?line=new?Text();//每行數(shù)據(jù)
//實(shí)現(xiàn)map函數(shù)
public?void?map(Object key,Text value,Context context)
throws?IOException,InterruptedException{
line=value;
context.write(line,?new?Text(""));
}
}
//reduce將輸入中的key復(fù)制到輸出數(shù)據(jù)的key上,并直接輸出
public?static?class?Reduce?extends?Reducer
//實(shí)現(xiàn)reduce函數(shù)
public?void?reduce(Text key,Iterable
throws?IOException,InterruptedException{
context.write(key,?new?Text(""));
}
}
public?static?void?main(String[] args)?throws?Exception{
Configuration conf =?new?Configuration();
//這句話很關(guān)鍵
conf.set("mapred.job.tracker",?"192.168.1.2:9001");
String[] ioArgs=new?String[]{"dedup_in","dedup_out"};
String[] otherArgs =?new?GenericOptionsParser(conf, ioArgs).getRemainingArgs();
if?(otherArgs.length?!= 2) {
System.err.println("Usage: Data Deduplication
System.exit(2);
}
Job job =?new?Job(conf,?"Data Deduplication");
job.setJarByClass(Dedup.class);
//設(shè)置Map、Combine和Reduce處理類
job.setMapperClass(Map.class);
job.setCombinerClass(Reduce.class);
job.setReducerClass(Reduce.class);
//設(shè)置輸出類型
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(Text.class);
//設(shè)置輸入和輸出目錄
FileInputFormat.addInputPath(job,?new?Path(otherArgs[0]));
FileOutputFormat.setOutputPath(job,?new?Path(otherArgs[1]));
System.exit(job.waitForCompletion(true) ? 0 : 1);
}
}
4.實(shí)驗(yàn)結(jié)果
(1)準(zhǔn)備測(cè)試數(shù)據(jù)
創(chuàng)建文件夾inputdatadeduplication,并在該文件夾下創(chuàng)建兩個(gè)文件data1.txt和data2.txt
data1.txt文件:
data2.txt文件:
(2)查看運(yùn)行結(jié)果
3 總結(jié)
首先我們啟動(dòng)eclipse需要管理員的權(quán)限,這樣我們?cè)谶\(yùn)行這個(gè)程序時(shí),避免了“無(wú)法訪問(wèn)”的錯(cuò)誤。
MapReduce實(shí)例實(shí)現(xiàn)的主要難點(diǎn)是代碼的編寫(xiě).
希望各位既可以掌握Hadoop偽分布式的搭建過(guò)程,也熟悉一些Linux指令,鍛煉動(dòng)手能力。
Hadoop MapReduce
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。