gcc hdfs_cpp_demo.c -I $HADOOP_HOME/src/c++/libhdfs -I $JAVA_HOME/include -I $JAVA_HOME/include/linux/ -L $HADOOP_HOME/c++/Linux-i386-32/lib/ -l hdfs -L $JAVA_HOME/jre/lib/i386/server -ljvm -o hdfs_cpp_demo

以上是32为linux系统的编译,注意到Linux-i386-32 、i386 命令。

如果是64为linux系统的话,要用以下编译命令:

gcc hdfs_cpp_demo.c \

-I $HADOOP_HOME/src/c++/libhdfs \

-I $JAVA_HOME/include \

-I $JAVA_HOME/include/linux/ \

-L $HADOOP_HOME/c++/Linux-amd64-64/lib/ -lhdfs \

-L $JAVA_HOME/jre/lib/amd64/server -ljvm \

-o hdfs_cpp_demo

编译完成后会生成hdfs_cpp_demo 可执行文件。

接下来运行该文件,运行该文件前得设置CLASSPATH环境变量(注意大写),我们利用ant打印环境变量(关于ant的包可以到apache官网下载)。

打印环境变量的命令如下:[hadoop@master HDFS_C_API]$ /usr/local/apache-ant-1.9.3/bin/ant print-cp

会生成如下图所示的很多jar包:

