Hadoop C访问
来源:互联网 发布:用java写一个登陆界面 编辑:程序博客网 时间:2024/05/01 12:13
现在计划做通过C访问Hadoop,选择了LibHDFS,打算用Eclipse(V3.7.2) CDT和cygwin测试。
1.下载CDT,通过Eclipse Install New Software,在地址安装。
2.Cygwin安装开发库,包含gcc, gcc-core,gcc-g++, gcc-mingw-core, gcc-mingw-g++, make , gdb, binutils
3.添加cygwin的bin目录到Windows的Path环境变量里
4.在Windows下执行gcc,运行报错,显示“访问被拒绝” (access denied),检查g++.exe, gcc.exe是否只有1k大小,如果是,那么文件是符号链接,那么把文件重命名一下(备份)。然后把g++-3.exe(或者g++-4.exe)拷贝一份,重命名为g++.exe。 把gcc-3.exe拷贝一份,重命名为gcc.exe,参加文章。
5.编写代码
#include "hdfs.h"int main(int argc, char **argv) {if (argc != 4) {fprintf(stderr, "Usage: hdfs_write \n");exit(-1);}hdfsFS fs = hdfsConnect("default", 0);if (!fs) {fprintf(stderr, "Oops! Failed to connect to hdfs!\n");exit(-1);}const char* writeFileName = argv[1];tSize fileTotalSize = strtoul(argv[2], NULL, 10);tSize bufferSize = strtoul(argv[3], NULL, 10);hdfsFile writeFile = hdfsOpenFile(fs, writeFileName, O_WRONLY, bufferSize,0, 0);if (!writeFile) {fprintf(stderr, "Failed to open %s for writing!\n", writeFileName);exit(-2);}// data to be written to the filechar* buffer = malloc(sizeof(char) * bufferSize);if (buffer == NULL) {return -2;}int i = 0;for (i = 0; i < bufferSize; ++i) {buffer[i] = 'a' + (i % 26);}// write to the filetSize nrRemaining;for (nrRemaining = fileTotalSize; nrRemaining > 0; nrRemaining -=bufferSize) {int curSize =(bufferSize < nrRemaining) ? bufferSize : (int) nrRemaining;hdfsWrite(fs, writeFile, (void*) buffer, curSize);}free(buffer);hdfsCloseFile(fs, writeFile);hdfsDisconnect (fs);return 0;}
6.增加环境变量HADOOP_HOME,在cygwin目录下执行
export HADOOP_HOME=/home/test/hadoop0.20.2或在/etc/profile文件中增加上述内容。
7.在cygwin里面执行
gcc writeHDFS.c -I ${HADOOP_HOME}/src/c++/libhdfs -I /usr/local/jdk/include -I/usr/local/jdk/include/win32 -L${HADOOP_HOME}/c++/Linux-i386-32/lib -lhdfs -o writeHDFS
8.在linux里面执行
gcc writeHDFS.c -I ${HADOOP_HOME}/src/c++/libhdfs -I ${JAVA_HOME}/include -I ${JAVA_HOME}/include/linux -L${HADOOP_HOME}/c++/Linux-i386-32/lib -lhdfs -L${JAVA_HOME}/jre/lib/i386/client -ljvm -o writeHDFS
9.运行./writeHDFS老报错,提示error while loading shared libraries: libhdfs.so.0: cannot open shared object file: No such file or directory,由于hadoop的c++/Linux-i386-32/lib目录下libhdfs.so、libhdfs.so.0、libhdfs.so.0.0.0文件相同,先将libhdfs.so.0改为libhdfs.so.0.bak,再执行
ln -s ./libhdfs.so.0.0.0 ./libhdfs.so.0然后运行
sudo vi /etc/ld.so.conf添加如下内容
/home/pc01/hadoop-1.0.1/c++/Linux-i386-32/lib/usr/local/lib/jdk1.7.0_03/jre/lib/i386/server再运行
sudo /sbin/ldconfig -v
- Hadoop C访问
- Hadoop通过C的API访问HDFS
- Hadoop通过C的API访问HDFS
- Hadoop-2.6.0上的C的API访问HDFS
- 很好-Hadoop通过C的API访问HDFS
- Hadoop中的数据库访问
- Hadoop中的数据库访问
- hadoop访问数据库
- Hadoop中的数据库访问
- Java访问Hadoop实践
- Hadoop C访问error while loading shared libraries: libhdfs.so.0
- hadoop+hive多用户访问支持
- hadoop中用java访问hive
- Hadoop 实战 - 访问HDFS出错
- hadoop mapreduce分析访问日志
- spring hadoop 访问hbase入门
- Hadoop分析tomcat访问日志
- Hadoop 50070端访问不了
- Android活动文件夹
- 算法系列15天速成——第十四天 图【上】
- Indexof
- 技术转载:Android Wifi详解
- ORACLE 中 VARRAY的用法
- Hadoop C访问
- 用windbg调试dump文件
- Linux与DSP开发资源
- 【PERL】使用wmi获取windows硬件信息
- Ibatis的配置
- Mysql 主从数据库的安装
- python列举文件夹下所有文件行数
- 数据持久层框架Hibernate
- android系统自带的主题与样式(theme and style)