Hadoop 中的 (side data) 边数据
2024-08-30 14:26:24
一、用途
边数据是作业所需的额外的只读数据,通常用来辅助主数据集;
二、方法
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();
最新文章
- 【hihoCoder】1148:2月29日
- C#数据类型分类
- .net请求Webservice简单实现天气预报功能
- 说说移动前端中 viewport (视口)
- 网页 console的使用
- 141. Linked List Cycle
- Array 原型扩展(快速排序,搅乱顺序)
- python基础-软件目录开发规范
- 一,PHP 语法
- PHP设计模式——策略模式
- Unity3D脚本使用:Random
- 采用Spring AOP+Log4j记录项目日志
- [图形学] Chp8.7.2 梁友栋-Barsky线段裁剪算法
- stylus含有的特性
- Divide the Sequence (贪心)
- Android向系统日历中添加日程事件
- python记录_day27 tcp/ip五层模型
- EBS环境提交新请求默认是";单一请求";
- Window.Open()方法详细的参数说明及技巧。
- 非局部均值滤波算法的python实现