gpt4 book ai didi

java - 写入后Hadoop文件为空

转载 作者:行者123 更新时间:2023-12-02 20:48:33 25 4
gpt4 key购买 nike

我们有一个从MongoDB检索数据并将其写入Hadoop集群的应用程序。
数据是使用以下逻辑转换为JSON并写入Hadoop的字符串列表
˚

Configuration conf = new Configuration();
conf.addResource(new Path("/etc/hadoop/conf/core-site.xml"));
conf.addResource(new Path("/etc/hadoop/conf/hdfs-site.xml"));
conf.set("fs.defaultFS", HadoopConstants.HDFS_HOST + HadoopConstants.HDFS_DEFAULT_FS);

FSDataOutputStream out = null;
FileSystem fileSystem = null;
//Create Hadoop FS Path and Directory Structure
if (!fileSystem.exists(new Path(dir))) {
// Create new Directory
fileSystem.mkdirs(new Path(dir), FsPermission.getDefault());
out = fileSystem.create(new Path(filepath));
} else if (fileSystem.exists(new Path(dir))) {
if (!fileSystem.exists(new Path(filepath))) {
out = fileSystem.create(new Path(filepath));
} else if (fileSystem.exists(new Path(filepath))) {
//should not reach here .
fileSystem.delete(new Path(filepath), true);
out = fileSystem.create(new Path(filepath));
}

}

for (Iterator < String > it = list.iterator(); it.hasNext();) {
String node = it.next();
out.writeBytes(node.toString());
out.writeBytes("\n");
}
LOGGER.debug("Write to HDFS successful");
out.close();

该应用程序在QA和暂存环境中运行良好。

在生产环境中,该环境具有一个额外的防火墙以便与其连接(此防火墙已被打开以便授予写访问权限),看到以下错误。

正在创建文件,但最终的Hadoop文件为空。即。大小为0个字节。

屏幕快照中附有正在写入的文件上的Hadoop fs –du和Hadoop fsck命令。写入期间复制后的大小增加到384M,然后再次变为0。
  • 这是因为上面代码中的out.close()没有被调用吗?
    这不能解释质量检查数据是否正确写入。
  • 可能是防火墙问题吗?
    文件创建正确。因此,似乎不是连接问题。除非在创建文件并打开数据之后写入并且没有正确刷新数据才能保存。

    以下是写入
  • 期间的文件规范

    $ hadoop fs -du -h file.json
    0384M ...

    上面复制参数之后的大小增加到384M,并在一段时间后变为0。这是否意味着数据已到达但没有正确刷新到磁盘?

    $ hadoop fsck
  • 有什么方法可以验证是否正在从Hadoop端获取数据并到达数据?

  • ****更新****
  • 在执行以下行期间,客户端日志中将引发以下异常:

    out.close();

    HDFSWriter::写入失败::无法获取块位置。源文件“part-m-2017102304-0000.json”-正在中止...
  • Hadoop httpfs.out日志具有以下内容:

    hadoop-httpfs ...信息httpfsaudit:[/part-m-2017102304-0000.json]偏移量[0] len [204800]
  • 最佳答案

    这意味着您对名称节点(可以创建文件)具有防火墙访问权限,但对数据节点(将数据写入文件所需的数据节点)没有防火墙访问权限。

    更新防火墙规则,以便您也可以访问数据节点。

    关于java - 写入后Hadoop文件为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46901043/

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