Назад | Перейти на главную страницу

Компиляция hdfs-fuse в комплекте с Hadoop

Я пытаюсь скомпилировать расширение hdfs-fuse из Hadoop 0.20.2 на машине с Fedora 14. Ниже приведены установленные мной пакеты:

предохранитель-2.8.5-2.fc14.x86_64
предохранитель-libs-2.8.5-2.fc14.x86_64
предохранитель-devel-2.8.5-2.fc14.x86_64

Затем я последовал руководству, доступному в вики Hadoop:
http://wiki.apache.org/hadoop/MountableHDFS

Подводя итог, вот шаги, которые я использую:

  1. Зайдите в $ HADOOP_HOME, и я запускаю компиляцию libhdfs, используя:

    Ant compile-c ++ - libhdfs -Dislibhdfs = 1

  2. На втором этапе я копирую библиотеку libhdfs в папку libhdfs:

    сборка mkdir / libhdfs
    cp build / c ++ / Linux-amd64-64 / lib / * сборка / libhdfs

  3. Я компилирую исполняемый файл fuse_hdfs:

    ant compile-contrib -Dislibhdfs = 1 -Dfusedfs = 1 -Dlibhdfs-fuse = 1

Моя проблема в том, что на последнем этапе я получаю следующую ошибку:

     [exec] Making all in .
     [exec] make[1]: Entering directory `/local/opt/hadoop-0.20.2/src/contrib/fuse-dfs'
     [exec] make[1]: Nothing to be done for `all-am'.
     [exec] make[1]: Leaving directory `/local/opt/hadoop-0.20.2/src/contrib/fuse-dfs'
     [exec] Making all in src
     [exec] make[1]: Entering directory `/local/opt/hadoop-0.20.2/src/contrib/fuse-dfs/src'
     [exec] gcc  -Wall -O3 -L/local/opt/hadoop-0.20.2/build/libhdfs -lhdfs -L/lib -lfuse -L/user/lpellegr/home/local/opt/jdk//jre/lib/amd64/server -ljvm  -o fuse_dfs fuse_dfs.o fuse_options.o fuse_trash.o fuse_stat_struct.o fuse_users.o fuse_init.o fuse_connect.o fuse_impls_access.o fuse_impls_chmod.o fuse_impls_chown.o fuse_impls_create.o fuse_impls_flush.o fuse_impls_getattr.o fuse_impls_mkdir.o fuse_impls_mknod.o fuse_impls_open.o fuse_impls_read.o fuse_impls_release.o fuse_impls_readdir.o fuse_impls_rename.o fuse_impls_rmdir.o fuse_impls_statfs.o fuse_impls_symlink.o fuse_impls_truncate.o fuse_impls_utimens.o fuse_impls_unlink.o fuse_impls_write.o  
     [exec] /usr/bin/ld: fuse_stat_struct.o: undefined reference to symbol 'ceil@@GLIBC_2.2.5'
     [exec] /usr/bin/ld: note: 'ceil@@GLIBC_2.2.5' is defined in DSO /lib64/libm.so.6 so try adding it to the linker command line
     [exec] /lib64/libm.so.6: could not read symbols: Invalid operation
     [exec] collect2: ld returned 1 exit status
     [exec] make[1]: *** [fuse_dfs] Error 1
     [exec] make[1]: Leaving directory `/local/opt/hadoop-0.20.2/src/contrib/fuse-dfs/src'
     [exec] make: *** [all-recursive] Error 1

BUILD FAILED
/local/opt/hadoop-0.20.2/build.xml:497: The following error occurred while executing this line:
/local/opt/hadoop-0.20.2/src/contrib/build.xml:30: The following error occurred while executing this line:
/local/opt/hadoop-0.20.2/src/contrib/fuse-dfs/build.xml:57: exec returned: 2

Здесь важно отметить, что я не определил FUSE_HOME. Как вы думаете, определение FUSE_HOME может помочь? или у вас есть представление о проблеме?

Я не думаю, что определение FUSE_HOME поможет. Важные строки

 [exec] /usr/bin/ld: fuse_stat_struct.o: undefined reference to symbol 'ceil@@GLIBC_2.2.5'
 [exec] /usr/bin/ld: note: 'ceil@@GLIBC_2.2.5' is defined in DSO /lib64/libm.so.6 so try adding it to the linker command line
 [exec] /lib64/libm.so.6: could not read symbols: Invalid operation
 [exec] collect2: ld returned 1 exit status

Компоновщик сообщает вам, что символ ceil в fuse_stat_struct.c не может быть найден ... но он знает, где он находится. Он находится в libm.so - вероятно, предоставлен glibc-devel. Возможно, вам понадобится 32-битная версия libm.so. Я такого раньше не видел.

Немного поиска дает следующее: http://lists.fedoraproject.org/pipermail/devel/2010-March/133601.html

В качестве удара попробуйте установить переменную среды LDFLAGS и перекомпилировать.

 ant compile-contrib -Dislibhdfs=1 -Dfusedfs=1 -Dlibhdfs-fuse=1 LDFLAGS=-lm