Hadoop的快速指南

2018-12-09 16:51 更新

Hadoop的 - 大數(shù)據(jù)概述

“在過去的幾年里生成世界數(shù)據(jù)的90%。”

由于新技術(shù),設(shè)備,和類似的社交網(wǎng)站通信裝置的出現(xiàn),由人類產(chǎn)生的數(shù)據(jù)的量正在迅速每年都在增長。美國從一開始的時候,直到2003年生產(chǎn)的數(shù)據(jù)量為5十億字節(jié)。如果堆積在磁盤形式的數(shù)據(jù)可能填充整個足球場。相同量在每兩天創(chuàng)建于2011年,并在每十分鐘在2013年該速率仍在增長極大。雖然生產(chǎn)的所有信息是有意義的,在處理時是有用的,它被忽略。

什么是大數(shù)據(jù)?

大數(shù)據(jù)是不能用傳統(tǒng)的計算技術(shù)來處理大型數(shù)據(jù)集的集合。它不是一個單一的技術(shù)或工具,而它涉及的業(yè)務(wù)和技術(shù)的許多領(lǐng)域。

什么來在大數(shù)據(jù)?

大數(shù)據(jù)包括通過不同的設(shè)備和應(yīng)用程序所產(chǎn)生的數(shù)據(jù)。下面給出的是一些大數(shù)據(jù)的保護傘下前來字段。

  • 黑匣子數(shù)據(jù) :這是直升機,飛機和飛機的,組件等,它抓住了機組人員的聲音,麥克風(fēng)和耳機錄音和飛機的性能信息。

  • 社會化媒體數(shù)據(jù) :社會化媒體,如Facebook和Twitter保持信息和張貼數(shù)百萬世界各地的人的意見。

  • 聯(lián)交所數(shù)據(jù) :交易所數(shù)據(jù)保存有關(guān)的“買入”和“賣出”上由客戶提出不同的公司的比例作出決策的信息。

  • 電網(wǎng)數(shù)據(jù) :電網(wǎng)數(shù)據(jù)保存由特定節(jié)點相對于基站所消耗的信息。

  • 運輸數(shù)據(jù) :運輸數(shù)據(jù)包括車輛的型號,容量,距離和可用性。

  • 搜索引擎數(shù)據(jù) :搜索引擎獲取大量來自不同數(shù)據(jù)庫中的數(shù)據(jù)。

大數(shù)據(jù)

因此,大數(shù)據(jù)包括體積龐大,高速和可擴展的各種數(shù)據(jù)。在它的數(shù)據(jù)將是三種類型。

  • 結(jié)構(gòu)化數(shù)據(jù) :關(guān)系數(shù)據(jù)。

  • 半結(jié)構(gòu)化數(shù)據(jù) :XML數(shù)據(jù)。

  • 非結(jié)構(gòu)化數(shù)據(jù) :字,PDF,文本,媒體日志。

大數(shù)據(jù)的優(yōu)勢

  • 使用保持Facebook等社交網(wǎng)絡(luò)中的信息,營銷機構(gòu)了解他們的活動,促銷等廣告媒介的響應(yīng)。

  • 在社會化媒體的喜好和他們的消費者的產(chǎn)品認知,產(chǎn)品企業(yè)和零售企業(yè)利用信息計劃生產(chǎn)。

  • 關(guān)于使用患者以前的病歷資料,醫(yī)院提供更好的和快速的服務(wù)。

大數(shù)據(jù)技術(shù)

大數(shù)據(jù)的技術(shù)是在提供更準確的分析,這可能導(dǎo)致產(chǎn)生更大的操作效率,降低成本,更具體決策重要的,并且減少了為業(yè)務(wù)風(fēng)險。

要充分利用大數(shù)據(jù)的力量,你將需要能夠管理和處理實時結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù)的數(shù)量巨大,并且可以保護數(shù)據(jù)隱私和安全的基礎(chǔ)設(shè)施。

有在市場上的各種技術(shù)來自不同的廠商,包括亞馬遜,IBM,微軟等,以處理大數(shù)據(jù)。雖然尋找到了處理大數(shù)據(jù)的技術(shù),我們考察了以下兩類技術(shù):

操作大數(shù)據(jù)

這些包括像的MongoDB系統(tǒng),提供用于實時運行能力,其中數(shù)據(jù)主要捕捉和存儲互動工作負荷。

NoSQL的大數(shù)據(jù)系統(tǒng)的設(shè)計充分利用已經(jīng)出現(xiàn)在過去的十年,讓大量的計算,以廉價,高效地運行新的云計算架構(gòu)的優(yōu)勢。這使得運行大數(shù)據(jù)工作負載,更易于管理,更便宜,更快速地實現(xiàn)。

一些NoSQL系統(tǒng)可以提供深入了解基于與最少的編碼和無需數(shù)據(jù)科學(xué)家和增加的基礎(chǔ)設(shè)施的實時數(shù)據(jù)模式和趨勢。

分析大數(shù)據(jù)

這些包括像大規(guī)模并行處理(MPP)數(shù)據(jù)庫系統(tǒng)和MapReduce提供了可能觸及大部分或全部數(shù)據(jù)的回顧與復(fù)雜的分析分析能力的系統(tǒng)。

MapReduce的提供分析數(shù)據(jù)的基礎(chǔ)上的MapReduce可從單個服務(wù)器可以按比例放大至數(shù)千高端和低端機即由SQL提供的功能,并且一個系統(tǒng)的互補的新方法。

這兩類技術(shù)是互補的,并經(jīng)常一起部署。

運營與分析系統(tǒng)

操作分析
潛伏 1毫秒 - 100毫秒 1分鐘 - 100分鐘
并發(fā) 1000 - 100,000 1 - 10
訪問模式寫入和讀取
查詢選擇非選擇性
數(shù)據(jù)范圍操作回顧
最終用戶顧客數(shù)據(jù)科學(xué)家
技術(shù) NoSQL的 MapReduce的,MPP數(shù)據(jù)庫

大數(shù)據(jù)挑戰(zhàn)

與大數(shù)據(jù)相關(guān)的主要挑戰(zhàn)如下:

  • 捕獲數(shù)據(jù)
  • 策展
  • 存儲
  • 搜索
  • 分享
  • 轉(zhuǎn)讓
  • 分析
  • 介紹

為了實現(xiàn)上述挑戰(zhàn),企業(yè)通常需要企業(yè)服務(wù)器的幫助。

Hadoop的 - 大數(shù)據(jù)解決方案

傳統(tǒng)的企業(yè)方針

在這種方法中,一個企業(yè)將有一個計算機存儲和處理大的數(shù)據(jù)。對于存儲而言,程序員將自己選擇的數(shù)據(jù)庫廠商,如Oracle,IBM等的幫助下在這種方法中,用戶與應(yīng)用程序,從而處理數(shù)據(jù)存儲和分析的部分進行互動。

傳統(tǒng)方法

局限性

這種方法正常工作與那些處理可以由標準數(shù)據(jù)庫服務(wù)器被容納,或至多被處理數(shù)據(jù)的處理器的限制少大量數(shù)據(jù)的應(yīng)用程序。但是,當(dāng)涉及到處理大量的可伸縮數(shù)據(jù),這是一個忙碌的任務(wù),通過一個單一的數(shù)據(jù)庫瓶頸來處理這些數(shù)據(jù)。

谷歌的解決方案

谷歌使用一種名為MapReduce算法解決了這個問題。這個算法將任務(wù)分成小份,并將它們分配到多臺計算機,并且收集從他們其結(jié)果整合時,形成結(jié)果數(shù)據(jù)集。

MapReduce的

Hadoop的

使用谷歌提供的解決方案,Doug Cutting開發(fā)和他的團隊開發(fā)的一個開源項目叫做HADOOP。

Hadoop的運行使用的MapReduce算法,其中數(shù)據(jù)是在與其他并行處理的應(yīng)用程序。總之,Hadoop是用于開發(fā)可以在海量數(shù)據(jù)進行完整的統(tǒng)計分析應(yīng)用。

Hadoop框架

Hadoop的 - 介紹Hadoop的

Hadoop是寫在允許跨使用簡單的編程模型的計算機集群分布的大型數(shù)據(jù)集的處理Java的Apache的開源框架。 Hadoop框架應(yīng)用程序可在提供跨計算機集群的分布式存儲和計算的環(huán)境。 Hadoop是設(shè)計用來從單一服務(wù)器到上千臺機器的擴展,每提供本地計算和存儲。

Hadoop的架構(gòu)

在其核心,Hadoop的即有兩個主要層次:

  • 加工/運算層(MapReduce的),和
  • 存儲層(Hadoop分布式文件系統(tǒng))。
Hadoop的架構(gòu)

MapReduce的

MapReduce的是一個可靠的,容錯的方式,以書面的商品硬件在谷歌設(shè)計了大量數(shù)據(jù)的高效處理(多TB數(shù)據(jù)集)的分布式應(yīng)用程序,在大型集群(數(shù)千個節(jié)點)的并行編程模型。 MapReduce的程序在Hadoop是Apache的開源框架運行。

Hadoop分布式文件系統(tǒng)

Hadoop分布式文件系統(tǒng)(HDFS)是基于谷歌文件系統(tǒng)(GFS),并提供被設(shè)計為在商用硬件上運行分布式文件系統(tǒng)。它與現(xiàn)有的分布式文件系統(tǒng)有許多相似之處。然而,來自其他分布式文件系統(tǒng)的差異顯著。它是高度容錯并且被設(shè)計為部署在低成本的硬件。將其提供給應(yīng)用程序數(shù)據(jù)高吞吐量連接,并且適用于具有大數(shù)據(jù)集的應(yīng)用程序。

