gpt4 book ai didi

hadoop - 在 hadoop 中查找文件的第一个 block

转载 作者:可可西里 更新时间:2023-11-01 15:36:32 25 4
gpt4 key购买 nike

我正在将一个 500 Mb 或更大的视频文件存储在 hdfs 中。由于它大于 block 大小,它将被分发。我必须先收集或处理第一个数据 block (这里是视频文件),因为它只包含序列头。我该怎么做,或者如何在 hadoop 中找到文件的第一个数据 block ?

最佳答案

如果你想读取第一个 block ,你可以从 FileSystem 中获取一个 InputStream 并读取字节直到它达到你预定的数量(例如 block 大小 64mb将是 64 * 1024 * 1024 字节)。这是一个例子(虽然 64mb 是很多数据。如果你认为你需要的数据远在 64mb 之前,只需更改 bytesLeft)

import java.io.EOFException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URI;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.zookeeper.common.IOUtils;

public class TestReaderFirstBlock {

private static final String uri = "hdfs://localhost:9000/path/to/file";
private static int bytesLeft = 64 * 1024 * 1024;
private static final byte[] buffer = new byte[4096];

public static void main(String[] args) throws Exception {

Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(URI.create(uri), conf);

InputStream is = fs.open(new Path(uri));
OutputStream out = System.out;

while (bytesLeft > 0) {
int read = is.read(buffer, 0, Math.min(bytesLeft, buffer.length));
if (read == -1) {
throw new EOFException("Unexpected end of data");
}
out.write(buffer, 0, read);
bytesLeft -= read;
}

IOUtils.closeStream(is);
}
}

关于hadoop - 在 hadoop 中查找文件的第一个 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24283450/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com