你好,游客 登录 注册 搜索
背景:
阅读新闻

【dbdao Hadoop 大数据学习】C API libhdfs

[日期:2016-05-04] 来源:dbDao IT技术玩家博客  作者: [字体: ]

本文固定链接:http://t.dbdao.com/archives/hadoop-c-api-libhdfs.html

原文地址:http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/LibHdfs.html

Libhdfs 是一个在HDFS中JNI 基础的C API 。它提供了一个HDFS APIs的子集C APIs来操作HDFS文件和文件系统。Libhdfs

Hadoop

Libhdfs是Hadoop分布式的一部分,并且在$HADOOP_HDFS_HOME/lib/native/libhdfs.so中预编译。Libhdfs 兼容Winddows并且可以通过hadoop-hdfs-project/hadoop-hdf根目录下的mvn来编译。(t.dbdao.com)

Libhdfs apis 时 Hadoop 文件系统API的一个子集。

在$HADOOP_HDFS_HOME/include/hdfs.h中的头文件描述了每个API的详细详细。(t.dbdao.com)

#include "hdfs.h" 
int main(int argc, char **argv) {
 
 
 
hdfsFSfs = hdfsConnect("default", 0);
 
const char* writePath = "/tmp/testfile.txt";
 
hdfsFilewriteFile = hdfsOpenFile(fs, writePath, O_WRONLY |O_CREAT, 0, 0, 0);
 
if(!writeFile) {
 
fprintf(stderr, "Failed to open %s for writing!\n", writePath);
 
exit(-1);
 
}
 
char* buffer = "Hello, World!";
 
tSizenum_written_bytes = hdfsWrite(fs, writeFile, (void*)buffer, strlen(buffer)+1);
 
if (hdfsFlush(fs, writeFile)) {
 
fprintf(stderr, "Failed to 'flush' %s\n", writePath);
 
exit(-1);
 
}
 
hdfsCloseFile(fs, writeFile);
 
}

4.如何连接这些库

在libhdfs的源目录(hadoop-hdfs-project/hadoop-hdfs/src/CMakeLists.txt)查看CMake文件或者例如:(t.dbdao.com)

gcc above_sample.c -I$HADOOP_HDFS_HOME/include -L$HADOOP_HDFS_HOME/lib/native -lhdfs -o above_sample

5.常见问题

最常见的问题是在调用libhdfs过程中,CLASSPATH没有被设置正确。确保在正确路径中的hdfs-site.xml中包含所有hadoop运行所需的jar包。不能使用通配符来指定多个jars。可以使用hadoop classpath –glob 或 hadoop classpath –jar <path>来生产当前环境的正确classpath。参考 http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/CommandsManual.html#classpath 获得更多命令。

6.线程安全

Libdhfs 是线程安全的

并发和Hadoop FS ‘句柄’:

Hadoop FS 处理包括FS缓存处理,缓存基于namenode的单独用户连接的URI。所以调用hdfsConnect会返回相同的句柄,但是调用hdfsConnectAsUser不同的用户返回不同的句柄。但是HDFS客户端句柄都是线程安全的,它们都是无关系的并发。(t.dbdao.com)

并发和 libhdfs/JNI

Libhdfs调用的JNI应该总是本地存储创建的线程,所以在理论上,libhdfs应该是线程安全的作为底层调用Hadoop FS





收藏 推荐 打印 | 录入:elainebo | 阅读:
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数
点评:
       
评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款