除了上面提到的兩個核心組件,Hadoop框架還包括以下兩個模塊:

  • Hadoop的常見 :這些是Java庫和其他Hadoop的模塊所需的工具。

  • Hadoop的紗 :這是作業(yè)調(diào)度和集群資源管理的框架。

如何Hadoop的工作?

它是建立與處理大規(guī)模加工重配置更大的服務(wù)器相當(dāng)昂貴,但作為一種替代方法,您可以單CPU綁在一起許多商品的電腦,作為一個單一功能的分布式系統(tǒng),實際上,集群計算機可以讀取數(shù)據(jù)集平行,并提供一個高得多的吞吐量。此外,它是便宜的不止一個高端服務(wù)器。因此,這是背后使用Hadoop,它跨越集群和低成本的計算機上運行的第一個激勵因素。

Hadoop的運行跨計算機集群代碼。該方法包括的Hadoop執(zhí)行以下核心任務(wù):

  • 數(shù)據(jù)最初分為目錄和文件。文件分為128M和64M(128M最好)的統(tǒng)一大小的塊。
  • 然后,這些文件是在各個集群節(jié)點分布作進一步處理。
  • HDFS,正對本地文件系統(tǒng)的頂部,監(jiān)督的處理。
  • 塊被復(fù)制處理硬件故障。
  • 檢查代碼已成功執(zhí)行。
  • 執(zhí)行排序,是以地圖之間發(fā)生,減少階段。
  • 排序數(shù)據(jù)發(fā)送到目標計算機上。
  • 寫作每個作業(yè)的調(diào)試日志。

Hadoop的優(yōu)勢

  • Hadoop框架允許用戶快速地編寫和測試的分布式系統(tǒng)。它是有效的,并在機器和反過來它自動分發(fā)數(shù)據(jù)和工作,利用CPU內(nèi)核的基本平行度。

  • Hadoop的不依賴于硬件,以提供容錯和高可用性(FTHA),而Hadoop的庫本身已被設(shè)計成在應(yīng)用層檢測和處理故障。

  • 服務(wù)器可以添加或從群集中動態(tài)刪除和Hadoop繼續(xù)運行而不中斷。

  • Hadoop的的另一大優(yōu)勢在于,除了是開源的,因為它是基于Java它是在所有的平臺兼容。

Hadoop的 - Enviornment設(shè)置

Hadoop是由GNU / Linux平臺和它的味道的支持。因此,我們必須安裝Linux操作系統(tǒng)的設(shè)置Hadoop的環(huán)境。如果你有比Linux等操作系統(tǒng),你可以在它安裝VirtualBox軟件,并讓Linux VirtualBox的內(nèi)部。

安裝前設(shè)置

Hadoop的安裝到Linux環(huán)境之前,我們需要使用SSH(安全Shell)來設(shè)置Linux操作系統(tǒng)。按照有關(guān)設(shè)置Linux環(huán)境下面給出的步驟。

創(chuàng)建用戶

在開始的時候,建議創(chuàng)建一個單獨的用戶Hadoop的Hadoop的到文件系統(tǒng)從UNIX文件系統(tǒng)隔離開來。按照下面給出創(chuàng)建用戶的步驟:

  • 打開使用命令“蘇”的根源。
  • 使用命令的“useradd用戶名”創(chuàng)建root帳戶的用戶。
  • 現(xiàn)在你可以使用命令“蘇用戶名”打開現(xiàn)有的用戶帳戶。

打開Linux終端,然后鍵入以下命令來創(chuàng)建一個用戶。

$ su 
   password: 
# useradd hadoop 
# passwd hadoop 
   New passwd: 
   Retype new passwd 

SSH設(shè)置和密鑰生成

SSH設(shè)置必須在集群上做不同的操作,如啟動,停止,分布式守護shell操作。來驗證的Hadoop不同的用戶,它需要一個Hadoop的用戶提供公共/私有密鑰對,并與不同的用戶共享。

下面的命令是用于生成使用SSH的鍵值對。復(fù)制公鑰形成id_rsa.pub authorized_keys的到,并提供業(yè)主與讀取和寫入權(quán)限分別authorized_keys文件。

$ ssh-keygen -t rsa 
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys 
$ chmod 0600 ~/.ssh/authorized_keys 

安裝Java

Java是Hadoop的主要先決條件。首先,你應(yīng)該使用命令“java -version”驗證java的存在在你的系統(tǒng)。 Java版本命令的語法如下。

$ java -version 

如果一切正常,它會給你下面的輸出。

java version "1.7.0_71" 
Java(TM) SE Runtime Environment (build 1.7.0_71-b13) 
Java HotSpot(TM) Client VM (build 25.0-b02, mixed mode)  

如果Java是沒有安裝在您的系統(tǒng),然后按照安裝Java下面給出的步驟。

步驟1

下載Java(JDK <最新版本> - X64.tar.gz)通過訪問以下鏈接http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads1880260.html。

隨后的jdk-7u71-Linux的x64.tar.gz將被下載到您的系統(tǒng)。

第2步

通常你會發(fā)現(xiàn)在下載文件夾中下載的Java文件。驗證它,并使用以下命令解壓的jdk-7u71-Linux的x64.gz文件。

$ cd Downloads/ 
$ ls 
jdk-7u71-linux-x64.gz 
$ tar zxf jdk-7u71-linux-x64.gz 
$ ls 
jdk1.7.0_71   jdk-7u71-linux-x64.gz 

第3步

使Java提供給所有用戶,你必須將它移動到的位置“的/ usr /本地/”。打開根目錄,鍵入以下命令。

$ su 
password: 
# mv jdk1.7.0_71 /usr/local/ 
# exit 

第4步

有關(guān)設(shè)置PATH和JAVA_HOME變量,添加下面的命令?/ .bashrc文件。

export JAVA_HOME=/usr/local/jdk1.7.0_71 
export PATH=PATH:$JAVA_HOME/bin 

現(xiàn)在從終端驗證java -version命令如上述說明。

下載的Hadoop

下載并使用下面的命令,從Apache Software Foundation的Hadoop的提取2.4.1。

$ su 
password: 
# cd /usr/local 
# wget http://apache.claz.org/hadoop/common/hadoop-2.4.1/ 
hadoop-2.4.1.tar.gz 
# tar xzf hadoop-2.4.1.tar.gz 
# mv hadoop-2.4.1/* to hadoop/ 
# exit 

Hadoop的操作模式

一旦你已經(jīng)下載的Hadoop,你可以在三種支持的模式之一Hadoop集群:

  • 本地/獨立模式 :在您的系統(tǒng)下載的Hadoop,默認情況下之后,它在獨立模式下配置,可運行作為一個單一的java程序。

  • 偽分布式模式 :這是一個機器上的分布式仿真。每個Hadoop的后臺程序,如HDFS,紗,MapReduce的等,都將作為一個獨立的Java進程運行。這種模式是發(fā)展非常有用。

  • 完全分布式的模式 :此模式與最少兩臺或多臺計算機作為群集完全分布式的。我們將詳細接下來的章節(jié)中碰到過這種模式。

在獨立模式下安裝的Hadoop

在這里,我們將討論的Hadoop 2.4.1在獨立模式下安裝。

沒有運行守護程序和一切運行在單個JVM。獨立模式是適合發(fā)展的過程中運行MapReduce程序,因為它很容易測試和調(diào)試。

設(shè)置的Hadoop

您可以通過附加下面的命令來的?/ .bashrc文件中設(shè)置的Hadoop環(huán)境變量。

export HADOOP_HOME=/usr/local/hadoop 

在進一步討論之前,你需要確保Hadoop是工作的罰款。只需發(fā)出以下命令:

$ hadoop version 

如果一切正常您的設(shè)置,那么你應(yīng)該看到以下結(jié)果:

Hadoop 2.4.1 
Subversion https://svn.apache.org/repos/asf/hadoop/common -r 1529768 
Compiled by hortonmu on 2013-10-07T06:28Z 
Compiled with protoc 2.5.0
From source with checksum 79e53ce7994d1628b240f09af91e1af4 

這意味著你的Hadoop的獨立模式的設(shè)置工作正常。缺省情況下,Hadoop的被配置為在非分布式模式的單個機器上運行。

讓我們來看看Hadoop的一個簡單的例子。 Hadoop的安裝提供了以下示例的MapReduce jar文件,它提供的MapReduce的基本功能,并可以用于在文件等的一個給定列表計算,像皮值,字計數(shù)

$HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jar 

讓我們有一個輸入目錄,我們將推動幾個文件和我們的要求是計算單詞的那些文件的總數(shù)。要計算單詞總數(shù),我們不需要寫我們的MapReduce,提供的.jar文件包含字數(shù)實施。您可以使用相同的.jar文件嘗試其他的例子;剛剛發(fā)出以下命令通過Hadoop的MapReduce的例子-2.2.0.jar文件,檢查支持的MapReduce功能的方案。

$ hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduceexamples-2.2.0.jar 

步驟1

創(chuàng)建輸入目錄中的臨時文件的內(nèi)容。您可以創(chuàng)建這個目錄輸入任何你想工作。

