Hadoop 文档

General

Common

HDFS

MapReduce

MapReduce REST APIs

YARN

YARN REST APIs

YARN Service

Submarine

Hadoop Compatible File Systems

Auth

Tools

Reference

Configuration

总览

libhdfs是用于Hadoop分布式文件系统(HDFS)的基于JNI的C API。它为HDFS API的子集提供C API,以操纵HDFS文件和文件系统。libhdfs是Hadoop发行版的一部分,已预编译在$ HADOOP_HDFS_HOME / lib / native / libhdfs.so中。libhdfs与Windows兼容,可以通过在源树的hadoop-hdfs-project / hadoop-hdfs目录中运行mvn compile在Windows上构建。

API

libhdfs API是Hadoop FileSystem API的子集。

libhdfs的头文件详细描述了每个API,可在$ HADOOP_HDFS_HOME / include / hdfs.h中找到

样例程序

#include“ hdfs.h”

int main(int argc,char ** argv){

    hdfsFS fs = hdfsConnect(“ default”,0);
    const char * writePath =“ /tmp/testfile.txt”;
    hdfsFile writeFile = hdfsOpenFile(fs,writePath,O_WRONLY | O_CREAT,0,0,0);
    if(!writeFile){
          fprintf(stderr,“无法打开%s进行写入!\ n”,writePath);
          退出(-1);
    }
    char * buffer =“你好,世界!”;
    tSize num_write_bytes = hdfsWrite(fs,writeFile,(void *)buffer,strlen(buffer)+1);
    如果(hdfsFlush(fs,writeFile)){
           fprintf(stderr,“无法'刷新'%s \ n”,writePath);
          退出(-1);
    }
    hdfsCloseFile(fs,writeFile);
}

如何与图书馆链接

请参阅CMake的文件test_libhdfs_ops.c在libhdfs源目录(Hadoop的HDFS项目/ Hadoop的HDFS / src目录/的CMakeLists.txt)或类似的东西:GCC above_sample.c -I $ HADOOP_HDFS_HOME / -L包括$ HADOOP_HDFS_HOME / lib目录/ native -lhdfs -o above_sample

常见问题

最常见的问题是在调用使用libhdfs的程序时未正确设置CLASSPATH。确保将其设置为运行Hadoop本身所需的所有Hadoop jar以及包含hdfs-site.xml的正确配置目录。使用通配符语法指定多个jar无效。运行hadoop classpath --globhadoop classpath --jar <path >可能会为您的部署生成正确的类路径,这可能会很有用。有关此命令的更多信息,请参见《Hadoop命令参考》。

线程安全

libdhfs是线程安全的。

  • 并发和Hadoop FS“处理”

    Hadoop FS实现包括一个FS句柄缓存,该缓存根据名称节点的URI和用户连接进行缓存。因此,所有对hdfsConnect的调用将返回相同的句柄,但是对具有不同用户的hdfsConnectAsUser的调用将返回不同的句柄。但是,由于HDFS客户端句柄是完全线程安全的,因此与并发无关。

  • 并发和libhdfs / JNI

    对JNI的libhdfs调用应该始终在创建线程本地存储,因此(理论上),libhdfs应该与对Hadoop FS的基础调用一样安全。