1. 程式人生 > >Hadoop 中的 (side data) 邊數據

Hadoop 中的 (side data) 邊數據

ext url 靈活 分布式文件系統 進行 共享文件 local title tle

一、用途

  邊數據是作業所需的額外的只讀數據,通常用來輔助主數據集;

二、方法

1、利用Configuration類來配置,利用setter()和getter()可方便的使用,方便存儲一些基本的類型;

2、分布式緩存:

相比這下,分布式緩存更靈活,它能在任務運行過程中及時地將文件和存檔復制到任務節點以供使用;

通常每個作業中,各個文件只需復制到一個節點一次。

原理:

  當啟動一個作業時,Hadoop會把由-files -archives -libjars添加的文件復制到分布式文件系統HDFS;

  在任務運行之前,tasktracker 將文件從分布式文件系統復制到本地磁盤(緩存)使任務去訪問到;

用法:

  1、使用命令行參數,GenericOptionsParser可對命令行參數進行解析:

      使用-files選項指定待分發文件,文件內參數包含以逗號隔開的URL列表。文件可以存放在本地文件系統/HDFS/S3等;默認是本地文件系統;

      使用-archives 選項向自己的任務中復制存檔文件(jar, zip, tar 等),這些文件會被解檔到任務節點。

      使用 -libjars 選項會把jar文件添加到mapper和 reducer任務的classpath類路徑中   

% hadoop jar hadoop-examples.jar MaxTemperatureByStationNameUsingDistributedCacheFile \ 
-files input/ncdc/metadata/stations-fixed-width.txt input/ncdc/all output //在作業代碼中能直接獲取到“ stations-fixed-width.txt ”文件 static class MaxTemperatureReducerWithStationLookup extends Reducer<Text, IntWritable, Text, IntWritable> { private NcdcStationMetadata metadata; @Override protected void
setup(Context context) throws IOException, InterruptedException { metadata = new NcdcStationMetadata(); metadata.initialize(new File("stations-fixed-width.txt")); } @Override protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException { String stationName = metadata.getStationName(key.toString()); int maxValue = Integer.MIN_VALUE; for (IntWritable value : values) { maxValue = Math.max(maxValue, value.get()); } context.write(new Text(stationName), new IntWritable(maxValue)); } }

  

  2、使用API,可以完成更多操作,Job中的方法:    

public void addCacheFile(URI uri)
public void addCacheArchive(URI uri)
public void setCacheFiles(URI[] files)
public void setCacheArchives(URI[] archives)
public void addFileToClassPath(Path file)
public void addArchiveToClassPath(Path archive)
public void createSymlink()

   使用命令行參數 和 API 的 對比:

  技術分享

  a. API中使用的路徑是指共享路徑,比如HDFS上的路徑;而命令行下的參數路徑可以是本地,也可以是HDFS,如果是本地會復制到HDFS上去;

  b. API中的add() set() 不會將文件復制到共享文件系統中去;

  獲取緩存的文件:

  public Path[] getLocalCacheFiles() throws IOException;
  public Path[] getLocalCacheArchives() throws IOException;
  public Path[] getFileClassPaths();
  public Path[] getArchiveClassPaths(); 

 

Hadoop 中的 (side data) 邊數據