$ mkdir input 
$ cp $HADOOP_HOME/*.txt input 
$ ls -l input 

它會給你輸入目錄下面的文件:

total 24 
-rw-r--r-- 1 root root 15164 Feb 21 10:14 LICENSE.txt 
-rw-r--r-- 1 root root   101 Feb 21 10:14 NOTICE.txt
-rw-r--r-- 1 root root  1366 Feb 21 10:14 README.txt 

這些文件已經(jīng)從Hadoop的安裝主目錄復(fù)制。對于您的實驗,可以有不同的大型文件集。

第2步

讓我們開始Hadoop的過程中在全體輸入目錄中提供的文件中單詞的總數(shù),具體如下:

$ hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduceexamples-2.2.0.jar  wordcount input output 

第3步

步驟2將做必要的處理和保存輸出/部分r00000文件的輸出,你可以使用查詢:

$cat output/* 

它會列出了所有的單詞,他們都在輸入目錄中可用的文件中提供總計數(shù)一起。

"AS      4 
"Contribution" 1 
"Contributor" 1 
"Derivative 1
"Legal 1
"License"      1
"License");     1 
"Licensor"      1
"NOTICE”        1 
"Not      1 
"Object"        1 
"Source”        1 
"Work”    1 
"You"     1 
"Your")   1 
"[]"      1 
"control"       1 
"printed        1 
"submitted"     1 
(50%)     1 
(BIS),    1 
(C)       1 
(Don't)   1 
(ECCN)    1 
(INCLUDING      2 
(INCLUDING,     2 
.............

在偽分布式模式的Hadoop安裝

請參閱下面的偽分布式模式下安裝Hadoop的2.4.1的步驟。

第1步:設(shè)置Hadoop的

您可以通過附加下面的命令來的?/ .bashrc文件中設(shè)置的Hadoop環(huán)境變量。

export HADOOP_HOME=/usr/local/hadoop 
export HADOOP_MAPRED_HOME=$HADOOP_HOME 
export HADOOP_COMMON_HOME=$HADOOP_HOME 
export HADOOP_HDFS_HOME=$HADOOP_HOME 
export YARN_HOME=$HADOOP_HOME 
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native 
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin 
export HADOOP_INSTALL=$HADOOP_HOME 

現(xiàn)在,應(yīng)用所有更改到當(dāng)前正在運行的系統(tǒng)。

$ source ~/.bashrc 

第2步:Hadoop配置

你可以找到所有的位置“$ HADOOP_HOME的/ etc / Hadoop的”Hadoop的配置文件。這是需要根據(jù)您的Hadoop基礎(chǔ)架構(gòu),使這些配置文件中的變化。

$ cd $HADOOP_HOME/etc/hadoop

為了用Java開發(fā)的Hadoop程序,你必須用java在你的系統(tǒng)中的位置替換JAVA_HOME值重置hadoop-env.sh文件中的Java環(huán)境變量。

export JAVA_HOME=/usr/local/jdk1.7.0_71

以下是你必須編輯配置Hadoop的文件列表。

核心的site.xml

芯- site.xml文件中包含的信息,如讀/寫緩沖器的用于的Hadoop實例的端口號,分配給文件系統(tǒng)存儲,存儲器限制,用于存儲數(shù)據(jù),和大小。

打開核心site.xml中,并在<配置>,</配置>標記之間添加以下屬性。

<configuration>

   <property>
      <name>fs.default.name </name>
      <value> hdfs://localhost:9000 </value> 
   </property>
 
</configuration>

HDFS-site.xml中

HDFS-site.xml文件中包含的信息,如復(fù)制數(shù)據(jù)的價值,名稱節(jié)點路徑,您的本地文件系統(tǒng)的數(shù)據(jù)節(jié)點的路徑。這意味著要存儲在Hadoop基礎(chǔ)設(shè)施的地方。

讓我們假設(shè)以下數(shù)據(jù)。

dfs.replication (data replication value) = 1 
(In the below given path /hadoop/ is the user name. 
hadoopinfra/hdfs/namenode is the directory created by hdfs file system.) 
namenode path = //home/hadoop/hadoopinfra/hdfs/namenode 
(hadoopinfra/hdfs/datanode is the directory created by hdfs file system.) 
datanode path = //home/hadoop/hadoopinfra/hdfs/datanode 

打開此文件并在此文件中的<configuration>之間添加以下屬性</配置>標記。

<configuration>

   <property>
      <name>dfs.replication</name>
      <value>1</value>
   </property>
    
   <property>
      <name>dfs.name.dir</name>
      <value>file:///home/hadoop/hadoopinfra/hdfs/namenode </value>
   </property>
    
   <property>
      <name>dfs.data.dir</name> 
      <value>file:///home/hadoop/hadoopinfra/hdfs/datanode </value> 
   </property>
       
</configuration>

注意:在上面的文件,所有的屬性值是用戶定義的,你可以根據(jù)自己的Hadoop基礎(chǔ)架構(gòu)進行更改。

紗的site.xml

此文件用于配置紗線進Hadoop的。打開紗線site.xml文件,并在<配置>之間</配置>標簽在此文件中添加以下屬性。

<configuration>
 
   <property>
      <name>yarn.nodemanager.aux-services</name>
      <value>mapreduce_shuffle</value> 
   </property>
  
</configuration>

mapred-site.xml中

此文件用于指定我們正在使用的MapReduce框架。默認情況下,Hadoop的含有紗-site.xml中的一個模板。首先,需要將文件從mapred現(xiàn)場,xml.template使用以下命令mapred-site.xml文件復(fù)制。

$ cp mapred-site.xml.template mapred-site.xml 

打開mapred-site.xml文件,并在<配置>之間</配置>標簽在此文件中添加以下屬性。

<configuration>
 
   <property> 
      <name>mapreduce.framework.name</name>
      <value>yarn</value>
   </property>
   
</configuration>

驗證Hadoop的安裝

下面的步驟被用來驗證在Hadoop安裝。

第1步:名稱節(jié)點設(shè)置

使用命令“HDFS的NameNode -format”如下設(shè)置名稱節(jié)點。

$ cd ~ 
$ hdfs namenode -format 

預(yù)期的結(jié)果如下。

10/24/14 21:30:55 INFO namenode.NameNode: STARTUP_MSG: 
/************************************************************ 
STARTUP_MSG: Starting NameNode 
STARTUP_MSG:   host = localhost/192.168.1.11 
STARTUP_MSG:   args = [-format] 
STARTUP_MSG:   version = 2.4.1 
...
...
10/24/14 21:30:56 INFO common.Storage: Storage directory 
/home/hadoop/hadoopinfra/hdfs/namenode has been successfully formatted. 
10/24/14 21:30:56 INFO namenode.NNStorageRetentionManager: Going to 
retain 1 images with txid >= 0 
10/24/14 21:30:56 INFO util.ExitUtil: Exiting with status 0 
10/24/14 21:30:56 INFO namenode.NameNode: SHUTDOWN_MSG: 
/************************************************************ 
SHUTDOWN_MSG: Shutting down NameNode at localhost/192.168.1.11 
************************************************************/

第2步:驗證Hadoop的DFS

下面的命令用來啟動DFS。執(zhí)行該命令將啟動您的Hadoop文件系統(tǒng)。

$ start-dfs.sh 

期望的輸出如下所示:

10/24/14 21:37:56 
Starting namenodes on [localhost] 
localhost: starting namenode, logging to /home/hadoop/hadoop
2.4.1/logs/hadoop-hadoop-namenode-localhost.out 
localhost: starting datanode, logging to /home/hadoop/hadoop
2.4.1/logs/hadoop-hadoop-datanode-localhost.out 
Starting secondary namenodes [0.0.0.0]

第3步:驗證腳本紗

下面的命令被用于啟動紗線腳本。執(zhí)行該命令將啟動紗守護進程。

$ start-yarn.sh 

期望的輸出如下:

starting yarn daemons 
starting resourcemanager, logging to /home/hadoop/hadoop
2.4.1/logs/yarn-hadoop-resourcemanager-localhost.out 
localhost: starting nodemanager, logging to /home/hadoop/hadoop
2.4.1/logs/yarn-hadoop-nodemanager-localhost.out 

第4步:在瀏覽器訪問的Hadoop

訪問Hadoop的默認端口號是50070.使用以下網(wǎng)址獲得瀏覽器的Hadoop的服務(wù)。

http://localhost:50070/
Hadoop的瀏覽器上

第5步:驗證群集所有應(yīng)用

訪問集群中的所有應(yīng)用程序的默認端口號為8088。使用下列URL訪問該服務(wù)。

http://localhost:8088/
Hadoop的應(yīng)用集群

Hadoop的 - HDFS概述

Hadoop的文件系統(tǒng)使用分布式文件系統(tǒng)的設(shè)計開發(fā)。它在商用硬件上運行。不像其他的分布式系統(tǒng),HDFS是高度容錯和使用低成本的硬件設(shè)計。

HDFS擁有非常龐大的數(shù)據(jù)量,并提供更容易獲得。為了存儲這些龐大的數(shù)據(jù),這些文件都存儲在多臺機器。這些文件存儲在冗余方式營救從可能的數(shù)據(jù)損失系統(tǒng)中發(fā)生故障的情況下。 HDFS也使得可用于并行處理的應(yīng)用程序。

HDFS的特點

  • 它適用于在分布式存儲和處理。
  • Hadoop提供的命令接口與HDFS進行交互。
  • NameNode和Datanode的幫助用戶內(nèi)置的服務(wù)器輕松地檢查集群的狀態(tài)。
  • 流訪問到文件系統(tǒng)數(shù)據(jù)。
  • HDFS提供了文件的權(quán)限和驗證。

HDFS架構(gòu)

給出下面是在Hadoop文件系統(tǒng)的體系結(jié)構(gòu)。

HDFS架構(gòu)

HDFS遵循主從架構(gòu),它具有以下元素。

Namenode會

