libhdfs 的C API
来源:互联网 发布:比目鱼游戏工作室知乎 编辑:程序博客网 时间:2024/05/18 03:44
1.概述
libhdfs是基于JNI的hdfs的C应用接口。它提供了通过C接口访问HDFS的功能。libhdfs库是Hadoop发行版中一部分,已经编译好了,所在位置一般是${HADOOP_HOME}/lib/native/libhdfs.so 。不同的版本库文件所在位置稍微不同。2.API
libhdfs中的没有API描述一般在hdfs.h中,该头文件的位置一般在${HADOOP_HOME}/include/hdfs.h,不同的版本头文件所在位置稍微不同。具体每个接口的功能和C语言中文件操作接口类似。
3.一个简单的程序
// hdfs_test.c#include <stdio.h>#include <stdlib.h>#include <string.h>#include "hdfs.h"int main(int argc, char **argv) { /* * Connection to hdfs. */ hdfsFS fs = hdfsConnect("default", 0); if(!fs) { fprintf(stderr, "Failed to connect to hdfs.\n"); exit(-1); } /* * Create and open a file in hdfs. */ const char* writePath = "/tmp/testfile.txt"; hdfsFile writeFile = hdfsOpenFile(fs, writePath, O_WRONLY|O_CREAT, 0, 0, 0); if(!writeFile) { fprintf(stderr, "Failed to open %s for writing!\n", writePath); exit(-1); } /* * Write data to the file. */ char* buffer = "Hello, World!"; tSize num_written_bytes = hdfsWrite(fs, writeFile, (void*)buffer, strlen(buffer)+1); /* * Flush buffer. */ if (hdfsFlush(fs, writeFile)) { fprintf(stderr, "Failed to 'flush' %s\n", writePath); exit(-1); } /* * Close the file. */ hdfsCloseFile(fs, writeFile); /* * Disconnect to hdfs. */ hdfsDisconnect(fs); return 0;}
4.如何连接libhdfs
我们知道:libhdfs.so所在的路径为${HADOOP_HOME}/lib/native,hdfs.h所在的路径为${HADOOP_HOME}/include,那么编译命令为:gcc hdfs_test.c -I${HADOOP_HOME}/include -L${HADOOP_HOME}/lib/native -lhdfs -o hdfs_test
5.经常出现的问题
最经常出现的应该是CLASSPATH的设定问题,因为如果CLASSPATH设定不正确,会导致上面的程序编译不通过或是执行报错。CLASSPATH的正确设定是将${HADOOP_HOME}下的*.jar文件都添加到CLASSPATH中。
6.线程安全性
libhdfs是线程安全的。参考:HDFS C API
0 0
- libhdfs 的C API
- C API libhdfs
- C API libhdfs
- hdfs的C接口libhdfs的测试
- libhdfs api调用
- hadoop的libhdfs使用
- hadoop libhdfs的使用方法
- HDFS: c/c++接口 libhdfs
- 编译hadoop的libhdfs.a
- c 使用libhdfs写数据 配置blocksize
- Linux上编译hadoop-2.7.1的libhdfs.so和libhdfs.a
- HDFS C++接口——libhdfs的编译、配置、使用
- ORACLE 的C API
- Hadoop C访问error while loading shared libraries: libhdfs.so.0
- fuse挂载hadoop2.0.0文件系统hdfs到本地(关于libhdfs和fuse-dfs的编译)
- 【hadoop摸索系列】记录使用libhdfs访问hdfs的关键问题
- libhdfs源码分析(1)
- libhdfs源码分析(2)
- 在windows下 配置 tomcat6.0 开机自启动
- 如何让EditText不自动获取焦点和取消编辑框颜色
- SQL中IN和EXISTS用法的区别
- SqlDataReader转换成DataTable
- Sql server 浅谈用户定义表类型
- libhdfs 的C API
- 软件架构
- String类型的中文判断
- JVM内存管理和JVM垃圾回收机制
- springMVC custom ListArgumentResolver
- 开发者调查: HTML5开发增长,Windows开发下降
- PHP 类的反射使用
- Intellij IDEA中常用的设置
- 如何在PL/SQL中修改ORACLE的字段顺序