cdh4用到ServiceLoader的地方

本文介绍了Hadoop中几种核心组件如文件系统(FileSystem)、压缩编解码器(CompressionCodec)、安全信息(SecurityInfo)等的服务加载过程。通过ServiceLoader机制实现组件的动态发现与注册。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 FileSystem
  private static void loadFileSystems() {
synchronized (FileSystem.class) {
if (!FILE_SYSTEMS_LOADED) {
ServiceLoader<FileSystem> serviceLoader = ServiceLoader.load(FileSystem.class);
for (FileSystem fs : serviceLoader) {
SERVICE_FILE_SYSTEMS.put(fs.getScheme(), fs.getClass());
}
FILE_SYSTEMS_LOADED = true;
}
}
}


2 CompressionCodec
private static final ServiceLoader<CompressionCodec> CODEC_PROVIDERS =
ServiceLoader.load(CompressionCodec.class);


3 TokenIdentifier
private static synchronized Class<? extends TokenIdentifier>
getClassForIdentifier(Text kind) {
if (tokenKindMap == null) {
tokenKindMap = Maps.newHashMap();
for (TokenIdentifier id : ServiceLoader.load(TokenIdentifier.class)) {
tokenKindMap.put(id.getKind(), id.getClass());
}
}
Class<? extends TokenIdentifier> cls = tokenKindMap.get(kind);
if (cls == null) {
LOG.warn("Cannot find class for token kind " + kind);
return null;
}
return cls;
}


4 SecurityInfo
private static ServiceLoader<SecurityInfo> securityInfoProviders = 
ServiceLoader.load(SecurityInfo.class);


上面都是hadoop-commom的。下面的这个是mapreduce的:
5 ClientProtocolProvider

 private static ServiceLoader<ClientProtocolProvider> frameworkLoader =
ServiceLoader.load(ClientProtocolProvider.class);


[img]http://dl2.iteye.com/upload/attachment/0085/4927/c117cda9-ef7a-3ff5-9568-90931bbaf8b6.png[/img]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值