zoukankan      html  css  js  c++  java
  • [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的是否与运行这个程序的是同一个用户!

  • 相关阅读:
    heat模板
    Leetcode812.Largest Triangle Area最大三角形面积
    Leetcode812.Largest Triangle Area最大三角形面积
    Leetcode811.Subdomain Visit Count子域名访问计数
    Leetcode811.Subdomain Visit Count子域名访问计数
    Leetcode806.Number of Lines To Write String写字符串需要的行数
    Leetcode806.Number of Lines To Write String写字符串需要的行数
    Leetcode819.Most Common Word最常见的单词
    Leetcode819.Most Common Word最常见的单词
    Leetcode783.Minimum Distance Between BST Nodes二叉搜索树结点最小距离
  • 原文地址:https://www.cnblogs.com/zhangzhang/p/2852496.html
Copyright © 2011-2022 走看看