溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Hadoop單點(diǎn)部署與案例開(kāi)發(fā)(微博用戶數(shù)據(jù)分析)

發(fā)布時(shí)間:2020-07-21 23:28:02 來(lái)源:網(wǎng)絡(luò) 閱讀:1197 作者:天夣 欄目:大數(shù)據(jù)

一、環(huán)境搭建

1、Hadoop運(yùn)行環(huán)境搭建

1.1 安裝虛擬機(jī)

1)下載并安裝VMware虛擬機(jī)軟件。

2)創(chuàng)建虛擬機(jī),實(shí)驗(yàn)環(huán)境虛擬機(jī)配置如下圖所示。

Hadoop單點(diǎn)部署與案例開(kāi)發(fā)(微博用戶數(shù)據(jù)分析)

3)安裝Ubuntu系統(tǒng),安裝結(jié)果如下圖所示。

Hadoop單點(diǎn)部署與案例開(kāi)發(fā)(微博用戶數(shù)據(jù)分析)

1.2  配置JDK環(huán)境

下載并安裝JDK,安裝結(jié)束后需對(duì)java環(huán)境進(jìn)行配置,配置成功結(jié)果如下所示。

Hadoop單點(diǎn)部署與案例開(kāi)發(fā)(微博用戶數(shù)據(jù)分析)

2、Hadoop安裝和部署

1)創(chuàng)建Hadoop安裝文件夾,并切到到此路徑下。

Hadoop單點(diǎn)部署與案例開(kāi)發(fā)(微博用戶數(shù)據(jù)分析)

2)從 hadoop.apache.org 下載Hadoop 安裝文件,并復(fù)制文件到安裝Hadoop的文件夾中。下載地址如下圖所示,本次試驗(yàn)選取較為穩(wěn)定的最新版,即2.7.3版。

Hadoop單點(diǎn)部署與案例開(kāi)發(fā)(微博用戶數(shù)據(jù)分析)

3)解壓Hadoop文件。

Hadoop單點(diǎn)部署與案例開(kāi)發(fā)(微博用戶數(shù)據(jù)分析)

4)修改配置文件

下面來(lái)寫配置文件core-site.xml、hdfs-site.xml、hadoop-env.sh三個(gè)文件這三個(gè)文件都在~/hadoop/hadoop-2.7.3/etc/hadoop/下,在前兩個(gè)文件中的和中寫入如下內(nèi)容。

第一個(gè)文件core-site.xml

Hadoop單點(diǎn)部署與案例開(kāi)發(fā)(微博用戶數(shù)據(jù)分析)

請(qǐng)注意/home/ealon/hadoop/tmp文件夾要被替換為計(jì)算機(jī)當(dāng)前的用戶目錄中的tmp文件夾沒(méi)有請(qǐng)創(chuàng)建。

第二個(gè)文件hdfs-site.xml

Hadoop單點(diǎn)部署與案例開(kāi)發(fā)(微博用戶數(shù)據(jù)分析)

第三個(gè)文件hadoop-env.sh中找到如下行然后寫入內(nèi)容。

Hadoop單點(diǎn)部署與案例開(kāi)發(fā)(微博用戶數(shù)據(jù)分析)

接下來(lái)在系統(tǒng)環(huán)境變量中寫入Hadoop的環(huán)境變量gedit /etc/environment

#在文件的結(jié)尾""之內(nèi)加上

:/home/ealon/hadoop/hadoop-2.7.3/bin

:/home/ealon/hadoop/hadoop-2.7.3/sbin

5)重啟虛擬機(jī)

首先重啟系統(tǒng),待開(kāi)機(jī)后,輸入如下命令hadoop version,驗(yàn)證Hadoop環(huán)境是否安裝成功。當(dāng)看到屏幕上顯示Hadoop的版本號(hào)即說(shuō)明單機(jī)模式已經(jīng)配置完成。如下圖所示。


Hadoop單點(diǎn)部署與案例開(kāi)發(fā)(微博用戶數(shù)據(jù)分析)

6)啟動(dòng)HDFS

通過(guò)使用偽分布模式,啟動(dòng)HDFS服務(wù)。首先需對(duì)HDFS進(jìn)行格式化處理。

