Hatena::ブログ(Diary)

あらびき日記 Twitter

2012-02-09

Ubuntuでlibhdfsのサンプルコードを動かしてみた

libhdfs を使ってコードを書いてみました系のエントリーが全然見つからなく、情弱な自分にとってはサンプルコードを動かすことすら敷居が高かったのでメモがてらエントリーを書いてみます。

環境は 64bit版 Ubuntu 10.04 です。


Hadoopインストール

apt を使って CDH3 をインストールします。次のエントリーを見れば簡単にインストールできると思うので説明は割愛します。サービスの起動まで行います。

きりんさん日記: 1台構成のHadoopを30分で試してみる(Ubuntu + Cloudera)


libhdfsのインストール

Hadoopインストールの際に Cloudera のリポジトリを追加していれば aptインストールできます。

$ sudo aptitude install libhdfs0 libhdfs0-dev

サンプルコードの実行

C API to HDFS: libhdfs のサンプルを使います。

hdfs.h をインクルードパスから読み込むようにしているのと、出力文字に改行をつけているだけで他に変更はしていません。


libhdfs_sample.c

#include <hdfs.h>

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

    hdfsFS fs = hdfsConnect("default", 0);
    const char* writePath = "/tmp/testfile.txt";
    hdfsFile writeFile = 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!\n";
    tSize num_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);
}

次のようにコンパイルします。諸々のパスは環境に合わせて変更してください。

インクルードパスに hdfs.h, jni.h, jni_md.h が存在し、

共有ライブラリパスに libjvm.so と Hadoop 関連のライブラリが存在し、

CLASSPATHHadoop 関連の jar ファイルと conf ディレクトリが含まれていれば OK かと思います。

$ export LD_LIBRARY_PATH=/usr/lib/jvm/java-6-sun/jre/lib/amd64/server:/usr/lib/hadoop/lib/native/Linux-amd64-64
$ for jar in $(ls /usr/lib/hadoop/*.jar); do CLASSPATH=$CLASSPATH:$jar; done
$ for jar in $(ls /usr/lib/hadoop/lib/*.jar); do CLASSPATH=$CLASSPATH:$jar; done
$ export CLASSPATH=$CLASSPATH:/etc/hadoop/conf
$ gcc -o libhdfs_sample libhdfs_sample.c  -I/usr/lib/jvm/java-6-sun/include -I/usr/lib/jvm/java-6-sun/include/linux -lhdfs

※libhdfs では CLASSPATH の内容をそのまま -Djava.class.path に渡すのでワイルドカードは使えません


実行

$ hadoop fs -lsr /  # 現在の状況を確認
12/02/09 22:39:28 INFO security.UserGroupInformation: JAAS Configuration already set up for Hadoop, not re-installing.
drwxr-xr-x   - mapred supergroup          0 2012-02-01 23:48 /var
drwxr-xr-x   - mapred supergroup          0 2012-02-01 23:48 /var/lib
drwxr-xr-x   - mapred supergroup          0 2012-02-01 23:48 /var/lib/hadoop-0.20
drwxr-xr-x   - mapred supergroup          0 2012-02-01 23:48 /var/lib/hadoop-0.20/cache
drwxr-xr-x   - mapred supergroup          0 2012-02-01 23:48 /var/lib/hadoop-0.20/cache/mapred
drwxr-xr-x   - mapred supergroup          0 2012-02-01 23:48 /var/lib/hadoop-0.20/cache/mapred/mapred
drwx------   - mapred supergroup          0 2012-02-01 23:48 /var/lib/hadoop-0.20/cache/mapred/mapred/system
-rw-------   1 mapred supergroup          4 2012-02-01 23:48 /var/lib/hadoop-0.20/cache/mapred/mapred/system/jobtracker.info
$ ./libhdfs_sample  # 実行
12/02/09 22:40:07 INFO security.UserGroupInformation: JAAS Configuration already set up for Hadoop, not re-installing.
$ hadoop fs -lsr /  # /tmp/testfile.txt が作成されている!
12/02/09 22:40:25 INFO security.UserGroupInformation: JAAS Configuration already set up for Hadoop, not re-installing.
drwxr-xr-x   - arabiki supergroup          0 2012-02-09 22:40 /tmp
-rw-r--r--   1 arabiki supergroup         15 2012-02-09 22:40 /tmp/testfile.txt
drwxr-xr-x   - mapred  supergroup          0 2012-02-01 23:48 /var
drwxr-xr-x   - mapred supergroup          0 2012-02-01 23:48 /var/lib
drwxr-xr-x   - mapred supergroup          0 2012-02-01 23:48 /var/lib/hadoop-0.20
drwxr-xr-x   - mapred supergroup          0 2012-02-01 23:48 /var/lib/hadoop-0.20/cache
drwxr-xr-x   - mapred supergroup          0 2012-02-01 23:48 /var/lib/hadoop-0.20/cache/mapred
drwxr-xr-x   - mapred supergroup          0 2012-02-01 23:48 /var/lib/hadoop-0.20/cache/mapred/mapred
drwx------   - mapred supergroup          0 2012-02-01 23:48 /var/lib/hadoop-0.20/cache/mapred/mapred/system
-rw-------   1 mapred supergroup          4 2012-02-01 23:48 /var/lib/hadoop-0.20/cache/mapred/mapred/system/jobtracker.info
$ hadoop fs -cat /tmp/testfile.txt  # 中身の確認
12/02/09 22:40:53 INFO security.UserGroupInformation: JAAS Configuration already set up for Hadoop, not re-installing.
Hello, World!

ちゃんとファイルが作成できてますね!

というわけで誰か libhdfs を使って便利なツールを作ってください!!

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/a_bicky/20120209/1328796430