Hadoop環(huán)境搭建測(cè)試以及MapReduce實(shí)例實(shí)現(xiàn)

      網(wǎng)友投稿 875 2022-05-30

      目錄

      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)

      Hadoop環(huán)境搭建測(cè)試以及MapReduce實(shí)例實(shí)現(xiàn)

      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è)時(shí)就直接將key復(fù)制到輸出的key中,并將value設(shè)置成空值。

      在MapReduce流程中,map的輸出經(jīng)過(guò)shuffle過(guò)程聚集成后會(huì)交給reduce。所以從設(shè)計(jì)好的reduce輸入可以反推出map的輸出key應(yīng)為數(shù)據(jù),value任意。繼續(xù)反推,map輸出數(shù)據(jù)的key為數(shù)據(jù),而在這個(gè)實(shí)例中每個(gè)數(shù)據(jù)代表輸入文件中的一行內(nèi)容,所以map階段要完成的任務(wù)就是在采用Hadoop默認(rèn)的作業(yè)輸入方式之后,將value設(shè)置為key,并直接輸出(輸出中的value任意)。map中的結(jié)果經(jīng)過(guò)shuffle過(guò)程之后交給reduce。reduce階段不會(huì)管每個(gè)key有多少個(gè)value,它直接將輸入的key復(fù)制為輸出的key,并輸出就可以了(輸出中的value被設(shè)置成空了)。

      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 values,Context context)

      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)容。

      上一篇:玩轉(zhuǎn)python多線程【生長(zhǎng)吧!Python】
      下一篇:【Android 應(yīng)用開(kāi)發(fā)】BluetoothDevice詳解
      相關(guān)文章
      亚洲国产精品激情在线观看| 亚洲一级毛片免观看| 亚洲 欧洲 自拍 另类 校园| 亚洲网址在线观看| 亚洲天天在线日亚洲洲精| 亚洲AV乱码一区二区三区林ゆな| 在线观看亚洲成人| 亚洲欧洲精品成人久久奇米网 | 国产亚洲综合精品一区二区三区| 在线aⅴ亚洲中文字幕| 在线aⅴ亚洲中文字幕| 亚洲国产精品网站在线播放 | 亚洲综合av一区二区三区不卡| 亚洲最大的黄色网| 中国亚洲呦女专区| 亚洲高清一区二区三区电影| 亚洲日韩AV一区二区三区四区| 亚洲色欲啪啪久久WWW综合网| 亚洲日韩中文字幕一区| 亚洲AV无码专区在线观看成人 | 亚洲精品无码少妇30P| 国产亚洲精品AAAA片APP| 免费观看亚洲人成网站| 亚洲欧洲久久av| 亚洲综合伊人久久大杳蕉| 日本亚洲欧洲免费天堂午夜看片女人员| 久久被窝电影亚洲爽爽爽| 亚洲AV天天做在线观看| 亚洲精品免费视频| 亚洲成人黄色网址| 亚洲三级高清免费| 亚洲AV无码AV男人的天堂不卡 | 老司机亚洲精品影院| 亚洲精品网站在线观看你懂的| 亚洲国产日韩在线成人蜜芽 | 亚洲色婷婷一区二区三区| 亚洲AV区无码字幕中文色| 亚洲乱码在线播放| 亚洲Av永久无码精品黑人| 亚洲国产一成久久精品国产成人综合 | 亚洲精品高清在线|