Hadoop單點(diǎn)部署與案例開(kāi)發(fā)(微博用戶數(shù)據(jù)分析)

顯示如下內(nèi)容即成功格式化。

Hadoop單點(diǎn)部署與案例開(kāi)發(fā)(微博用戶數(shù)據(jù)分析)

7)啟動(dòng)HDFS

Hadoop單點(diǎn)部署與案例開(kāi)發(fā)(微博用戶數(shù)據(jù)分析)

8)查看進(jìn)程

運(yùn)行jps命令。如看到屏幕上顯示如下內(nèi)容即說(shuō)明HDFS已經(jīng)成功

Hadoop單點(diǎn)部署與案例開(kāi)發(fā)(微博用戶數(shù)據(jù)分析)

9)停止HDFS

Hadoop單點(diǎn)部署與案例開(kāi)發(fā)(微博用戶數(shù)據(jù)分析)

通過(guò)以上操作,Hadoop環(huán)境就基本搭建完畢。

3、Hadoop-Eclipse-Plugin安裝與配置

3.1 插件安裝

要在 Eclipse 上編譯和運(yùn)行 MapReduce 程序,需要安裝 hadoop-eclipse-plugin,可下載 Github 上的 hadoop2x-eclipse-plugin。

下載后,將 release 中的hadoop-eclipse-kepler-plugin-2.6.0.jar復(fù)制到 Eclipse 安裝目錄的 plugins 文件夾中,運(yùn)行 eclipse -clean 重啟 Eclipse 即可。

unzip-qo ~/下載/hadoop2x-eclipse-plugin-master.zip -d ~/下載    # 解壓到 ~/下載

sudocp ~/下載/hadoop2x-eclipse-plugin-master/release/hadoop-eclipse-plugin-2.6.0.jar/usr/lib/eclipse/plugins/    # 復(fù)制到 eclipse 安裝目錄的 plugins 目錄下

/usr/lib/eclipse/eclipse-clean    # 添加插件后需要用這種方式使插件生效

3.2 插件配置

在繼續(xù)配置前請(qǐng)確保已經(jīng)開(kāi)啟了 Hadoop。

啟動(dòng) Eclipse 后就可以在左側(cè)的Project Explorer中看到 DFS Locations(若看到的是 welcome 界面,點(diǎn)擊左上角的 x 關(guān)閉就可以看到了。

Hadoop單點(diǎn)部署與案例開(kāi)發(fā)(微博用戶數(shù)據(jù)分析)

插件需要進(jìn)一步的配置

第一步:選擇 Window 菜單下的 Preference。

Hadoop單點(diǎn)部署與案例開(kāi)發(fā)(微博用戶數(shù)據(jù)分析)

打開(kāi)Preference打開(kāi)Preference

此時(shí)會(huì)彈出一個(gè)窗體,窗體的左側(cè)會(huì)多出 Hadoop Map/Reduce 選項(xiàng),點(diǎn)擊此選項(xiàng),選擇 Hadoop 的安裝目錄(如/usr/local/hadoop,Ubuntu不好選擇目錄,直接輸入就行)。

Hadoop單點(diǎn)部署與案例開(kāi)發(fā)(微博用戶數(shù)據(jù)分析)

選擇 Hadoop 的安裝目錄選擇Hadoop 的安裝目錄

第二步:切換 Map/Reduce 開(kāi)發(fā)視圖,選擇 Window 菜單下選擇 Open Perspective ->OtherCentOS Window -> Perspective-> Open Perspective -> Other),彈出一個(gè)窗體,從中選擇 Map/Reduce 選項(xiàng)即可進(jìn)行切換。

Hadoop單點(diǎn)部署與案例開(kāi)發(fā)(微博用戶數(shù)據(jù)分析)

切換 Map/Reduce 開(kāi)發(fā)視圖切換Map/Reduce 開(kāi)發(fā)視圖

第三步:建立與 Hadoop 集群的連接,點(diǎn)擊 Eclipse軟件右下角的 Map/Reduce Locations 面板,在面板中單擊右鍵,選擇 New Hadoop Location。

Hadoop單點(diǎn)部署與案例開(kāi)發(fā)(微博用戶數(shù)據(jù)分析)