我们只需要把classpath后的所有包export即可。命令如下:[hadoop@master HDFS_C_API]$ export CLASSPATH=/usr/local/hadoop/lib/asm-3.2.jar:/usr/local/hadoop/lib/aspectjrt-1.6.11.jar:/usr/local/hadoop/lib/aspectjtools-1.6.11.jar:/usr/local/hadoop/lib/commons-beanutils-1.7.0.jar:/usr/local/hadoop/lib/commons-beanutils-core-1.8.0.jar:/usr/local/hadoop/lib/commons-cli-1.2.jar:/usr/local/hadoop/lib/commons-codec-1.4.jar:/usr/local/hadoop/lib/commons-collections-3.2.1.jar:/usr/local/hadoop/lib/commons-configuration-1.6.jar:/usr/local/hadoop/lib/commons-daemon-1.0.1.jar:/usr/local/hadoop/lib/commons-digester-1.8.jar:/usr/local/hadoop/lib/commons-el-1.0.jar:/usr/local/hadoop/lib/commons-httpclient-3.0.1.jar:/usr/local/hadoop/lib/commons-io-2.1.jar:/usr/local/hadoop/lib/commons-lang-2.4.jar:/usr/local/hadoop/lib/commons-logging-1.1.1.jar:/usr/local/hadoop/lib/commons-logging-api-1.0.4.jar:/usr/local/hadoop/lib/commons-math-2.1.jar:/usr/local/hadoop/lib/commons-net-3.1.jar:/usr/local/hadoop/lib/core-3.1.1.jar:/usr/local/hadoop/lib/hadoop-capacity-scheduler-1.1.2.jar:/usr/local/hadoop/lib/hadoop-fairscheduler-1.1.2.jar:/usr/local/hadoop/lib/hadoop-thriftfs-1.1.2.jar:/usr/local/hadoop/lib/hsqldb-1.8.0.10.jar:/usr/local/hadoop/lib/jackson-core-asl-1.8.8.jar:/usr/local/hadoop/lib/jackson-mapper-asl-1.8.8.jar:/usr/local/hadoop/lib/jasper-compiler-5.5.12.jar:/usr/local/hadoop/lib/jasper-runtime-5.5.12.jar:/usr/local/hadoop/lib/jdeb-0.8.jar:/usr/local/hadoop/lib/jersey-core-1.8.jar:/usr/local/hadoop/lib/jersey-json-1.8.jar:/usr/local/hadoop/lib/jersey-server-1.8.jar:/usr/local/hadoop/lib/jets3t-0.6.1.jar:/usr/local/hadoop/lib/jetty-6.1.26.jar:/usr/local/hadoop/lib/jetty-util-6.1.26.jar:/usr/local/hadoop/lib/jsch-0.1.42.jar:/usr/local/hadoop/lib/jsp-2.1/jsp-2.1.jar:/usr/local/hadoop/lib/jsp-2.1/jsp-api-2.1.jar:/usr/local/hadoop/lib/junit-4.5.jar:/usr/local/hadoop/lib/kfs-0.2.2.jar:/usr/local/hadoop/lib/log4j-1.2.15.jar:/usr/local/hadoop/lib/mockito-all-1.8.5.jar:/usr/local/hadoop/lib/oro-2.0.8.jar:/usr/local/hadoop/lib/servlet-api-2.5-20081211.jar:/usr/local/hadoop/lib/slf4j-api-1.4.3.jar:/usr/local/hadoop/lib/slf4j-log4j12-1.4.3.jar:/usr/local/hadoop/lib/xmlenc-0.52.jar:/usr/local/hadoop/7287OS_Code/7287OS_Code/chapter1/build/lib/hadoop-cookbook-chapter1.jar:/usr/local/hadoop/7287OS_Code/7287OS_Code/chapter10/C10Samples.jar:/usr/local/hadoop/7287OS_Code/7287OS_Code/chapter2/HDFS_Java_API/HDFSJavaAPI.jar:/usr/local/hadoop/7287OS_Code/7287OS_Code/chapter3/build/lib/hadoop-cookbook-chapter1.jar:/usr/local/hadoop/7287OS_Code/7287OS_Code/chapter3/build/lib/hadoop-cookbook-chapter3.jar:/usr/local/hadoop/7287OS_Code/7287OS_Code/chapter4/C4LogProcessor.jar:/usr/local/hadoop/7287OS_Code/7287OS_Code/chapter5/build/lib/hadoop-cookbook.jar:/usr/local/hadoop/7287OS_Code/7287OS_Code/chapter6/build/lib/hadoop-cookbook-chapter6.jar:/usr/local/hadoop/7287OS_Code/7287OS_Code/chapter8/build/lib/hadoop-cookbook-chapter6.jar:/usr/local/hadoop/7287OS_Code/7287OS_Code/chapter8/build/lib/hadoop-cookbook-chapter8.jar:/usr/local/hadoop/7287OS_Code/7287OS_Code/chapter9/C9Samples.jar:/usr/local/hadoop/contrib/datajoin/hadoop-datajoin-1.1.2.jar:/usr/local/hadoop/contrib/failmon/hadoop-failmon-1.1.2.jar:/usr/local/hadoop/contrib/gridmix/hadoop-gridmix-1.1.2.jar:/usr/local/hadoop/contrib/hdfsproxy/hdfsproxy-2.0.jar:/usr/local/hadoop/contrib/index/hadoop-index-1.1.2.jar:/usr/local/hadoop/contrib/streaming/hadoop-streaming-1.1.2.jar:/usr/local/hadoop/contrib/vaidya/hadoop-vaidya-1.1.2.jar:/usr/local/hadoop/hadoop-ant-1.1.2.jar:/usr/local/hadoop/hadoop-client-1.1.2.jar:/usr/local/hadoop/hadoop-core-1.1.2.jar:/usr/local/hadoop/hadoop-examples-1.1.2.jar:/usr/local/hadoop/hadoop-minicluster-1.1.2.jar:/usr/local/hadoop/hadoop-test-1.1.2.jar:/usr/local/hadoop/hadoop-tools-1.1.2.jar:/usr/local/hadoop/hdfs1.jar:/usr/local/hadoop/hdfs2.jar:/usr/local/hadoop/ivy/ivy-2.1.0.jar:/usr/local/hadoop/mapreduce.jar:/usr/local/hadoop/minimapreduce.jar:/usr/local/hadoop/minimapreduce1.jar:/usr/local/hadoop/src/contrib/thriftfs/lib/hadoopthriftapi.jar:/usr/local/hadoop/src/contrib/thriftfs/lib/libthrift.jar:/usr/local/hadoop/src/test/lib/ftplet-api-1.0.0-SNAPSHOT.jar:/usr/local/hadoop/src/test/lib/ftpserver-core-1.0.0-SNAPSHOT.jar:/usr/local/hadoop/src/test/lib/ftpserver-server-1.0.0-SNAPSHOT.jar:/usr/local/hadoop/src/test/lib/mina-core-2.0.0-M2-20080407.124109-12.jar:/usr/local/hadoop/src/test/org/apache/hadoop/mapred/test.jar