NameNode的是包含GNU / Linux的操作系統(tǒng)和軟件名稱節(jié)點商品硬件。它是一個可以在商用硬件上運行軟件。具有名稱節(jié)點系統(tǒng)作為主服務(wù)器,并執(zhí)行以下任務(wù):

  • 管理文件系統(tǒng)命名空間。
  • 規(guī)范客戶端對文件的訪問。
  • 它還可執(zhí)行文件系統(tǒng)操作,如重命名,關(guān)閉和打開文件和目錄。

某個Datanode

該Datanode的是具有GNU / Linux的操作系統(tǒng)和軟件Datanode的商品硬件。對于集群中的每個節(jié)點(商品硬件/系統(tǒng)),會有一個Datanode的。這些節(jié)點管理其系統(tǒng)的數(shù)據(jù)的存儲。

  • 數(shù)據(jù)節(jié)點上的文件系統(tǒng)執(zhí)行的讀寫操作,根據(jù)客戶的請求。
  • 他們還根據(jù)名稱節(jié)點的指令執(zhí)行操作,例如塊的創(chuàng)建,刪除和復(fù)制。

一般用戶數(shù)據(jù)存儲在HDFS的文件。在一個文件系統(tǒng)中的文件將被劃分為一個或多個分段和/或存儲在個人數(shù)據(jù)的節(jié)點。這些文件段被稱為塊。換句話說,即HDFS可以讀或?qū)憯?shù)據(jù)的最小量被稱為塊。缺省塊大小為64MB,但它可以增加按需要在HDFS配置來改變。

HDFS的目標

  • 故障檢測和恢復(fù) :由于HDFS包括大量的商品硬件,部件故障頻繁。因此HDFS應(yīng)該具有快速和自動故障檢測和恢復(fù)機制。

  • 龐大的數(shù)據(jù)集 :HDFS應(yīng)該有幾百個群集節(jié)點的管理有著極大的數(shù)據(jù)集的應(yīng)用程序。

  • 在硬件數(shù)據(jù) :請求的任務(wù),可以有效地進行,當(dāng)計算需要數(shù)據(jù)近的地方。特別是在大的數(shù)據(jù)集都參與,它減少了網(wǎng)絡(luò)通信量,并增加了吞吐量。

Hadoop的 - HDFS運營

啟動HDFS

首先,您必須格式化配置的HDFS文件系統(tǒng),開放式的NameNode(HDFS服務(wù)器),然后執(zhí)行以下命令。

$ hadoop namenode -format 

格式化HDFS后,啟動分布式文件系統(tǒng)。以下命令將啟動名稱節(jié)點,以及為群集數(shù)據(jù)節(jié)點。

$ start-dfs.sh 

清單HDFS文件

裝載在服務(wù)器中的信息后,我們可以發(fā)現(xiàn)文件列表中的目錄,文件的狀態(tài),使用'ls'的。下面給出的是可以傳遞給目錄或文件名作為參數(shù)LS的語法。

$ $HADOOP_HOME/bin/hadoop fs -ls <args>

將數(shù)據(jù)插入到HDFS

假設(shè)我們有在本地系統(tǒng),它是所謂file.txt的文件中的數(shù)據(jù)應(yīng)當(dāng)被保存在HDFS文件系統(tǒng)。按照下面給出插入在Hadoop文件系統(tǒng)所需的文件的步驟。

步驟1

你必須創(chuàng)建一個輸入目錄。

$ $HADOOP_HOME/bin/hadoop fs -mkdir /user/input 

第2步

轉(zhuǎn)讓和使用put命令的本地系統(tǒng),在Hadoop文件系統(tǒng)存儲數(shù)據(jù)文件。

$ $HADOOP_HOME/bin/hadoop fs -put /home/file.txt /user/input 

第3步

您可以使用ls命令驗證文件。

$ $HADOOP_HOME/bin/hadoop fs -ls /user/input 

從HDFS檢索數(shù)據(jù)

假設(shè)我們在HDFS文件名為OUTFILE。下面給出的是從檢索在Hadoop文件系統(tǒng)所需的文件,一個簡單的演示。

步驟1

最初,查看使用cat命令從HDFS的數(shù)據(jù)。

$ $HADOOP_HOME/bin/hadoop fs -cat /user/output/outfile 

第2步

得到HDFS文件使用GET命令在本地文件系統(tǒng)。

$ $HADOOP_HOME/bin/hadoop fs -get /user/output/ /home/hadoop_tp/ 

關(guān)閉HDFS

您可以通過使用以下命令關(guān)閉HDFS。

$ stop-dfs.sh 

Hadoop的 - 命令參考

HDFS命令參考

還有在“$ HADOOP_HOME /斌/ Hadoop的FS”,比在這里展示更多的命令,盡管這些基本的操作都將讓你開始。沒有額外的參數(shù)運行./bin/hadoop DFS將列出可與FsShell系統(tǒng)運行的所有命令。此外,$ HADOOP_HOME /斌/ Hadoop的FS -help的CommandName將顯示有問題的操作很短的使用摘要,如果你被卡住。

所有的操作的表如下所示。下列約定用于參數(shù):

"<path>" means any file or directory name. 
"<path>..." means one or more file or directory names. 
"<file>" means any filename. 
"<src>" and "<dest>" are path names in a directed operation. 
"<localSrc>" and "<localDest>" are paths as above, but on the local file system. 

所有其他文件和路徑名稱是指內(nèi)部HDFS的對象。

命令描述
-ls <路徑> 列出路徑指定的目錄中的內(nèi)容,示出了名稱,權(quán)限,擁有者,大小和修改日期為每個條目。
-lsr <路徑> 行為類似-ls,但遞歸顯示路徑的所有子目錄項。
-du <路徑> 顯示磁盤使用情況,以字節(jié)為單位,對于所有的文件,這些文件匹配路徑;文件名報告與全HDFS協(xié)議前綴。
-dus <路徑> -du一樣,但打印路徑中的所有文件/目錄的磁盤使用情況的摘要。
-mv <來源> <目標> 移動由src表示的文件或目錄
到dest,在HDFS。
-cp <來源> <目標> 副本由src標識的文件或目錄什特內(nèi)HDFS。
-rm <路徑> 刪除文件或路徑標識空目錄。
-rmr <路徑> 刪除路徑標識的文件或目錄。遞歸刪除所有子條目(例如,文件或路徑的子目錄)。
-put <localSrc> <目標> 從localSrc標識的本地文件系統(tǒng)中的文件或目錄復(fù)制到DFS內(nèi)什特。
-copyFromLocal <localSrc> <目標> 相同-put
-moveFromLocal <localSrc> <目標> 從localSrc標識的本地文件系統(tǒng)中的文件或目錄復(fù)制到HDFS內(nèi)什特,然后刪除成功的本地副本。
-get [-CRC] <來源> <localDest> 份在由src確定由localDest標識的本地文件系統(tǒng)路徑HDFS的文件或目錄。
-getmerge <來源> <localDest> 檢索到由localDest確定的本地文件系統(tǒng)中的單一,合并后的文件的路徑SRC在HDFS匹配的所有文件,并復(fù)制它們。
-cat <filen-AME> 顯示在標準輸出文件名的內(nèi)容。
-copyToLocal <來源> <localDest> 相同-GET
-moveToLocal <來源> <localDest> 工程就像-get,但刪除HDFS上的成功復(fù)制。
-mkdir <路徑> 在創(chuàng)建一個HDFS命名的目錄路徑。
創(chuàng)建路徑中的任何父目錄的缺失(例如,MKDIR -p在Linux中)。
-setrep [-R] [-w]代表<路徑> 設(shè)置路徑標識來代表文件的目標文件復(fù)制因子。 (實際的復(fù)制因子會朝著目標隨著時間的推移移動)
-touchz <路徑> 創(chuàng)建在路徑包含當(dāng)前時間作為時間戳的文件。如果失敗的文件已經(jīng)存在路徑,除非文件已經(jīng)是大小為0。
- 測試 - [EZD] <路徑> 返回1,如果路徑存在;長度為零;或者是一個目錄,否則為0。
-stat [格式] <路徑> 輸出關(guān)于路徑信息。格式是接受在塊文件大?。ǎ)中,文件名(%N),塊大?。ā耄?,復(fù)制(%R),和修改日期(%Y,%Y)的字符串。
-tail [-f] <file2name> 顯示在標準輸出文件的最后1KB。
-chmod [-R]模式,模式,... <路徑> ... 更改與路徑標識的一個或多個對象相關(guān)聯(lián)的文件權(quán)限....與R模式遞歸執(zhí)行的變化是一個3位八進制模式,或{} augo +/- {} rwxX。如果沒有指定范圍,不適用的假設(shè)的umask。
-chown [-R] [車主] [:[組] <路徑> ... 設(shè)置由路徑標識的文件或目錄所屬的用戶和/或組....如果指定-R遞歸集所有者。
chgrp命令[-R]組<路徑> ... 設(shè)置由路徑標識的文件或目錄所屬組....如果指定-R遞歸設(shè)置組。
-help <CMD-名稱> 返回上面列出的命令之一使用信息。在cmd中人物 - 你必須省略開頭的''。

Hadoop的 - 的MapReduce

MapReduce的是使用它我們可以編寫應(yīng)用程序來處理大量的數(shù)據(jù),同時,在一個可靠的方式的商品硬件的大型集群的框架。

什么是MapReduce的?

MapReduce的是一種處理技術(shù)和基于Java的分布式計算程序的模型。 MapReduce的算法中包含兩個重要的任務(wù),即Map和Reduce。地圖采用了一組數(shù)據(jù),并將其轉(zhuǎn)換成另一組數(shù)據(jù),其中,各個元件被分解成元組(鍵/值對)的。其次,減少任務(wù),這需要輸出從地圖作為輸入并組合那些數(shù)據(jù)元組到一個較小的元組的集合。作為MapReduce的暗示的名稱的序列中,減少任務(wù)總是在地圖作業(yè)之后進行。

MapReduce的主要優(yōu)點是,它是在多個計算節(jié)點易于大規(guī)模數(shù)據(jù)處理。下MapReduce的模型中,數(shù)據(jù)處理的原語被稱為映射器和減速器。分解數(shù)據(jù)處理應(yīng)用到映射器和減速器有時是平凡的。但是,一旦我們譜寫的MapReduce形式的應(yīng)用程序,擴展到運行在幾百,幾千,或數(shù)千臺機器甚至幾十集群中的應(yīng)用僅僅是一個配置更改。這個簡單的可擴展性是吸引了眾多程序員使用的MapReduce模型。

算法

  • 一般來說MapReduce的范例是基于發(fā)送計算機數(shù)據(jù)所在!

  • MapReduce的程序執(zhí)行在三個階段,即映射階段,洗牌階段,并降低的階段。

    • 地圖階段 :地圖或映射器的任務(wù)是處理輸入數(shù)據(jù)。一般輸入數(shù)據(jù)是在文件或目錄的形式,并且被存儲在Hadoop的文件系統(tǒng)(HDFS)。輸入文件被傳遞到由線映射器功能線路。映射器處理該數(shù)據(jù),并創(chuàng)建數(shù)據(jù)的幾個小塊。

    • 減少階段 :這一階段是洗牌階段的組合和減少階段。減速機的工作是處理來自映射器中的數(shù)據(jù)。處理之后,它產(chǎn)生一組新的輸出,這將被存儲在HDFS。

  • 在一個MapReduce工作,Hadoop的發(fā)送Map和Reduce任務(wù)到集群中的相應(yīng)的服務(wù)器。

  • 框架管理數(shù)據(jù)傳遞例如發(fā)出任務(wù)的節(jié)點之間的簇周圍的所有細節(jié),驗證任務(wù)完成,和復(fù)制數(shù)據(jù)。

  • 大部分的計算的需要與對減少網(wǎng)絡(luò)流量本地磁盤上的數(shù)據(jù)的節(jié)點處。

  • 的給定的任務(wù)完成后,將群集收集并降低了數(shù)據(jù),以形成一個適當(dāng)?shù)慕Y(jié)果,并且將其發(fā)送回Hadoop的服務(wù)器。