建立與 Hadoop 集群的連接建立與Hadoop 集群的連接

在彈出來(lái)的 General 選項(xiàng)面板中,General 的設(shè)置要與 Hadoop 的配置一致。一般兩個(gè) Host 值是一樣的,如果是偽分布式,填寫 localhost 即可,另外我使用的Hadoop偽分布式配置,設(shè)置 fs.defaultFS hdfs://localhost:9000,則 DFS Master Port 要改為 9000Map/Reduce(V2) Master Port 用默認(rèn)的即可,Location Name 隨意填寫。

最后的設(shè)置如下圖所示:

Hadoop單點(diǎn)部署與案例開(kāi)發(fā)(微博用戶數(shù)據(jù)分析)

Hadoop Location 的設(shè)置HadoopLocation 的設(shè)置

Advancedparameters 選項(xiàng)面板是對(duì) Hadoop 參數(shù)進(jìn)行配置,實(shí)際上就是填寫 Hadoop 的配置項(xiàng)(/usr/local/hadoop/etc/hadoop中的配置文件),如我配置了 hadoop.tmp.dir ,就要進(jìn)行相應(yīng)的修改。但修改起來(lái)會(huì)比較繁瑣,我們可以通過(guò)復(fù)制配置文件的方式解決(下面會(huì)說(shuō)到)。

總之,我們只要配置 General 就行了,點(diǎn)擊 finish,Map/Reduce Location 就創(chuàng)建好了。

3.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)行操作了。

Hadoop單點(diǎn)部署與案例開(kāi)發(fā)(微博用戶數(shù)據(jù)分析)


使用Eclipse查看HDFS中的文件內(nèi)容

如果無(wú)法查看,可右鍵點(diǎn)擊 Location 嘗試 Reconnect 或重啟 Eclipse。

3.4 Eclipse 中創(chuàng)建 MapReduce 項(xiàng)目

點(diǎn)擊 File 菜單,選擇 New -> Project…:

Hadoop單點(diǎn)部署與案例開(kāi)發(fā)(微博用戶數(shù)據(jù)分析)

創(chuàng)建Project

選擇 Map/ReduceProject,點(diǎn)擊 Next。

Hadoop單點(diǎn)部署與案例開(kāi)發(fā)(微博用戶數(shù)據(jù)分析)

創(chuàng)建MapReduce項(xiàng)目

填寫 Projectname 為 WordCount 即可,點(diǎn)擊 Finish 就創(chuàng)建好了項(xiàng)目。

Hadoop單點(diǎn)部署與案例開(kāi)發(fā)(微博用戶數(shù)據(jù)分析)

填寫項(xiàng)目名

此時(shí)在左側(cè)的Project Explorer 就能看到剛才建立的項(xiàng)目了。

Hadoop單點(diǎn)部署與案例開(kāi)發(fā)(微博用戶數(shù)據(jù)分析)

項(xiàng)目創(chuàng)建完成

接著右鍵點(diǎn)擊剛創(chuàng)建的WordCount 項(xiàng)目,選擇 New -> Class

Hadoop單點(diǎn)部署與案例開(kāi)發(fā)(微博用戶數(shù)據(jù)分析)

新建Class

需要填寫兩個(gè)地方:在 Package 處填寫org.apache.hadoop.examples;在 Name 處填寫 WordCount。

Hadoop單點(diǎn)部署與案例開(kāi)發(fā)(微博用戶數(shù)據(jù)分析)

填寫Class信息

創(chuàng)建 Class 完成后,在 Project src 中就能看到 WordCount.java 這個(gè)文件。將如下 WordCount 的代碼復(fù)制到該文件中。

package org.apache.hadoop.examples;
import java.io.IOException;
import java.util.StringTokenizer;
importorg.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.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
importorg.apache.hadoop.mapreduce.lib.input.FileInputFormat;
importorg.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
importorg.apache.hadoop.util.GenericOptionsParser;
public class WordCount {
 public static class TokenizerMapper
      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);
     }
    }
  }
 public static class IntSumReducer
      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);
    }
  }
 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(TokenizerMapper.class);
   job.setCombinerClass(IntSumReducer.class);
   job.setReducerClass(IntSumReducer.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);
  }
}
3.5 通過(guò) Eclipse 運(yùn)行 MapReduce