这里注意CLASSPATH需为大写,且后面的=号不能有空格。

设置好环境变量后,我们就可以运行程序了,执行下面的命令。

[hadoop@master HDFS_C_API]$ LD_LIBRARY_PATH=$HADOOP_HOME/c++/Linux-i386-32/lib:$JAVA_HOME/jre/lib/i386/server ./hdfs_cpp_demo

OK,输出结果如下:

Welcome to HDFS C API!!!

大功告成!

以下附录测试源程序:[hadoop@master HDFS_C_API]$ cat hdfs_cpp_demo.c

// Following is a libhdfs sample adapted from the src/c++/libhdfs/hdfs_write.c of the Hadoop distribution.

#include "hdfs.h"

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

hdfsFS fs = hdfsConnect("master",9000);

if (!fs) {

fprintf(stderr, "Cannot connect to HDFS.\n");

exit(-1);

}

char* fileName = "demo_c.txt";

char* message = "Welcome to HDFS C API!!!";

int size = strlen(message);

int exists = hdfsExists(fs, fileName);

if (exists > -1) {

fprintf(stdout, "File %s exists!\n", fileName);

}else{

// Create and open file for writing

hdfsFile outFile = hdfsOpenFile(fs, fileName, O_WRONLY|O_CREAT, 0, 0, 0);

if (!outFile) {

fprintf(stderr, "Failed to open %s for writing!\n", fileName);

exit(-2);

}

// write to file

hdfsWrite(fs, outFile, (void*)message, size);

hdfsCloseFile(fs, outFile);

}

// Open file for reading

hdfsFile inFile = hdfsOpenFile(fs, fileName, O_RDONLY, 0, 0, 0);

if (!inFile) {

fprintf(stderr, "Failed to open %s for reading!\n", fileName);

exit(-2);

}

char* data = malloc(sizeof(char) * size);

// Read from file.

tSize readSize = hdfsRead(fs, inFile, (void*)data, size);

fprintf(stdout, "%s\n", data);

free(data);

hdfsCloseFile(fs, inFile);

hdfsDisconnect(fs);

return 0;

}

