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上构建。
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 --glob或hadoop classpath --jar <path >可能会为您的部署生成正确的类路径,这可能会很有用。有关此命令的更多信息,请参见《Hadoop命令参考》。