在運(yùn)行 MapReduce 程序前,還需要執(zhí)行一項(xiàng)重要操作(也就是上面提到的通過(guò)復(fù)制配置文件解決參數(shù)設(shè)置問(wèn)題):將/usr/local/hadoop/etc/hadoop 中將有修改過(guò)的配置文件(如偽分布式需要 core-site.xml hdfs-site.xml),以及 log4j.properties 復(fù)制到 WordCount 項(xiàng)目下的 src 文件夾(~/workspace/WordCount/src)中:

cp/usr/local/hadoop/etc/hadoop/core-site.xml ~/workspace/WordCount/src

cp/usr/local/hadoop/etc/hadoop/hdfs-site.xml ~/workspace/WordCount/src

cp/usr/local/hadoop/etc/hadoop/log4j.properties ~/workspace/WordCount/src

沒(méi)有復(fù)制這些文件的話程序?qū)o(wú)法正確運(yùn)行,本教程最后再解釋為什么需要復(fù)制這些文件。

復(fù)制完成后,務(wù)必右鍵點(diǎn)擊 WordCount 選擇 refresh 進(jìn)行刷新(不會(huì)自動(dòng)刷新,需要手動(dòng)刷新),可以看到文件結(jié)構(gòu)如下所示:

Hadoop單點(diǎn)部署與案例開(kāi)發(fā)(微博用戶數(shù)據(jù)分析)

WordCount項(xiàng)目文件結(jié)構(gòu)

點(diǎn)擊工具欄中的 Run 圖標(biāo),或者右鍵點(diǎn)擊 Project Explorer 中的 WordCount.java,選擇 Run As -> Run onHadoop,就可以運(yùn)行 MapReduce 程序了。不過(guò)由于沒(méi)有指定參數(shù),運(yùn)行時(shí)會(huì)提示 “Usage: wordcount “,需要通過(guò)Eclipse設(shè)定一下運(yùn)行參數(shù)。

右鍵點(diǎn)擊剛創(chuàng)建的 WordCount.java,選擇 Run As -> RunConfigurations,在此處可以設(shè)置運(yùn)行時(shí)的相關(guān)參數(shù)(如果 Java Application 下面沒(méi)有 WordCount,那么需要先雙擊 Java Application)。切換到 “Arguments” 欄,在 Program arguments 處填寫 “input output” 就可以了。

Hadoop單點(diǎn)部署與案例開(kāi)發(fā)(微博用戶數(shù)據(jù)分析)

設(shè)置程序運(yùn)行參數(shù)

或者也可以直接在代碼中設(shè)置好輸入?yún)?shù)。可將代碼 main() 函數(shù)的 String[] otherArgs= new GenericOptionsParser(conf, args).getRemainingArgs(); 改為:

//String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();

String[]otherArgs=new String[]{"input","output"}; /* 直接設(shè)置輸入?yún)?shù) */

設(shè)定參數(shù)后,再次運(yùn)行程序,可以看到運(yùn)行成功的提示,刷新 DFS Location 后也能看到輸出的 output 文件夾。

Hadoop單點(diǎn)部署與案例開(kāi)發(fā)(微博用戶數(shù)據(jù)分析)

WordCount 運(yùn)行結(jié)果

至此,你就可以使用 Eclipse 方便的進(jìn)行 MapReduce程序的開(kāi)發(fā)了。

二、實(shí)驗(yàn)內(nèi)容

通過(guò)網(wǎng)絡(luò)下載userdata.csv微博用戶數(shù)據(jù),共有14388385條用戶數(shù)據(jù),包含:用戶id,所在省份,性別,是否認(rèn)證信息。數(shù)據(jù)截圖如下圖所示。

Hadoop單點(diǎn)部署與案例開(kāi)發(fā)(微博用戶數(shù)據(jù)分析)


項(xiàng)目代碼結(jié)構(gòu)如下圖所示:

Hadoop單點(diǎn)部署與案例開(kāi)發(fā)(微博用戶數(shù)據(jù)分析)

