问题:我想从HDFS读取文件的一部分并将其返回,例如从1000行的文件中返回101-120行.
我不想使用,seek因为我读过它很贵.
我有日志文件,我使用PIG处理成有意义的数据集.我一直在编写一个API来返回数据以供前端消费和显示.这些经过处理的数据集可以足够大,我不想在一个啜食中读出Hadoop中的整个文件,以节省线路时间和带宽.(比方说5 - 10MB)
目前我使用a BufferedReader来返回工作正常的小摘要文件
ArrayList lines = new ArrayList();
...
for (FileStatus item: items) {
// ignoring files like _SUCCESS
if(item.getPath().getName().startsWith("_")) {
continue;
}
in = fs.open(item.getPath());
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String line;
line = br.readLine();
while (line != null) {
line = line.replaceAll("(\\r|\\n)", "");
lines.add(line.split("\t"));
line = br.readLine();
}
}
Run Code Online (Sandbox Code Playgroud)
我在网上搜索了很多和Stack一样,但还没找到我需要的东西.
也许这完全是错误的做法,我需要一套完全独立的代码和不同的功能来管理它.对任何建议开放.
谢谢!
正如基于以下讨论的研究所补充的那样: Hadoop过程如何记录跨越块边界的记录? Hadoop FileSplit阅读