MapReduce的算法

輸入和輸出(Java透視圖)

MapReduce框架上的<鍵,值>對工作,也就是說,框架的輸入看工作作為一組<鍵,值>對,并產(chǎn)生一組<鍵,值>對作為作業(yè)的輸出,可以想象不同的類型。

鍵和值類應(yīng)該由框架是序列化的方式,因此,需要實現(xiàn)可寫的接口。此外,key類必須實現(xiàn)可寫可比接口,方便框架執(zhí)行排序。輸入和輸出類型MapReduce的工作:(輸入)<K1,V1> - >地圖 - > <K2,V2> - >減少 - > <K3,V3>(輸出)。

輸入產(chǎn)量
地圖 <K1,V1> 列表(<K2,V2>)
減少 <K2,列表(V2)> 列表(<K3,V3>)

術(shù)語

  • 有效負載 -應(yīng)用程序?qū)崿F(xiàn)地圖和減少功能,形成工作的核心。

  • 映射 -映射INPUT鍵/值對映射到一組中間鍵/值對。

  • NamedNode -節(jié)點,管理Hadoop分布式文件系統(tǒng)(HDFS)。

  • DataNode會 -節(jié)點,在數(shù)據(jù)被提前給出任何處理發(fā)生之前。

  • MasterNode -節(jié)點,在運行的JobTracker和接受來自客戶端作業(yè)請求。

  • SlaveNode -節(jié)點,在Map和Reduce程序運行。

  • JobTracker的 -調(diào)度作業(yè)并跟蹤工作指派給任務(wù)跟蹤器。

  • 任務(wù)追蹤 -跟蹤任務(wù)和報告狀態(tài)的JobTracker。

  • 招聘 -程序是跨數(shù)據(jù)集的映射和減速的執(zhí)行。

  • 任務(wù) -一個映射的執(zhí)行或數(shù)據(jù)的切片一個減速。

  • 任務(wù)嘗試 -試圖在SlaveNode執(zhí)行任務(wù)的特定實例。

示例場景

給出下面是關(guān)于一個組織的電力消耗的數(shù)據(jù)。它包含每月的電力消耗,年均各種年。

一月二月損傷四月可能七月八月九月十月十一月十二月平均
1979年 23 23 2 43 24 25 26 26 26 26 25 26 25
1980年 26 27 28 28 28 三十 31 31 31 三十三十三十 29
1981年 31 32 32 32 33 34 35 36 36 34 34 34 34
1984年 39 38 39 39 39 41 42 43 40 39 38 38 40
1985年 38 39 39 39 39 41 41 41 00 40 39 39 45

如果上述數(shù)據(jù)作為輸入,我們必須編寫應(yīng)用程序來處理它而產(chǎn)生的結(jié)果,如發(fā)現(xiàn)最大使用量,最低使用年限的一年,依此類推。這對于有限數(shù)目的記錄程序員輕易獲勝。他們會簡單地寫,以產(chǎn)生所需的輸出的邏輯和數(shù)據(jù)傳遞給寫入的應(yīng)用程序。

但是,認為代表一個特定國家的一切大規(guī)模產(chǎn)業(yè)的電力消耗數(shù)據(jù),因為它的形成。

當(dāng)我們編寫應(yīng)用程序來處理這樣的大量數(shù)據(jù),

  • 他們將需要大量的時間來執(zhí)行。
  • 將會有一個很大的網(wǎng)絡(luò)流量,當(dāng)我們從源頭將數(shù)據(jù)移動到網(wǎng)絡(luò)服務(wù)器等。

要解決這些問題,我們有MapReduce框架。

輸入數(shù)據(jù)

上述數(shù)據(jù)保存為sample.txt的和作為輸入給出。輸入文件看起來如下所示。

1979   23   23   2   43   24   25   26   26   26   26   25   26  25 
1980   26   27   28  28   28   30   31   31   31   30   30   30  29 
1981   31   32   32  32   33   34   35   36   36   34   34   34  34 
1984   39   38   39  39   39   41   42   43   40   39   38   38  40 
1985   38   39   39  39   39   41   41   41   00   40   39   39  45 

示例程序

下面給出的是程序使用MapReduce框架樣本數(shù)據(jù)。

package hadoop; 

import java.util.*; 
import java.io.IOException; 
import java.io.IOException; 
import org.apache.hadoop.fs.Path; 
import org.apache.hadoop.conf.*; 
import org.apache.hadoop.io.*; 
import org.apache.hadoop.mapred.*; 
import org.apache.hadoop.util.*; 
public class ProcessUnits 
{ 
   //Mapper class 
   public static class E_EMapper extends MapReduceBase implements 
   Mapper<LongWritable ,/*Input key Type */ 
   Text,                /*Input value Type*/ 
   Text,                /*Output key Type*/ 
   IntWritable>        /*Output value Type*/ 
   {  //Map function 
      public void map(LongWritable key, Text value, 
      OutputCollector<Text, IntWritable> output,   
      Reporter reporter) throws IOException 
      { 
         String line = value.toString(); 
         String lasttoken = null; 
         StringTokenizer s = new StringTokenizer(line,"	"); 
         String year = s.nextToken(); 
         while(s.hasMoreTokens()){lasttoken=s.nextToken();} 
         int avgprice = Integer.parseInt(lasttoken); 
         output.collect(new Text(year), new IntWritable(avgprice)); 
      } 
   } 
   //Reducer class 
   public static class E_EReduce extends MapReduceBase implements 
   Reducer< Text, IntWritable, Text, IntWritable > 
   {  //Reduce function 
      public void reduce( Text key, Iterator <IntWritable> values, 
         OutputCollector<Text, IntWritable> output, Reporter reporter)  throws IOException 
         { 
            int maxavg=30; 
            int val=Integer.MIN_VALUE; 
            while (values.hasNext()) 
            { 
               if((val=values.next().get())>maxavg) 
               { 
                  output.collect(key, new IntWritable(val)); 
               } 
            } 
 
         } 
   }  
   
   //Main function 
   public static void main(String args[])throws Exception 
   { 
      JobConf conf = new JobConf(Eleunits.class); 
      conf.setJobName("max_eletricityunits"); 
      conf.setOutputKeyClass(Text.class);
      conf.setOutputValueClass(IntWritable.class); 
      conf.setMapperClass(E_EMapper.class); 
      conf.setCombinerClass(E_EReduce.class); 
      conf.setReducerClass(E_EReduce.class); 
      conf.setInputFormat(TextInputFormat.class); 
      conf.setOutputFormat(TextOutputFormat.class); 
      FileInputFormat.setInputPaths(conf, new Path(args[0])); 
      FileOutputFormat.setOutputPath(conf, new Path(args[1])); 
      JobClient.runJob(conf); 
   } 
} 

保存上述程序作為ProcessUnits.java。匯編和程序的執(zhí)行進行說明。

編譯和生產(chǎn)裝置的計劃的實施

讓我們假設(shè)我們是在一個Hadoop的用戶(例如/家庭/ Hadoop的)的主目錄。

按照下面給出的編譯和執(zhí)行上述程序的步驟。

步驟1

下面的命令是創(chuàng)建一個目錄來存儲編譯的Java類。

$ mkdir units 

第2步

