hadoop學習;自己定義Input/OutputFormat;類引用mapreduce.mapper;三種模式

來源:互聯網
上載者:User

標籤:

hadoop切割與讀取輸入檔案的方式被定義在InputFormat介面的一個實現中。TextInputFormat是預設的實現,當你想要一次擷取一行內容作為輸入資料時又沒有確定的鍵。從TextInputFormat返回的鍵為每行的位元組位移量,但眼下沒看到用過

曾經在mapper中曾使用LongWritable(鍵)和Text(值),在TextInputFormat中,由於鍵是位元組位移量。能夠是LongWritable類型,而當使用KeyValueTextInputFormat時,第一個分隔字元前後都是Text類型,所以你必須改動mapper的實現以及map()方法來適應這個新鍵類型



一個MapReduce的輸入不一定是外部資料,經常是一些其它MapReduce的輸出資料,還能夠自己定義輸出格式,預設的輸出格式與KeyValueTextInputFormat能夠讀取的的資料格式保持一致(記錄中的每行均為一個由定位字元分隔的鍵和值),只是Hadoop提供了更加有效二進位壓縮檔格式。稱為序列檔案,這個序列檔案為hadoop處理做了最佳化。當串連多個MapReduce作業時,它是首選,讀取序列檔案的類為SequenceFileInputFormat,序列檔案的鍵和值對象能夠由使用者自己定義。輸出和輸入類型必須匹配

自己定義InputFormat,實現兩個方法:

getSplit()確定全部用於輸入資料的檔案,並將輸入資料切割為輸入分區,每一個map任務處理一個分區

getRecordReader()迴圈提取給定分區中的記錄,並解析每一個記錄為提前定義類型的鍵和值

在實際情況中一個分區總是以資料區塊為大小,在HDFS中預設一個塊為64MB

FileInputFormat中isSplitable()方法。檢查你能否夠將給定檔案分區,預設返回為true。有時你可能想要一個檔案為其自身的分塊,這時能夠設定返回為false

LineRecordReader實現RecordReader,基於實現的封裝,大多數操作存放在next中

我們通過擴充FileInputFormat產生我們的InputFormat類,並實現一個factory方法來返回recordreader

除了類的構建之外,TimeUrlRecordReader會在RecordReader實現6種方法,它主要在KeyValueInputFormat之外的一個封裝,但吧記錄的Text類型轉換為URLWritable

輸出資料到檔案時,使用的是OutputFormat。由於每一個reducer僅需將它的輸出寫入自己的檔案裡,輸出不須要分區。

輸出檔案放在一個公用資料夾中。通常命名為part-nnnnn。這裡的nnnnn是reducer的分區ID。RecordWriter對輸出結果進行格式化。而RecordReader對輸入格式進行解析

NullOutPutFormat簡單的實現了OutputFormat,無輸出。並不須要繼承FileOutputFormat。更基本的是OutputFormat(InputFormat)處理的是資料庫。並不是檔案

個人化輸出能夠在繼承了FileOutputFormat的類中的封裝的繼承RecordReader類中的write()方法。假設不僅僅想輸出到檔案裡


jar -xvf  ../example.jar  解壓jar包

向hdfs遷移本地檔案能夠,程式中地址別寫錯了,別寫成其它不關聯的機子上的


在eclipse中寫完程式,打成jar包。放到hadoop目錄下,執行hadoop指令能夠查看結果

若運用第三方外掛程式fatjar,將mapreduce的jar包和jedis的jar包整合到一起放入hadoop。這樣不須要改動manifest配置資訊

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbmVlZGthbmU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >

我們匯出jar包(不用包括hadoop的jar包)放入hadoop目錄下,執行hadoop命令,類用長名

package com.kane.hdfs;


import java.io.IOException;


import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.BlockLocation;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hdfs.DistributedFileSystem;
import org.apache.hadoop.hdfs.protocol.DatanodeInfo;


public class FindFileOnHDFS {


/**
* @param args
* @throws IOException 
*/
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
getHDFSNodes();
getFileLocal();
}
public static void getHDFSNodes() throws IOException {
//HDFS叢集節點數
Configuration conf=new  Configuration();
FileSystem fs=FileSystem.get(conf);
//擷取Distributed File System
DistributedFileSystem hdfs=(DistributedFileSystem)fs;
//擷取全部的節點數
DatanodeInfo[] dataNodeStats=hdfs.getDataNodeStats();
//迴圈列印
for (int i = 0; i < dataNodeStats.length; i++) {
System.out.println("DataNode_"+i+"_Name:"+dataNodeStats[i].getHostName());
}
}
/**
* 尋找某個檔案在HDFS叢集的位置
* @throws IOException 
*/
public static void getFileLocal() throws IOException {
Configuration conf=new Configuration();
FileSystem hdfs=FileSystem.get(conf);

Path fPath=new Path("user/hadoop/20120722");//word.txt
//擷取檔案系統裡面的檔案資訊
FileStatus fileStatus=hdfs.getFileStatus(fPath);
//擷取檔案的塊資訊
BlockLocation[] blkLocations=hdfs.getFileBlockLocations(fileStatus, 0, 1000);
int blockLen=blkLocations.length;
for (int i = 0; i < blockLen; i++) {
String[] hosts=blkLocations[i].getHosts();
System.out.println("block_"+i+"_location"+hosts[0]);
}
}


}



 搭建三種模式,一般預設單機模式:不使用HDFS,也不載入不論什麼守護進程,主要用於開發調試

偽分布模式在“單節點叢集”上執行hadoop,當中全部守護進程都在一台機子上,添加了代碼調試功能。同意檢查記憶體使用量情況,HDFS輸入輸出。以及其它的守護進程互動

全分布模式。真實情況用這樣的模式。強調分布式儲存和分散式運算,明白聲明了NameNode和JobTracker守護進程所在的主機名稱。

增大了HDFS備份參數發揮分布式儲存優勢

hadoop學習;自己定義Input/OutputFormat;類引用mapreduce.mapper;三種模式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.