• [zz]HDFS文件读写 使用c api


    1.用haddop提供的C API to HDFS来实现文件写入到HDFS中。过程中主要是在配置环境花了点时间

    参考官网:http://hadoop.apache.org/common/docs/r0.20.203.0/libhdfs.html

    不用重新编译直接用$HADOOP_HOME/c++/Linux-Linux-amd64-64/lib即可,若要编译libhdfs,在hadoop顶层目录运行:ant compile-c++-libhdfs -Dislibhdfs=true

    API主要可以去hadoop软件包解压目录中查看hdfs.h定义的一些已实现的函数

    一门语言的初学入门例子,一般都是“hello,world”,下面看写hdfs文件代码,文件hello_hdfs.c

     1 #include "hdfs.h"
     2 
     3  int main(int argc, char **argv) {
     4 
     5     hdfsFS fs = hdfsConnect("127.0.0.1", 9000);
     6     const char* writePath = "/tmp/testfile.txt";
     7     hdfsFile writeFile = hdfsOpenFile(fs, writePath, O_WRONLY|O_CREAT, 0, 0, 0);
     8     if(!writeFile) {
     9           fprintf(stderr, "Failed to open %s for writing!\n", writePath);
    10           exit(-1);
    11     }
    12     char* buffer = "Hello, World!";
    13     tSize num_written_bytes = hdfsWrite(fs, writeFile, (void*)buffer, strlen(buffer)+1);
    14     if (hdfsFlush(fs, writeFile)) {
    15            fprintf(stderr, "Failed to 'flush' %s\n", writePath);
    16           exit(-1);
    17     }
    18    hdfsCloseFile(fs, writeFile);
    19  return 0;
    20  }

    编译命令:

    gcc hello_hdfs.c -I${HADOOP_HOME}/src/c++/libhdfs -I${JAVA_HOME}/include -I${JAVA_HOME}/include/linux  -L${HADOOP_HOME}/c++/Linux-Linux-amd64-64/lib -lhdfs -L${JAVA_HOME}/jre/lib/amd64/server -ljvm -o hello_hdfs

    运行的时候报:error while loading shared libraries: libjvm.so: cannot open shared object file: No such file or directory
    这个是LD_LIBRARY_PATH 没有设置:


    这个是我本机上面的配置: /etc/profile(Ubuntu有一个bug,在这里设置的所有环境变量都是all user wide,除了LD_LIBRARY_PATH,你必须重新source一遍才行)

    export JAVA_HOME=/usr/lib/jvm/java-6-sun
    export LD_LIBRARY_PATH=$JAVA_HOME/jre/lib/amd64/server
    export PATH=$PATH:$JAVA_HOME/bin
    export HADOOP_HOME=/home/hadoop/hadoop-0.20.203.0
    export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$HADOOP_HOME/hadoop-core-0.20.203.0.jar:$HADOOP_HOME/lib/commons-logging-1.1.1.jar:$HADOOP_HOME/lib/commons-configuration-1.6.jar:$HADOOP_HOME/lib/commons-lang-2.4.jar

    查看文件是否写入,bin/hadoop fs -ls /tmp,或直接拷到本地以便查看:bin/hadoop fs -get /tmp/testfile.txt /home/test

    如果写入不成功,一定要检查启动hadoop的是否与运行这个程序的是同一个用户!

  • 相关阅读:
    bootstrap fileinput 无法显示中文bug
    js防止回车(enter)键提交表单及javascript中event.keycode
    php 生成唯一随机码
    thinksns 分页数据
    详解PHP处理密码的几种方式
    windows7 在cmd中执行php脚本
    php 无限级分类 递归+sort排序 和 非递归
    CentOS 创建SVN 服务器,并且自动同步到WEB 目录
    微擎笔记
    laravel php框架 知识点及注意问题
  • 原文地址:https://www.cnblogs.com/zhangzhang/p/2852496.html
Copyright © 2020-2023  润新知