下載Hadoop的芯1.2.1.jar,其用于編譯和執(zhí)行的MapReduce程序。訪問以下鏈接http://mvnrepository.com/artifact/org.apache.hadoop/hadoop-core/1.2.1下載JAR。讓我們假設(shè)下載的文件夾是/ home / Hadoop的/。

第3步

下面的命令用于編譯ProcessUnits.java程序,并為該程序創(chuàng)建一個罐子。

$ javac -classpath hadoop-core-1.2.1.jar -d units ProcessUnits.java 
$ jar -cvf units.jar -C units/ . 

第4步

下面的命令用于創(chuàng)建HDFS中輸入目錄。

$HADOOP_HOME/bin/hadoop fs -mkdir input_dir 

第5步

下面的命令用于復(fù)制名為SAMPLE.TXT在HDFS中的輸入目錄中的輸入文件。

$HADOOP_HOME/bin/hadoop fs -put /home/hadoop/sample.txt input_dir 

第6步

下面的命令被用來驗證在輸入目錄中的文件。

$HADOOP_HOME/bin/hadoop fs -ls input_dir/ 

第7步

下面的命令被用于通過從輸入目錄取輸入文件來運行Eleunit_max應(yīng)用。

$HADOOP_HOME/bin/hadoop jar units.jar hadoop.ProcessUnits input_dir output_dir 

直到執(zhí)行文件,稍等片刻。執(zhí)行之后,如下所示,輸出將包含輸入分割的,數(shù)量,地圖的任務(wù)數(shù),減速器任務(wù)的數(shù)量等。

INFO mapreduce.Job: Job job_1414748220717_0002 
completed successfully 
14/10/31 06:02:52 
INFO mapreduce.Job: Counters: 49 
File System Counters 
 
FILE: Number of bytes read=61 
FILE: Number of bytes written=279400 
FILE: Number of read operations=0 
FILE: Number of large read operations=0   
FILE: Number of write operations=0 
HDFS: Number of bytes read=546 
HDFS: Number of bytes written=40 
HDFS: Number of read operations=9 
HDFS: Number of large read operations=0 
HDFS: Number of write operations=2 Job Counters 


   Launched map tasks=2  
   Launched reduce tasks=1 
   Data-local map tasks=2  
   Total time spent by all maps in occupied slots (ms)=146137 
   Total time spent by all reduces in occupied slots (ms)=441   
   Total time spent by all map tasks (ms)=14613 
   Total time spent by all reduce tasks (ms)=44120 
   Total vcore-seconds taken by all map tasks=146137 
   
   Total vcore-seconds taken by all reduce tasks=44120 
   Total megabyte-seconds taken by all map tasks=149644288 
   Total megabyte-seconds taken by all reduce tasks=45178880 
   
Map-Reduce Framework 
 
Map input records=5  
   Map output records=5   
   Map output bytes=45  
   Map output materialized bytes=67  
   Input split bytes=208 
   Combine input records=5  
   Combine output records=5 
   Reduce input groups=5  
   Reduce shuffle bytes=6  
   Reduce input records=5  
   Reduce output records=5  
   Spilled Records=10  
   Shuffled Maps =2  
   Failed Shuffles=0  
   Merged Map outputs=2  
   GC time elapsed (ms)=948  
   CPU time spent (ms)=5160  
   Physical memory (bytes) snapshot=47749120  
   Virtual memory (bytes) snapshot=2899349504  
   Total committed heap usage (bytes)=277684224
     
File Output Format Counters 
 
   Bytes Written=40 

第8步

下面的命令被用來驗證在輸出文件夾的結(jié)果文件。

$HADOOP_HOME/bin/hadoop fs -ls output_dir/ 

第9步

下面的命令來查看部分-00000的文件輸出。此文件由HDFS產(chǎn)生。

$HADOOP_HOME/bin/hadoop fs -cat output_dir/part-00000 

下面是由MapReduce的程序所產(chǎn)生的輸出。

1981    34 
1984    40 
1985    45 

第10步

下面的命令用于從HDFS輸出文件夾復(fù)制到本地文件系統(tǒng)的分析。

$HADOOP_HOME/bin/hadoop fs -cat output_dir/part-00000/bin/hadoop dfs get output_dir /home/hadoop 

重要的命令

所有的Hadoop命令由$ HADOOP_HOME /斌/ Hadoop的命令調(diào)用。不帶任何參數(shù)運行的Hadoop腳本會打印所有命令的描述。

用法 :hadoop的[--config confdir]命令

下表列出了可用的選項及其說明。

選項描述
NameNode的-format 格式化DFS文件系統(tǒng)。
secondarynamenode 運行DFS二次名稱節(jié)點。
名稱節(jié)點運行DFS名稱節(jié)點。
數(shù)據(jù)節(jié)點運行一個DFS的Datanode。
dfsadmin 運行DFS管理客戶端。
mradmin 運行地圖,減少管理客戶端。
fsck的運行DFS文件系統(tǒng)檢查工具。
FS 運行一個通用的文件系統(tǒng)的用戶客戶端。
平衡器運行的集群平衡工具。
OIV 適用于離線的FsImage觀眾的的FsImage。
fetchdt 獲取來自NameNode的一個代表團令牌。
的JobTracker 運行MapReduce工作跟蹤節(jié)點。
管道運行一個管道的工作。
的TaskTracker 運行MapReduce的任務(wù)跟蹤節(jié)點。
historyserver 運行作業(yè)歷史記錄服務(wù)器作為一個獨立的守護進程。
工作操縱MapReduce工作。
隊列獲取有關(guān)JobQueues信息。
打印版本。
罐子<瓶> 運行一個jar文件。
DistCp使用<srcurl> <desturl> 復(fù)制文件或目錄的遞歸。
distcp2 <srcurl> <desturl> DistCp使用第2版。
歸檔-archiveName名-p 創(chuàng)建一個Hadoop的歸檔。
<父路徑> <來源> * <目標>
類路徑打印得到Hadoop的罐子和所需要的庫所需的類路徑。
daemonlog 獲取/設(shè)置日志級別,每個守護進程

如何使用MapReduce任務(wù)交互

用法:Hadoop的工作[GENERIC_OPTIONS]

以下是在Hadoop作業(yè)的可用通用的選項。

GENERIC_OPTIONS 描述
-submit <作業(yè)文件> 提交作業(yè)。
狀態(tài)<作業(yè)ID> 打印地圖和減少完工百分比且所有作業(yè)計數(shù)器。
反<作業(yè)ID> <組名> <countername> 打印的計數(shù)器值。
-kill <作業(yè)ID> 殺死作業(yè)。
-events <作業(yè)ID> <fromevent - #> <# - 的事件> 通過打印為JobTracker的給定范圍內(nèi)收到的事件“的詳細信息。
-history [全部] <jobOutputDir> - 歷史<jobOutputDir> 打印作業(yè)的詳細信息,沒打死尖的細節(jié)。有關(guān)作業(yè),如每個任務(wù)取得成功的任務(wù)和任務(wù)嘗試更多的細節(jié)可以通過指定[全部]選項查看。
-list [全部] 顯示所有作業(yè)。那還-list只顯示作業(yè)完成。
-kill任務(wù)<任務(wù)ID> 殺死任務(wù)。打死任務(wù)不會計入失敗的嘗試。
-fail任務(wù)<任務(wù)ID> 失敗的任務(wù)。失敗的任務(wù)計入
失敗的嘗試。
設(shè)置優(yōu)先級<作業(yè)ID> <優(yōu)先級> 改變作業(yè)的優(yōu)先級。允許的優(yōu)先級值是VERY_HIGH,高,中,低,VERY_LOW

要查看作業(yè)的狀態(tài)

$ $HADOOP_HOME/bin/hadoop job -status <JOB-ID> 
e.g. 
$ $HADOOP_HOME/bin/hadoop job -status job_201310191043_0004 

要查看作業(yè)輸出-dir的歷史

$ $HADOOP_HOME/bin/hadoop job -history <DIR-NAME> 
e.g. 
$ $HADOOP_HOME/bin/hadoop job -history /user/expert/output 

終止作業(yè)

$ $HADOOP_HOME/bin/hadoop job -kill <JOB-ID> 
e.g. 
$ $HADOOP_HOME/bin/hadoop job -kill job_201310191043_0004 

Hadoop的 - 流

Hadoop的數(shù)據(jù)流是自帶的Hadoop發(fā)行的實用程序。此實用程序允許您創(chuàng)建和運行地圖/任何可執(zhí)行文件或腳本映射器和/或減速Reduce作業(yè)。

示例使用Python

對于Hadoop的數(shù)據(jù)流,我們所考慮的字計數(shù)問題。 Hadoop中的任何作業(yè)必須有兩個階段:映射器和減速。我們已經(jīng)編寫代碼映射器和python腳本減速到Hadoop的下運行它。一個也可以寫在Perl和Ruby相同。

映射器相位編碼

!/usr/bin/python
import sys
# Input takes from standard input for myline in sys.stdin: 
# Remove whitespace either side myline = myline.strip() 
# Break the line into words words = myline.split() 
# Iterate the words list for myword in words: 
# Write the results to standard output print '%s	%s' % (myword, 1)

請確保此文件具有執(zhí)行權(quán)限(使用chmod + X /家庭/專家/ Hadoop的1.2.1 / mapper.py)。

減速階段代碼

#!/usr/bin/python
from operator import itemgetter 
import sys 
current_word = ""
current_count = 0 
word = "" 
# Input takes from standard input for myline in sys.stdin: 
# Remove whitespace either side myline = myline.strip() 
# Split the input we got from mapper.py word, count = myline.split('	', 1) 
# Convert count variable to integer 
   try: 
      count = int(count) 
except ValueError: 
   # Count was not a number, so silently ignore this line continue