1、用戶性別分布

Maper函數(shù):

Hadoop單點(diǎn)部署與案例開(kāi)發(fā)(微博用戶數(shù)據(jù)分析)

Reducer函數(shù):

Hadoop單點(diǎn)部署與案例開(kāi)發(fā)(微博用戶數(shù)據(jù)分析)

計(jì)算結(jié)果分布如下圖所示:

Hadoop單點(diǎn)部署與案例開(kāi)發(fā)(微博用戶數(shù)據(jù)分析)

從圖中可以觀察到,微博用戶中女性所占比例較大,多余男性用戶。

2、用戶省份分布

該部分Maper函數(shù)、Reducer函數(shù)與性別統(tǒng)計(jì)算法相同,不再贅述,計(jì)算結(jié)果如下圖所示:

Hadoop單點(diǎn)部署與案例開(kāi)發(fā)(微博用戶數(shù)據(jù)分析)

從圖中可以看出,廣東、北京、上海、江蘇、浙江等地微博用戶量較大。

3、用戶實(shí)名驗(yàn)證分布

該部分Maper函數(shù)、Reducer函數(shù)與性別統(tǒng)計(jì)算法相同,不再贅述,計(jì)算結(jié)果如下圖所示:

Hadoop單點(diǎn)部署與案例開(kāi)發(fā)(微博用戶數(shù)據(jù)分析)

從圖中可以看出,非實(shí)名用戶在微博用戶中占絕大部分。

4、主要省市男女比例分布

該部分Maper函數(shù)、Reducer函數(shù)與性別統(tǒng)計(jì)算法基本相同,不再贅述,計(jì)算結(jié)果如下圖所示:

Hadoop單點(diǎn)部署與案例開(kāi)發(fā)(微博用戶數(shù)據(jù)分析)

各省市女性用戶數(shù)量均占所在省市總用戶數(shù)的一半以上。

三、總結(jié)

通過(guò)瀏覽控制臺(tái)和Web管理端輸出結(jié)果,算法執(zhí)行過(guò)程未見(jiàn)明顯異?;驁?bào)錯(cuò)。控制臺(tái)輸出結(jié)果如下圖所示:

Hadoop單點(diǎn)部署與案例開(kāi)發(fā)(微博用戶數(shù)據(jù)分析)

Web端面板統(tǒng)計(jì)結(jié)果如下圖所示:

Hadoop單點(diǎn)部署與案例開(kāi)發(fā)(微博用戶數(shù)據(jù)分析)

任務(wù)執(zhí)行結(jié)果統(tǒng)計(jì)如下圖所示:

Hadoop單點(diǎn)部署與案例開(kāi)發(fā)(微博用戶數(shù)據(jù)分析)

結(jié)合水運(yùn)行業(yè)實(shí)際需求,智慧港口建設(shè)作為我國(guó)港口轉(zhuǎn)型升級(jí)的重要途徑,其所涉及的關(guān)鍵技術(shù)就包含港口數(shù)據(jù)分析與處理。Hadoop技術(shù)在互聯(lián)網(wǎng)行業(yè)已廣泛應(yīng)用,但在港口自動(dòng)化、智能化建設(shè)中還未起到關(guān)鍵、核心作用。因此,大數(shù)據(jù)分析與挖掘技術(shù)在港口領(lǐng)域的深度應(yīng)用,是港口發(fā)展的高級(jí)階段。對(duì)我國(guó)港口而言,通過(guò)打造智慧港口,優(yōu)化提升港口基礎(chǔ)設(shè)施和管理模式,實(shí)現(xiàn)港口功能創(chuàng)新、技術(shù)創(chuàng)新和服務(wù)創(chuàng)新,已成為我國(guó)港口提高國(guó)際競(jìng)爭(zhēng)力,完成轉(zhuǎn)型升級(jí)的重要途徑。通過(guò)對(duì)大數(shù)據(jù)技術(shù)在智慧港口中應(yīng)用研究,是我國(guó)港口信息化積累的海量數(shù)據(jù)發(fā)揮其巨大優(yōu)勢(shì),為我國(guó)港口管理部門以及港口企業(yè)提供決策支撐,具有重要的顯示意義。


向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI