1. 程式人生 > >Hadoop之本地執行模式詳解

Hadoop之本地執行模式詳解

Hadoop的執行模式分為3種:本地執行模式,偽分佈執行模式,叢集執行模式,相應概念如下: 

1、獨立模式即本地執行模式(standalone或local mode) 

無需執行任何守護程序(daemon),所有程式都在單個JVM上執行。由於在本機模式下測試和除錯MapReduce程式較為方便,因此,這種模式適宜用在開發階段。 

2、偽分佈執行模式 

偽分佈:如果hadoop對應的Java程序都執行在一個物理機器上,稱為偽分佈執行模式,如下圖所示:
[root@hadoop20 dir2]# jps
8993 Jps
7409 SecondaryNameNode
7142 NameNode
7260 DataNode 8685 NodeManager 8590 ResourceManager
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

3、叢集模式 

如果Hadoop對應的Java程序執行在多臺物理機器上,稱為叢集模式.[叢集就是有主有從] ,如下圖所示:
[root@hadoop11 local]# jps
18046 NameNode
30927 Jps
18225 SecondaryNameNode
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4
[root@hadoop22 ~]# jps
9741 ResourceManager
16569 Jps
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3
[root@hadoop33 ~]# jps
12775
DataNode 20189 Jps 12653 NodeManager
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4
[root@hadoop44 ~]# jps
10111 DataNode
17519 Jps
9988 NodeManager
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4
[root@hadoop55 ~]# jps
11563 NodeManager
11686 DataNode
19078 Jps
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4
[root@hadoop66 ~]# jps
10682 DataNode
10560 NodeManager
18085 Jps
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

注意:偽分佈模式就是在一臺伺服器上面模擬叢集環境,但僅僅是機器數量少,其通訊機制與執行過程與真正的叢集模式是一樣的,hadoop的偽分佈執行模式可以看做是叢集執行模式的特殊情況。 
為了方便文章的後續說明,先介紹一下hadoop的體系結構: 
這裡寫圖片描述

 
從Hadoop的體系結構可以看出,HDFS與MapReduce分別是Hadoop的標配檔案系統與標配計算框架,但是呢?–我們完全可以選擇別的檔案系統(如Windows的NTFS,Linux的ext4)與別的計算框架(如Spark、storm等)為Hadoop所服務,這恰恰說明了hadoop的鬆耦合性。在hadoop的配置檔案中,我們是通過core-site.xml這個配置檔案指定所用的檔案系統的。

<property>
    <name>fs.defaultFS</name>
    <value>hdfs://hadoop11:9000</value>
</property>
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

下面將基於linux與Windows兩種開發環境詳細說明hadoop的本地執行模式,其中核心知識點如下: 
Hadoop的本地執行模式: 
1、在windows的eclipse裡面直接執行main方法,就會將job提交給本地執行器localjobrunner執行 
—-輸入輸出資料可以放在本地路徑下(c:/wc/srcdata/) 
—-輸入輸出資料也可以放在hdfs中(hdfs://hadoop20:9000/dir)

2、在linux的eclipse裡面直接執行main方法,但是不要新增yarn相關的配置,也會提交給localjobrunner執行 
—-輸入輸出資料可以放在本地路徑下(/usr/local/) 
—-輸入輸出資料也可以放在hdfs中(hdfs://hadoop20:9000/dir) 
首先先基於Linux的開發環境進行介紹: 
這裡寫圖片描述 
以WordCount程式為例,輸入輸出檔案都放在本地路徑下,程式碼如下:

package MapReduce;

import java.io.IOException;


import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;
import org.apache.hadoop.mapreduce.lib.partition.HashPartitioner;




public class WordCount
{
     public static String path1 = "file:///usr/local/word.txt"; //file:///代表本地檔案系統中路徑的意思
     public static String path2 = "file:///usr/local/dir1";
     public static void main(String[] args) throws Exception
     {
         Configuration conf = new Configuration();
         FileSystem fileSystem = FileSystem.get(conf);

         if(fileSystem.exists(new Path(path2)))
         {
             fileSystem.delete(new Path(path2), true);
         }
         Job job = Job.getInstance(conf);
         job.setJarByClass(WordCount.class);

         FileInputFormat.setInputPaths(job, new Path(path1));
         job.setInputFormatClass(TextInputFormat.class);
         job.setMapperClass(MyMapper.class);
         job.setMapOutputKeyClass(Text.class);
         job.setMapOutputValueClass(LongWritable.class);

         job.setNumReduceTasks(1);
         job.setPartitionerClass(HashPartitioner.class);


         job.setReducerClass(MyReducer.class);
         job.setOutputKeyClass(Text.class);
         job.setOutputValueClass(LongWritable.class);
         job.setOutputFormatClass(TextOutputFormat.class);
         FileOutputFormat.setOutputPath(job, new Path(path2));
         job.waitForCompletion(true);
     }    
     public  static  class MyMapper extends Mapper<LongWritable, Text, Text, LongWritable>
     {
             protected void map(LongWritable k1, Text v1,Context context)throws IOException, InterruptedException
            {
                 String[] splited = v1.toString().split("\t");
                 for (String string : splited)
                {
                       context.write(new Text(string),new LongWritable(1L));
                }
            }     
     }
     public  static class MyReducer extends Reducer<Text, LongWritable, Text, LongWritable>
     {
        protected void reduce(Text k2, Iterable<LongWritable> v2s,Context context)throws IOException, InterruptedException
        {
                 long sum = 0L;
                 for (LongWritable v2 : v2s)
                {
                    sum += v2.get();
                }
                context.write(k2,new LongWritable(sum));
        }
     }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80

在程式的執行過程中,相應的java程序如下:

[[email protected] local]# jps
7621                //對應的是啟動的eclipse
9833 Jps
9790 WordCount      //對應的是WordCount程式
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

下面我們在本地檢視執行結果:

[root@hadoop20 dir]# pwd
/usr/local/dir1
[root@hadoop20 dir1]# more part-r-00000 
hello   2
me      1
you     1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

接下來我們將輸入路徑選擇HDFS檔案系統中的路徑,輸出路徑還是本地linux檔案系統,首先我們在linux上面啟動HDFS分散式檔案系統。

[[email protected] dir]# start-dfs.sh
Starting namenodes on [hadoop20]
hadoop20: starting namenode, logging to /usr/local/hadoop/logs/hadoop-root-namenode-hadoop20.out
hadoop20: starting datanode, logging to /usr/local/hadoop/logs/hadoop-root-datanode-hadoop20.out
Starting secondary namenodes [0.0.0.0]
0.0.0.0: starting secondarynamenode, logging to /usr/local/hadoop/logs/hadoop-root-secondarynamenode-hadoop20.out
[root[email protected] dir]# jps
10260 SecondaryNameNode
7621 
10360 Jps
9995 NameNode
10110 DataNode
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 相關推薦

    Hadoop本地執行模式

    Hadoop的執行模式分為3種:本地執行模式,偽分佈執行模式,叢集執行模式,相應概念如下:  1、獨立模式即本地執行模式(standalone或local mode)  無需執行任何守護程序(daemon),所有程式都在單個JVM上執行。由於在本機模式下測試和

    設計模式觀察者模式

    http 通知 stat 發布-訂閱 () class arraylist nag .cn 觀察者模式又稱為發布-訂閱模式,涉及的角色有:   ●  抽象主題   ●  具體主題   ●  抽象觀察者   ●  具體觀察者 案例演示:公司發放工資的時候通知所有觀察者工資已發

    設計模式 簡單工廠模式

    技術分享 接口 create [] 幫助 cut 小蘿莉 filter 類之間的關系 定義:從設計模式的類型上來說,簡單工廠模式是屬於創建型模式,又叫做靜態工廠方法(Static Factory Method)模式,但不屬於23種GOF設計模式之一。簡單工廠模式是由一個工廠

    ( 轉 ) MySQL高級 explain執行計劃

    ont dex 常見 fulltext lte name system details 無法 使用explain關鍵字可以模擬優化器執行SQL查詢語句,從而知道MySQL是如何處理你的SQL語句的,分析你的查詢語句或是表結構的性能瓶頸。 explain執行計劃包含的信息

    面試題——多執行

    多執行緒作為Java中很重要的一個知識點,在此還是有必要總結一下的。 一.執行緒的生命週期及五種基本狀態 關於Java中執行緒的生命週期,首先看一下下面這張較為經典的圖: 上圖中基本上囊括了Java中多執行緒各重要知識點。掌握了上圖中的各知識點,Java中的多執行緒也就基本上掌握了。主

    MysqlExpain執行計劃

    使用explain關鍵字可以模擬優化器執行SQL查詢語句,從而知道MySQL是如何處理你的SQL語句的,分析你的查詢語句或是表結構的效能瓶頸。 explain執行計劃包含的資訊 其中最重要的欄位為:id、type、key、rows、Extra

    設計模式單例模式

    單例模式寫法大全,也許有你不知道的寫法 導航 引言 什麼是單例? 單例模式作用 單例模式的實現方法 引言 單例模式想必是大家接觸的比較多的一種模式了,就算沒用過但是肯定聽過他的鼎鼎大名了。在我初入程式設計界時聽到最多的就是單例模式,工廠模式,觀察者模式了。特別是觀察者模

    設計模式(建立型):Java常用23種設計模式單例模式以及Java程式碼實現

    可以說單例模式是所有設計模式中最簡單的一種。 單例模式就是說系統中對於某類的只能有一個物件,不可能出來第二個。 單例模式也是23中設計模式中在面試時少數幾個會要求寫程式碼的模式之一。主要考察的是多執行緒下面單例模式的執行緒安全性問題。 1.多執行緒安全單例模式例項一(不使用同步鎖)

    hadoop[11]-本地執行模式

    每次除錯都打包上傳到伺服器,效率很低,所以可以在本地模擬執行,以第9節的程式碼為例,設定要處理的文字和輸出目錄為本地目錄: //設定要處理的文字資料存放路徑 FileInputFormat.setInputPaths(wordCountJob, "d:/wordcount/srcdata"); //設

    MySQL高階 explain執行計劃

    使用explain關鍵字可以模擬優化器執行SQL查詢語句,從而知道MySQL是如何處理你的SQL語句的,分析你的查詢語句或是表結構的效能瓶頸。 explain執行計劃包含的資訊 其中最重要的欄位為:id、type、key、rows、Extra 各欄位詳解 id

    Spark執行模式

    Spark執行模式 Local模式 Local[n] 本地模式 啟動n個執行緒 Local模式通常用於測試用,直接bin/spark-shell啟動即可。 Standalone模式 Standalone是Spark自帶的資源管理器,無需依賴任何其他資源管理系統 配置

    javascript中設計模式橋接模式(Bridge design)

    一、橋接模式 1、橋接模式是一種既能把倆個物件連線在一起,又能避免二者間的強耦合的方法。通過“橋”把彼此聯絡起來,同時又允許他們各自獨立變化 2、橋接模式主要作用就是將抽象與其實現隔離開來,以便二者獨

    Java與模式建造者模式

    建造模式是物件的建立模式。建造模式可以將一個產品的內部表象與產品的生成過程分割開來,從而可以使一個建造過程生成具有不同的內部表象的產品物件。 產品的內部表象 一個產品常有不同的組成成分作為產品的零件,這些零件有可能是物件,也有可能不是物件,它們通常又叫做產品的內部表象。不同

    HadoopHDFS容錯機制

    一、HDFS容錯機制    1.1、故障型別(三類故障)   1)節點失敗        2)網路故障        3)資料損壞(髒資料)      1.2、故障檢測機制   1)節點失敗檢測機制                  2)通訊故障檢測機制        3)資料錯誤檢

    MySQL系列-優化explain執行計劃

    1.id介紹 這個id不是主鍵的意思,他是用來標識select查詢的序列號,包含一組數字,表示查詢中執行select子句或者操作表的順序。 會出現以下情況: id相同:按從上到下順序執行 id不同:id值越大,優先順序越高,越先被執行 id相同不同的同時存在:優先執

    大資料基礎課Hadoop MapReduce執行過程

    述一下mapreduce的流程(shuffle的sort,partitions,group) 首先是 Mapreduce經過SplitInput 輸入分片 決定map的個數在用Record記錄 key value。然後分為以下三個流程: Map: 輸入 key

    javascript設計模式命令模式

    這一 clas 例子 別了 logs 操作 book 技術 概念   每種設計模式的出現都是為了彌補語言在某方面的不足,解決特定環境下的問題。思想是相通的。只不過不同的設計語言有其特定的實現。對javascript這種動態語言來說,弱類型的特性,與生俱來的多態性,導致某些設

    javascript運行機制執行順序

    onload 預編譯 c# step 而且 () 我們 術語 aaa JavaScript是一種描述型腳本語言,它不同於java或C#等編譯性語言,它不需要進行編譯成中間語言,而是由瀏覽器進行動態地解析與執行。那麽JavaScript是怎麽來進行解析的嗎?它的執行順序又是如

    Hadoop本地執行模式執行官方案例(Grep和WordCount)

    官方Grep案例 #1,在hadoop-2.7.2檔案下建立input資料夾 [[email protected] hadoop-2.7.2]$ mkdir input [[email protected] hadoop-2.7.2]$ ll 總用量 56 drwx

    Jmater (十七) 命令列(非GUI)模式(二) 執行代理設定

    閒話少述,接 上文繼續。。。   5、設定代理     jmeter -n -t Jmeter分散式測試示例.jmx -H 20.9.215.90 -P 9999 -1 report\01-result.csv -j report\01-log.log     注意:-H 20.9.215.9