我编写了一个 oozie 工作流,它创建 HAR 存档,然后运行需要从该存档中读取数据的 MR-job。1. 创建存档 2. 当作业运行时,映射器确实在分布式缓存中看到存档。3. ???我怎样才能阅读这个档案?从这个档案中逐行读取数据的 API 是什么(我的 har 是一批多个换行符分隔的文本文件)。注意:当我使用存储在 DistirubtedCache 中的常用文件(不是 HAR 存档)时,它工作得很好。尝试从 HAR 读取数据时遇到问题。
这是一个代码片段:
InputStream inputStream;
String cachedDatafileName = System.getProperty(DIST_CACHE_FILE_NAME);
LOG.info(String.format("Looking for[%s]=[%s] in DistributedCache",DIST_CACHE_FILE_NAME, cachedDatafileName));
URI[] uris = DistributedCache.getCacheArchives(getContext().getConfiguration());
URI uriToCachedDatafile = null;
for(URI uri : uris){
if(uri.toString().endsWith(cachedDatafileName)){
uriToCachedDatafile = uri;
break;
}
}
if(uriToCachedDatafile == null){
throw new RuntimeConfigurationException(String.format("Looking for[%s]=[%s] in DistributedCache failed. There is no such file",
DIST_CACHE_FILE_NAME, cachedDatafileName));
}
Path pathToFile = new Path(uriToCachedDatafile);
LOG.info(String.format("[%s] has been found. Uri is: [%s]. The path is:[%s]",cachedDatafileName, uriToCachedDatafile, pathToFile));
FileSystem fileSystem = pathToFile.getFileSystem(getContext().getConfiguration());
HarFileSystem harFileSystem = new HarFileSystem(fileSystem);
inputStream = harFileSystem.open(pathToFile); //NULL POINTER EXCEPTION IS HERE!
return inputStream;