linux执行hadoop程序,gcc编译和运行hadoop c api程序相关推荐

  1. c在linux中怎样执行文件,如何在Linux中编译和运行C/C+程序,简单示例教懂你

    C是一种过程编程语言.它最初是由Dennis Ritchie在1969年至1973年之间开发的.它主要是作为用于编写操作系统的系统编程语言而开发的.C语言的主要功能包括对内存的低级访问,一组简单的关键 ...

  2. Linux下开启openmp编译,OpenMP程序的编译和运行

    <OpenMP程序的编译和运行>由会员分享,可在线阅读,更多相关<OpenMP程序的编译和运行(13页珍藏版)>请在人人文库网上搜索. 1.SHANGHAI UNIVERSIT ...

  3. Linux Kernel 0.01 的编译和运行

    Linux Kernel 0.01 的编译和运行 本文操作环境均在 Linux 系统中实现. ===================================================== ...

  4. scala 编译插件_使用Scala插件在Griffon应用程序中编译和运行Scala代码

    scala 编译插件 用于Griffon的Scala插件 0.7.1版本现已发布. 这个插件可以在Griffon应用程序上编译和运行Scala代码. Scala插件使用LangBridge插件与其他J ...

  5. 【Linux入门到精通系列讲解】Ubuntu下使用gcc编译并运行C程序

    文章目录 1 hello 2 命令 3 linux下gcc编译多个源文件 1 hello 2 命令 在终端输入 Ubuntu命令 $ gcc hello.c -o hello $ ./hello == ...

  6. Linux下make使用gcc编译,Linux下GCC和Makefile实例(从GCC的编译到Makefile的引入)

    一.确认已经装好了GCC和Make的软件包 可以使用whereis命令查看: 如果whereis  gcc和whereis  make命令有结果,说明安装了这两个软件,可以继续往下做. 二.使用GCC ...

  7. 什么是java源码文件,什么是字节码文件,初程序的编译和运行

    java源文件就是源代码文件,是指我们编写好的代码文件,即 当我们开始运行的时候系统会执行javac命令先把java源文件编译成字节码文件即: 这里科普一下java为什么会有字节码文件. 字节码产生的 ...

  8. 一个程序从编译到运行的全过程

    前言 一个程序,从编写完代码,到被计算机运行,总共需要经历以下四步: 编译.编译器会将程序源代码编译成汇编代码. 汇编.汇编器会将汇编代码文件翻译成为二进制的机器码. 链接.链接器会将一个个目标文件和 ...

  9. 使用命令行编译打包运行自己的MapReduce程序 Hadoop2.4.1

    网上的MapReduce WordCount教程对于如何编译WordCount.java几乎是一笔带过- 而有写到的,大多又是 0.20 等旧版本版本的做法,即 javac -classpath /u ...

  10. Java 跨平台运行机理:Dos 命令在桌面新建文件夹,并在其中编译、运行一段 Java 程序

    文章目录 前言 一.打开 Dos 命令界面 二.Dos 查看桌面文件目录序列 三.Dos 创建文件夹 四.相关 Windows 系统 Shell 命令补充 五.Dos 进入文件夹编写 Java 文件 ...

最新文章

  1. R中控制输出数值的小数点位数round,和有效数字位数signif
  2. Nginx面试中最常见的18道题及答案
  3. pythorch学习笔记
  4. 【2016年第2期】大数据背景下的治理现代化:何以可能与何以可为(上)
  5. 程序员败给了一个厨子,读书无用论让我 必须送书了
  6. 基于JAVA+SpringMVC+Mybatis+MYSQL的精美酒店管理系统
  7. ShowWindowAsync系统方法cmdShow参数值含义
  8. 在Vue+springBoot环境中如何实现单点登录(SSO)
  9. VMware 12 专业版永久许可证密钥
  10. Project 3 :Python爬虫源码实现抓取1000条西刺免费代理IP-HTTPS并保存读取
  11. Win10 数字认证
  12. 计算机组装与维修教学工作总结,计算机组装与维护教师工作总结
  13. linux unbuntu
  14. L1-009 N个数求和---题解
  15. 【第五组】交互设计文档Hunger Killer
  16. Holt Winter时间序列模型
  17. 互联网舆情监测公司监测哪些内容,TOOM北京舆情监测公司
  18. flask后端接受图片文件数据
  19. LTE:RA-RNTI、T-CRNTI、C-RNTI
  20. 基于SSM的智慧物业系统设计与实现

热门文章

  1. 《Adobe Premiere Pro CC经典教程(彩色版)》——第2课 设置项目 2.1 开始
  2. [译] 如何让你的 React 应用完全的函数式,响应式,并且能处理所有令人发狂的副作用...
  3. flex布局——回顾
  4. VSA Cluster中小企业无SAN环境解决方案
  5. cp命令强制覆盖方式实现
  6. Spring整合jasypt使用说明
  7. isjavaidentifierpart和isjavaidentifierstart有区别么?
  8. idea debug端口被占用
  9. postman传各种类型的数组格式
  10. phpexcel 导入导出