Hadoop的快速指南

2018-12-09 16:51 更新

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

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

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

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

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

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

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

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

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

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

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

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

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

大數(shù)據(jù)

因此,大數(shù)據(jù)包括體積龐大,高速和可擴(kuò)展的各種數(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ò)中的信息,營銷機(jī)構(gòu)了解他們的活動(dòng),促銷等廣告媒介的響應(yīng)。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

運(yùn)營與分析系統(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ù)
  • 策展
  • 存儲(chǔ)
  • 搜索
  • 分享
  • 轉(zhuǎn)讓
  • 分析
  • 介紹

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

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

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

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

傳統(tǒng)方法

局限性

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

谷歌的解決方案

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

MapReduce的

Hadoop的

使用谷歌提供的解決方案,Doug Cutting開發(fā)和他的團(tuán)隊(duì)開發(fā)的一個(gè)開源項(xiàng)目叫做HADOOP。

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

Hadoop框架

Hadoop的 - 介紹Hadoop的

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

Hadoop的架構(gòu)

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

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

MapReduce的

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

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

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

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

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

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

如何Hadoop的工作?

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

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

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

Hadoop的優(yōu)勢

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

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

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

  • Hadoop的的另一大優(yōu)勢在于,除了是開源的,因?yàn)樗腔贘ava它是在所有的平臺(tái)兼容。

Hadoop的 - Enviornment設(shè)置

Hadoop是由GNU / Linux平臺(tái)和它的味道的支持。因此,我們必須安裝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)建用戶

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

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

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

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

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

SSH設(shè)置必須在集群上做不同的操作,如啟動(dòng),停止,分布式守護(hù)shell操作。來驗(yàn)證的Hadoop不同的用戶,它需要一個(gè)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”驗(yàn)證java的存在在你的系統(tǒng)。 Java版本命令的語法如下。

$ java -version 

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

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步

通常你會(huì)發(fā)現(xiàn)在下載文件夾中下載的Java文件。驗(yàn)證它,并使用以下命令解壓的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提供給所有用戶,你必須將它移動(dòng)到的位置“的/ 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)在從終端驗(yà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集群:

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

  • 偽分布式模式 :這是一個(gè)機(jī)器上的分布式仿真。每個(gè)Hadoop的后臺(tái)程序,如HDFS,紗,MapReduce的等,都將作為一個(gè)獨(dú)立的Java進(jìn)程運(yùn)行。這種模式是發(fā)展非常有用。

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

在獨(dú)立模式下安裝的Hadoop

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

沒有運(yùn)行守護(hù)程序和一切運(yùn)行在單個(gè)JVM。獨(dú)立模式是適合發(fā)展的過程中運(yùn)行MapReduce程序,因?yàn)樗苋菀诇y試和調(diào)試。

設(shè)置的Hadoop

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

export HADOOP_HOME=/usr/local/hadoop 

在進(jìn)一步討論之前,你需要確保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的獨(dú)立模式的設(shè)置工作正常。缺省情況下,Hadoop的被配置為在非分布式模式的單個(gè)機(jī)器上運(yùn)行。

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

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

讓我們有一個(gè)輸入目錄,我們將推動(dòng)幾個(gè)文件和我們的要求是計(jì)算單詞的那些文件的總數(shù)。要計(jì)算單詞總數(shù),我們不需要寫我們的MapReduce,提供的.jar文件包含字?jǐn)?shù)實(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)建輸入目錄中的臨時(shí)文件的內(nèi)容。您可以創(chuàng)建這個(gè)目錄輸入任何你想工作。

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

它會(huì)給你輸入目錄下面的文件:

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ù)制。對于您的實(shí)驗(yàn),可以有不同的大型文件集。

第2步

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

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

第3步

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