if current_word == word: 
   current_count += count 
else: 
   if current_word: 
      # Write result to standard output print '%s	%s' % (current_word, current_count) 
   current_count = count
   current_word = word
# Do not forget to output the last word if needed! 
if current_word == word: 
   print '%s	%s' % (current_word, current_count)

保存在Hadoop的主目錄mapper.py和reducer.py映射器和減速機代碼。確保這些文件具有執(zhí)行權(quán)限(搭配chmod + X mapper.py和chmod + X reducer.py)。由于蟒蛇是壓痕敏感,因此相同的代碼可以從以下鏈接下載。

WORDCOUNT計劃的執(zhí)行

$ $HADOOP_HOME/bin/hadoop jar contrib/streaming/hadoop-streaming-1.
2.1.jar 
   -input input_dirs  
   -output output_dir  
   -mapper <path/mapper.py  
   -reducer <path/reducer.py

其中,“”用于續(xù)行清晰易讀。

例如,

./bin/hadoop jar contrib/streaming/hadoop-streaming-1.2.1.jar -input myinput -output myoutput -mapper /home/expert/hadoop-1.2.1/mapper.py -reducer /home/expert/hadoop-1.2.1/reducer.py

如何流工程

在上面的例子中,無論是映射器和減速是從標準輸入讀取的輸入,并發(fā)射輸出到標準輸出Python腳本。該實用程序?qū)?chuàng)建一個Map / Reduce作業(yè),作業(yè)提交到一個合適的集群,并監(jiān)視作業(yè)的進度,直到它完成。

當(dāng)映射器指定的腳本,每個映射任務(wù)將啟動腳本作為一個單獨的進程時,映射被初始化。作為mapper任務(wù)運行時,它的輸入轉(zhuǎn)換成線和進料線,該方法的標準輸入(STDIN)。在此期間,映射器收集來自該方法的標準輸出(stdout)的面向行的輸出和各線轉(zhuǎn)換成鍵/值對,其被收集作為映射器的輸出。默認情況下,行至第一個制表符的前綴是關(guān)鍵,該行(不包括制表符)的其余部分將是價值。如果在該行沒有制表符,則整個行被視為鍵和值為null。然而,這可以被定制,因為每一需求。

當(dāng)減速指定的腳本,每次減速任務(wù)將啟動腳本作為一個單獨的進程,然后減速被初始化。作為減速器任務(wù)運行時,將其轉(zhuǎn)換其輸入的鍵/值對入線和饋送線的過程中的標準輸入(STDIN)。在此期間,該減速器收集來自該方法的標準輸出(stdout)的面向行的輸出,每行轉(zhuǎn)換成鍵/值對,其被收集作為減速機的輸出。默認情況下,行至第一個制表符的前綴是關(guān)鍵,該行(不包括制表符)的其余部分的價值。然而,這可以被定制為每具體要求。

重要的命令

參數(shù)選項描述
-input目錄/文件名需要輸入位置映射器。
- 輸出目錄名需要為減速機的輸出位置。
-mapper可執(zhí)行文件或腳本或JavaClassName 需要映射器可執(zhí)行文件。
-reducer可執(zhí)行文件或腳本或JavaClassName 需要減速機可執(zhí)行文件。
-file文件名可選的使得當(dāng)?shù)噩F(xiàn)有的計算節(jié)點上的映射器,減速器,或組合的可執(zhí)行文件。
-inputformat JavaClassName 可選的您提供一流的應(yīng)該返回文本類的鍵/值對。如果沒有指定,是的TextInputFormat用作默認。
-outputformat JavaClassName 可選的您提供一流的應(yīng)該采取文字類的鍵/值對。如果沒有指定,TextOutputformat用作默認。
-partitioner JavaClassName 可選的類,確定哪個減少一個密鑰發(fā)送到。
-combiner streamingCommand或JavaClassName 可選的合可執(zhí)行地圖輸出。
-cmdenv名稱=值可選的傳遞環(huán)境變量流的命令。
-inputreader 可選的對于向后兼容性:指定記錄讀取器類(而不是輸入格式類)。
-verbose 可選的詳細輸出。
-lazyOutput 可選的創(chuàng)建懶洋洋地輸出。例如,如果輸出格式是基于FileOutputFormat,僅在第一次調(diào)用output.collect(或Context.write)創(chuàng)建的輸出文件。
-numReduceTasks 可選的指定減速器的數(shù)目。
-mapdebug 可選的當(dāng)map任務(wù)失敗時調(diào)用的腳本。
-reducedebug 可選的腳本調(diào)用時降低任務(wù)失敗。

Hadoop的 - 多節(jié)點群集

本章介紹了在分布式環(huán)境Hadoop的多節(jié)點集群的設(shè)置。

由于整個群集無法證明,我們解釋使用三個系統(tǒng)(一個主站和兩個奴隸)的Hadoop集群環(huán)境;下面給出的是它們的IP地址。

  • Hadoop的站長:192.168.1.15(Hadoop的主站)
  • Hadoop的奴隸:192.168.1.16(Hadoop的奴隸1)
  • Hadoop的奴隸:192.168.1.17(Hadoop的奴隸2)

按照下面給出的Hadoop具有多節(jié)點集群設(shè)置的步驟。

安裝Java

Java是Hadoop的主要先決條件。首先,您應(yīng)該驗證java的存在使用“Java的版本”您的系統(tǒng)。 Java版本命令的語法如下。

$ java -version

如果一切正常,它會給你下面的輸出。

java version "1.7.0_71" 
Java(TM) SE Runtime Environment (build 1.7.0_71-b13) 
Java HotSpot(TM) Client VM (build 25.0-b02, mixed mode)

如果Java是沒有安裝在您的系統(tǒng),然后按照安裝Java給定的步驟。

步驟1

下載Java(JDK - X64.tar.gz)通過訪問以下鏈接http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html

隨后的jdk-7u71-Linux的x64.tar.gz將被下載到您的系統(tǒng)。

第2步

通常你會發(fā)現(xiàn)在下載文件夾中下載的Java文件。驗證它,并使用以下命令解壓的jdk-7u71-Linux的x64.gz文件。

$ cd Downloads/
$ ls
jdk-7u71-Linux-x64.gz
$ tar zxf jdk-7u71-Linux-x64.gz
$ ls
jdk1.7.0_71 jdk-7u71-Linux-x64.gz

第3步

使Java提供給所有用戶,你必須將它移動到的位置“的/ usr /本地/”。打開根目錄,鍵入以下命令。

$ su
password:
# mv jdk1.7.0_71 /usr/local/
# exit

第4步

有關(guān)設(shè)置PATHJAVA_HOME變量,添加下面的命令?/ .bashrc文件。

export JAVA_HOME=/usr/local/jdk1.7.0_71
export PATH=PATH:$JAVA_HOME/bin

現(xiàn)在從終端驗證java -version命令如上述說明。按照上面的過程,并在所有群集節(jié)點安裝Java。

創(chuàng)建用戶帳戶

在主機和從機系統(tǒng)創(chuàng)建一個系統(tǒng)用戶帳戶使用Hadoop的安裝。

# useradd hadoop 
# passwd hadoop

映射節(jié)點

你必須編輯hosts文件的所有節(jié)點上在/ etc /文件夾,指定每個系統(tǒng)后面的主機名的IP地址。

# vi /etc/hosts
enter the following lines in the /etc/hosts file.
192.168.1.109 hadoop-master 
192.168.1.145 hadoop-slave-1 
192.168.56.1 hadoop-slave-2

配置基于密鑰登錄

設(shè)置的ssh中的每個節(jié)點,使得它們可在沒有任何提示密碼彼此通信。

# su hadoop 
$ ssh-keygen -t rsa 
$ ssh-copy-id -i ~/.ssh/id_rsa.pub tutorialspoint@hadoop-master 
$ ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop_tp1@hadoop-slave-1 
$ ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop_tp2@hadoop-slave-2 
$ chmod 0600 ~/.ssh/authorized_keys 
$ exit

Hadoop的安裝

在主服務(wù)器上,下載并使用以下命令安裝Hadoop的。

# mkdir /opt/hadoop 
# cd /opt/hadoop/ 
# wget http://apache.mesi.com.ar/hadoop/common/hadoop-1.2.1/hadoop-1.2.0.tar.gz 
# tar -xzf hadoop-1.2.0.tar.gz 
# mv hadoop-1.2.0 hadoop
# chown -R hadoop /opt/hadoop 
# cd /opt/hadoop/hadoop/

Hadoop的配置

您可以通過如下給出做以下修改來配置Hadoop的服務(wù)器。

核心的site.xml

打開核心site.xml文件,并進行修改,如下圖所示。

<configuration>
   <property> 
      <name>fs.default.name</name> 
      <value>hdfs://hadoop-master:9000/</value> 
   </property> 
   <property> 
      <name>dfs.permissions</name> 
      <value>false</value> 
   </property> 
</configuration>

HDFS-site.xml中

打開HDFS-site.xml文件,并進行修改,如下圖所示。

<configuration>
   <property> 
      <name>dfs.data.dir</name> 
      <value>/opt/hadoop/hadoop/dfs/name/data</value> 
      <final>true</final> 
   </property> 

   <property> 
      <name>dfs.name.dir</name> 
      <value>/opt/hadoop/hadoop/dfs/name</value> 
      <final>true</final> 
   </property> 

   <property> 
      <name>dfs.replication</name> 
      <value>1</value> 
   </property> 
</configuration>

mapred-site.xml中

打開mapred-site.xml文件,并進行修改,如下圖所示。

<configuration>
   <property> 
      <name>mapred.job.tracker</name> 
      <value>hadoop-master:9001</value> 
   </property> 
