从 HDFS 读取和打印文本文件

Read and print text file from HDFS

本文关键字:文本 文件 打印 HDFS 读取      更新时间:2023-10-16

我有这个短代码,它使用libhdfs从Hadoop文件系统(HDFS(上的文本文件中读取字节。它编译并工作正常。我现在正在尝试更改代码,以便我也可以读取文本文件的内容。

以下是我现在用于从HDFS打印文本文件的代码:

#include "jni.h"
#include "hdfs.h"
#include "string.h"
#include "stdlib.h"
int
main(int argc, char **argv)
{
  int MAXBUFLEN = 1024;
  hdfsFS fs = hdfsConnect("default", 0);
  const char* readPath = "/tmp/testfile.txt";
  hdfsFile readFile = hdfsOpenFile(fs, readPath, O_RDONLY, 0, 0, 0);
  if(!readFile) {
    fprintf(stderr, "Failed to open %s for writing!n", readPath);
    exit(-1);
  }
  char buffer[MAXBUFLEN+1];
  int bytes = hdfsRead(fs, readFile, buffer, strlen(buffer));
  buffer[MAXBUFLEN] = '';
  hdfsCloseFile(fs, readFile);
  return 0;
}

您应该以这种方式初始化缓冲区:

char buffer[MAXBUFLEN+1] = {};

然后将最大缓冲区长度(不要使用 strlen (传递给 Read 函数:

int bytes = hdfsRead(fs, readFile, buffer, MAXBUFLEN);

不需要此行:

buffer[MAXBUFLEN] = '';

因为缓冲区已正确初始化。然后,您可以将整个缓冲区输出为 c 字符串:

std::cout << buffer << std::endl;

现在,字符串长度应等于读取字节数:

assert(strlen(buffer)==bytes);