$cat output/* 

它會(huì)列出了所有的單詞,他們都在輸入目錄中可用的文件中提供總計(jì)數(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)前正在運(yùn)行的系統(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實(shí)例的端口號,分配給文件系統(tǒng)存儲(chǔ),存儲(chǔ)器限制,用于存儲(chǔ)數(shù)據(jù),和大小。

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

<configuration>

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

HDFS-site.xml中

HDFS-site.xml文件中包含的信息,如復(fù)制數(shù)據(jù)的價(jià)值,名稱節(jié)點(diǎn)路徑,您的本地文件系統(tǒng)的數(shù)據(jù)節(jié)點(diǎn)的路徑。這意味著要存儲(chǔ)在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>之間添加以下屬性</配置>標(biāo)記。

<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)進(jìn)行更改。

紗的site.xml

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

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

mapred-site.xml中

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

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

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

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

驗(yàn)證Hadoop的安裝

下面的步驟被用來驗(yàn)證在Hadoop安裝。

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

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

$ 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步:驗(yàn)證Hadoop的DFS

下面的命令用來啟動(dòng)DFS。執(zhí)行該命令將啟動(dòng)您的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步:驗(yàn)證腳本紗

下面的命令被用于啟動(dòng)紗線腳本。執(zhí)行該命令將啟動(dòng)紗守護(hù)進(jìn)程。

$ 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的默認(rèn)端口號是50070.使用以下網(wǎng)址獲得瀏覽器的Hadoop的服務(wù)。

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

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

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

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

Hadoop的 - HDFS概述

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

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

HDFS的特點(diǎn)

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

HDFS架構(gòu)

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

HDFS架構(gòu)

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

Namenode會(huì)

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

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

某個(gè)Datanode

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

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

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

HDFS的目標(biāo)

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

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

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

Hadoop的 - HDFS運(yùn)營

啟動(dòng)HDFS

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

$ hadoop namenode -format 

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

$ 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)建一個(gè)輸入目錄。

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

第2步

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

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

第3步

您可以使用ls命令驗(yàn)證文件。

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

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

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

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

Hadoop的 - 的MapReduce

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

什么是MapReduce的?

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

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

算法

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

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

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

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

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

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

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

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

MapReduce的算法

輸入和輸出(Java透視圖)

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

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

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

術(shù)語

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

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

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

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

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

  • SlaveNode -節(jié)點(diǎn),在Map和Reduce程序運(yùn)行。

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

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

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

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

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

示例場景

給出下面是關(guān)于一個(gè)組織的電力消耗的數(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ù)目的記錄程序員輕易獲勝。他們會(huì)簡單地寫,以產(chǎn)生所需的輸出的邏輯和數(shù)據(jù)傳遞給寫入的應(yīng)用程序。

但是,認(rèn)為代表一個(gè)特定國家的一切大規(guī)模產(chǎn)業(yè)的電力消耗數(shù)據(jù),因?yàn)樗男纬伞?

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

  • 他們將需要大量的時(shí)間來執(zhí)行。
  • 將會(huì)有一個(gè)很大的網(wǎng)絡(luò)流量,當(dāng)我們從源頭將數(shù)據(jù)移動(dòng)到網(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í)行進(jìn)行說明。

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

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

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

步驟1

下面的命令是創(chuàng)建一個(gè)目錄來存儲(chǔ)編譯的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)建一個(gè)罐子。

$ 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步

下面的命令被用來驗(yàn)證在輸入目錄中的文件。

$HADOOP_HOME/bin/hadoop fs -ls input_dir/ 

第7步

下面的命令被用于通過從輸入目錄取輸入文件來運(yùn)行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步

下面的命令被用來驗(yàn)證在輸出文件夾的結(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ù)運(yùn)行的Hadoop腳本會(huì)打印所有命令的描述。

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

下表列出了可用的選項(xiàng)及其說明。

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

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

用法:Hadoop的工作[GENERIC_OPTIONS]

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

GENERIC_OPTIONS 描述
-submit <作業(yè)文件> 提交作業(yè)。
狀態(tài)<作業(yè)ID> 打印地圖和減少完工百分比且所有作業(yè)計(jì)數(shù)器。
反<作業(yè)ID> <組名> <countername> 打印的計(jì)數(shù)器值。
-kill <作業(yè)ID> 殺死作業(yè)。
-events <作業(yè)ID> <fromevent - #> <# - 的事件> 通過打印為JobTracker的給定范圍內(nèi)收到的事件“的詳細(xì)信息。
-history [全部] <jobOutputDir> - 歷史<jobOutputDir> 打印作業(yè)的詳細(xì)信息,沒打死尖的細(xì)節(jié)。有關(guān)作業(yè),如每個(gè)任務(wù)取得成功的任務(wù)和任務(wù)嘗試更多的細(xì)節(jié)可以通過指定[全部]選項(xiàng)查看。
-list [全部] 顯示所有作業(yè)。那還-list只顯示作業(yè)完成。
-kill任務(wù)<任務(wù)ID> 殺死任務(wù)。打死任務(wù)不會(huì)計(jì)入失敗的嘗試。
-fail任務(wù)<任務(wù)ID> 失敗的任務(wù)。失敗的任務(wù)計(jì)入
失敗的嘗試。
設(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ā)行的實(shí)用程序。此實(shí)用程序允許您創(chuàng)建和運(yùn)行地圖/任何可執(zhí)行文件或腳本映射器和/或減速Reduce作業(yè)。

示例使用Python

對于Hadoop的數(shù)據(jù)流,我們所考慮的字計(jì)數(shù)問題。 Hadoop中的任何作業(yè)必須有兩個(gè)階段:映射器和減速。我們已經(jīng)編寫代碼映射器和python腳本減速到Hadoop的下運(yùn)行它。一個(gè)也可以寫在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映射器和減速機(jī)代碼。確保這些文件具有執(zhí)行權(quán)限(搭配chmod + X mapper.py和chmod + X reducer.py)。由于蟒蛇是壓痕敏感,因此相同的代碼可以從以下鏈接下載。

WORDCOUNT計(jì)劃的執(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

如何流工程

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

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

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

重要的命令

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

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

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

由于整個(gè)群集無法證明,我們解釋使用三個(gè)系統(tǒng)(一個(gè)主站和兩個(gè)奴隸)的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é)點(diǎn)集群設(shè)置的步驟。

安裝Java

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

$ java -version

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

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步

通常你會(huì)發(fā)現(xiàn)在下載文件夾中下載的Java文件。驗(yàn)證它,并使用以下命令解壓的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提供給所有用戶,你必須將它移動(dòng)到的位置“的/ 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)在從終端驗(yàn)證java -version命令如上述說明。按照上面的過程,并在所有群集節(jié)點(diǎn)安裝Java。

創(chuàng)建用戶帳戶

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

# useradd hadoop 
# passwd hadoop

映射節(jié)點(diǎn)

你必須編輯hosts文件的所有節(jié)點(diǎn)上在/ etc /文件夾,指定每個(gè)系統(tǒng)后面的主機(jī)名的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中的每個(gè)節(jié)點(diǎn),使得它們可在沒有任何提示密碼彼此通信。

# 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文件,并進(jìn)行修改,如下圖所示。

<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文件,并進(jìn)行修改,如下圖所示。

<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文件,并進(jìn)行修改,如下圖所示。

<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ù)器,并按照給定的命令進(jìn)行配置。

# su hadoop 
$ cd /opt/hadoop/hadoop

配置主節(jié)點(diǎn)

$ vi etc/hadoop/masters
hadoop-master

配置從節(jié)點(diǎn)

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

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

# 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 ************************************************************/

