相关疑难解决方法(0)

如何使用Java从Hadoop读取偏移量的文件

问题:我想从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阅读

java iteration hadoop offset bufferedreader

6
推荐指数
1
解决办法
2953
查看次数

标签 统计

bufferedreader ×1

hadoop ×1

iteration ×1

java ×1

offset ×1