</configuration>

hadoop-env.sh

打開hadoop-env.sh文件,如下圖所示編輯JAVA_HOME,HADOOP_CONF_DIR和HADOOP_OPTS。

注意:設(shè)置JAVA_HOME根據(jù)您的系統(tǒng)配置。

export JAVA_HOME=/opt/jdk1.7.0_17 export HADOOP_OPTS=-Djava.net.preferIPv4Stack=true export HADOOP_CONF_DIR=/opt/hadoop/hadoop/conf

在從服務(wù)器上安裝的Hadoop

按照給定的命令,所有從服務(wù)器上安裝的Hadoop。

# su hadoop 
$ cd /opt/hadoop 
$ scp -r hadoop hadoop-slave-1:/opt/hadoop 
$ scp -r hadoop hadoop-slave-2:/opt/hadoop

主服務(wù)器上配置的Hadoop

打開主服務(wù)器,并按照給定的命令進行配置。

# su hadoop 
$ cd /opt/hadoop/hadoop

配置主節(jié)點

$ vi etc/hadoop/masters
hadoop-master

配置從節(jié)點

$ vi etc/hadoop/slaves
hadoop-slave-1 
hadoop-slave-2

在Hadoop主格式名稱節(jié)點

# su hadoop 
$ cd /opt/hadoop/hadoop 
$ bin/hadoop namenode –format
11/10/14 10:58:07 INFO namenode.NameNode: STARTUP_MSG: /************************************************************ 
STARTUP_MSG: Starting NameNode 
STARTUP_MSG: host = hadoop-master/192.168.1.109 
STARTUP_MSG: args = [-format] 
STARTUP_MSG: version = 1.2.0 
STARTUP_MSG: build = https://svn.apache.org/repos/asf/hadoop/common/branches/branch-1.2 -r 1479473; compiled by 'hortonfo' on Mon May 6 06:59:37 UTC 2013 
STARTUP_MSG: java = 1.7.0_71 ************************************************************/ 11/10/14 10:58:08 INFO util.GSet: Computing capacity for map BlocksMap editlog=/opt/hadoop/hadoop/dfs/name/current/edits
………………………………………………….
………………………………………………….
…………………………………………………. 11/10/14 10:58:08 INFO common.Storage: Storage directory /opt/hadoop/hadoop/dfs/name has been successfully formatted. 11/10/14 10:58:08 INFO namenode.NameNode: 
SHUTDOWN_MSG: /************************************************************ SHUTDOWN_MSG: Shutting down NameNode at hadoop-master/192.168.1.15 ************************************************************/

啟動Hadoop的服務(wù)

下面的命令來啟動所有的Hadoop的主Hadoop的服務(wù)。

$ cd $HADOOP_HOME/sbin
$ start-all.sh

在Hadoop集群的添加新的DataNode

下面給出要遵循用于添加新節(jié)點Hadoop集群的步驟。

聯(lián)網(wǎng)

添加新節(jié)點用一些適當(dāng)?shù)木W(wǎng)絡(luò)配置現(xiàn)有的Hadoop集群。假設(shè)以下網(wǎng)絡(luò)配置。

對于新節(jié)點配置:

IP address : 192.168.1.103 
netmask : 255.255.255.0
hostname : slave3.in

添加用戶和SSH訪問

添加用戶

在新的節(jié)點上,通過使用以下命令添加要“Hadoop的”用戶和Hadoop用戶“hadoop123”或任何的設(shè)置密碼。

useradd hadoop
passwd hadoop

設(shè)置密碼較少連接由主到新的從屬。

執(zhí)行主服務(wù)器上的以下

mkdir -p $HOME/.ssh 
chmod 700 $HOME/.ssh 
ssh-keygen -t rsa -P '' -f $HOME/.ssh/id_rsa 
cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys 
chmod 644 $HOME/.ssh/authorized_keys
Copy the public key to new slave node in hadoop user $HOME directory
scp $HOME/.ssh/id_rsa.pub hadoop@192.168.1.103:/home/hadoop/

執(zhí)行對奴隸以下

登錄到Hadoop的。如果不是這樣,登錄到Hadoop的用戶。

su hadoop ssh -X hadoop@192.168.1.103

公共密鑰的內(nèi)容復(fù)制到文件“$ HOME /的.ssh / authorized_keys文件”,然后通過執(zhí)行以下命令更改相同的權(quán)限。

cd $HOME
mkdir -p $HOME/.ssh 
chmod 700 $HOME/.ssh
cat id_rsa.pub >>$HOME/.ssh/authorized_keys 
chmod 644 $HOME/.ssh/authorized_keys

從主計算機檢查ssh登錄。現(xiàn)在,請檢查您是否可以ssh到新的節(jié)點,而從主的密碼。

ssh hadoop@192.168.1.103 or hadoop@slave3

新節(jié)點的主機名設(shè)置

您可以在文件/ etc / sysconfig / network中設(shè)置的主機名

On new slave3 machine
NETWORKING=yes 
HOSTNAME=slave3.in

為了使更改生效,請重新啟動計算機或運行hostname命令到新的計算機與相應(yīng)的主機名(重啟是一個不錯的選擇)。

在slave3節(jié)點機:

主機名slave3.in

更新/ etc /與以下行所有群集機的主機

192.168.1.102 slave3.in slave3

現(xiàn)在嘗試ping本機與主機名稱檢查是否解析為IP或沒有。

在新的節(jié)點機:

ping master.in

在開始新節(jié)點的DataNode

使用$ HADOOP_HOME /斌/ hadoop-daemon.sh腳本手動啟動的Datanode守護進程。它會自動聯(lián)系主(NameNode的),并加入集群。我們還應(yīng)該將新節(jié)點添加到主服務(wù)器通過conf /奴隸文件?;谀_本的命令將識別新的節(jié)點。

登錄新節(jié)點

su hadoop or ssh -X hadoop@192.168.1.103

新增加的從屬節(jié)點上啟動HDFS通過使用下面的命令

./bin/hadoop-daemon.sh start datanode

檢查一個新的節(jié)點上JPS命令的輸出。它看起來如下。

$ jps
7141 DataNode
10312 Jps

從Hadoop集群的刪除的DataNode

我們可以從動態(tài)集群中刪除節(jié)點,在運行時,不會丟失任何數(shù)據(jù)。 HDFS提供一個退役特性,從而確保除去一個節(jié)點被安全地執(zhí)行。要使用它,請按照下列步驟給出:

步驟1

登錄掌握。

登錄掌握在安裝Hadoop的計算機用戶。

$ su hadoop

第2步

更改群集配置。

排除文件必須在啟動群集之前進行配置。一個名為關(guān)鍵dfs.hosts.exclude添加到我們的$ HADOOP_HOME的/ etc / Hadoop的/ HDFS-site.xml文件。與此鍵關(guān)聯(lián)的值提供的完整路徑,其中包含未允許連接到HDFS的機器列表NameNode的本地文件系統(tǒng)上的文件。

例如,添加這些行等/ Hadoop的/ HDFS-site.xml文件。

<property> 
   <name>dfs.hosts.exclude</name> 
   <value>/home/hadoop/hadoop-1.2.1/hdfs_exclude.txt</value> 
   <description>DFS exclude</description> 
</property>

第3步

確定主機退役。

要退役每臺機器應(yīng)添加到由每行的hdfs_exclude.txt,一個域名標識的文件。這將阻止他們連接到NameNode的。在“/home/hadoop/hadoop-1.2.1/hdfs_exclude.txt”文件的內(nèi)容如下所示,如果你想刪除DataNode2。

slave2.in

第4步

強制配置重裝。

運行命令“$ HADOOP_HOME /斌/ Hadoop的dfsadmin -refreshNodes”不帶引號。

$ $HADOOP_HOME/bin/hadoop dfsadmin -refreshNodes

這將迫使NameNode會重新讀取它的配置,其中包括最近更新的'排除'文件。它將停止使用節(jié)點在一段時間,讓時間為每個節(jié)點的塊被復(fù)制到其上被調(diào)度到保持活躍的機器。

slave2.in,檢查JPS命令的輸出。一段時間后,你會看到的DataNode過程是自動關(guān)機。

第5步

關(guān)閉節(jié)點。

的退役過程已經(jīng)完成后,將退役硬件可以安全地關(guān)閉以進行維護。運行報告命令dfsadmin檢查退役的狀態(tài)。以下命令將描述退役節(jié)點的狀態(tài)以及群集連接的節(jié)點。

$ $HADOOP_HOME/bin/hadoop dfsadmin -report

第6步

編輯排除再次文件。

一旦機器已經(jīng)退役,他們可以從“不包括'文件中刪除。運行“$ HADOOP_HOME /斌/ Hadoop的dfsadmin -refreshNodes”再次將讀取文件排除放回NameNode的;允許的DataNodes重新加入集群維修已經(jīng)完成之后,或在集群中再次需要額外容量等

特別注意:如果上述過程之后和向TaskTracker處理的節(jié)點上仍在運行,它需要被關(guān)閉。一種方法是我們在上面的步驟做斷開機器。法師會自動識別過程將宣告為死亡。沒有必要遵循相同的過程去除的TaskTracker因為它不是相比的DataNode盡可能多的關(guān)鍵。 DataNode會包含要在不丟失任何數(shù)據(jù)安全地刪除數(shù)據(jù)。

向TaskTracker可以在任何時間點上運行通過以下命令飛/關(guān)機。

$ $HADOOP_HOME/bin/hadoop-daemon.sh stop tasktracker $HADOOP_HOME/bin/hadoop-daemon.sh start tasktracker

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號