啟動(dòng)Hadoop的服務(wù)

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

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

在Hadoop集群的添加新的DataNode

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

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

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

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

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

添加用戶和SSH訪問

添加用戶

在新的節(jié)點(diǎn)上,通過使用以下命令添加要“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

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

ssh hadoop@192.168.1.103 or hadoop@slave3

新節(jié)點(diǎn)的主機(jī)名設(shè)置

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

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

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

在slave3節(jié)點(diǎn)機(jī):

主機(jī)名slave3.in

更新/ etc /與以下行所有群集機(jī)的主機(jī)

192.168.1.102 slave3.in slave3

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

在新的節(jié)點(diǎn)機(jī):

ping master.in

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

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

登錄新節(jié)點(diǎn)

su hadoop or ssh -X hadoop@192.168.1.103

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

./bin/hadoop-daemon.sh start datanode

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

$ jps
7141 DataNode
10312 Jps

從Hadoop集群的刪除的DataNode

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

步驟1

登錄掌握。

登錄掌握在安裝Hadoop的計(jì)算機(jī)用戶。

$ su hadoop

第2步

更改群集配置。

排除文件必須在啟動(dòng)群集之前進(jìn)行配置。一個(gè)名為關(guān)鍵dfs.hosts.exclude添加到我們的$ HADOOP_HOME的/ etc / Hadoop的/ HDFS-site.xml文件。與此鍵關(guān)聯(lián)的值提供的完整路徑,其中包含未允許連接到HDFS的機(jī)器列表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步

確定主機(jī)退役。

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

slave2.in

第4步

強(qiáng)制配置重裝。

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

$ $HADOOP_HOME/bin/hadoop dfsadmin -refreshNodes

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

slave2.in,檢查JPS命令的輸出。一段時(shí)間后,你會(huì)看到的DataNode過程是自動(dòng)關(guān)機(jī)。

第5步

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

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

$ $HADOOP_HOME/bin/hadoop dfsadmin -report

第6步

編輯排除再次文件。

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

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

向TaskTracker可以在任何時(shí)間點(diǎn)上運(yùn)行通過以下命令飛/關(guān)機(jī)。

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

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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號