Использование libhdfs для ввода/вывода файлов в HDFS

Я хочу использовать libhdfs для записи и чтения из HDFS. У меня есть версия версии hasoop2.5.0. То, что я пытаюсь сделать, - это скомпилировать и запустить код, который они предоставили в качестве теста, код компилируется отлично, вот что я делаю

gcc -I/usr/lib/jvm/java-7 -o penjdk-amd64/include test/test_libhdfs_ops.c -o test.o -lhdfs -L.

но всякий раз, когда я пытался запустить его, я получаю следующую ошибку,

не удалось получить трассировку стека для исключения java.lang.NoClassDefFoundError: ошибка ExceptionUtils :: getStackTrace.

Я понял, что он не может ссылаться на какой-либо файл jar для классов java, обнаружил похожие проблемы. Написание файлов в hdfs в C++ (libhdfs) и здесь файлы Jado Hoodop 2.0 JAR пытались разрешить их, но не удались. вот то, что я установил как переменную env CLASSPATH

CLASSPATH = $ HADOOP_HOME/доля /Hadoop/общие/: $ HADOOP_HOME/доля /Hadoop/HDFS/: $ HADOOP_HOME/доля /Hadoop/пряжи/: $ HADOOP_HOME/доля /Hadoop/MapReduce/: $ HADOOP_HOME/доля /Hadoop/httpfs/: $ HADOOP_HOME/доля /Hadoop/инструменты/

Что мне здесь не хватает?

1 ответ

Ну, я узнал, что файлы jar не связываются просто путем указания их корневого каталога в CLASSPATH. Мне пришлось явно добавить путь к всем файлам jar в $ HADOOP_HOME/share/hadoop/common/lib, а остальные, присутствующие в папке hdfs, к переменной env CLASSPATH.

Написал простой скрипт python для этого, и все работает. Вот как выглядит сценарий

!/USR/бен/питон

import os

PATH = 'путь/to/your/jar/files/dir/'

os.environ ['CLASSPATH'] = 'temp_path'

listFiles = [] list_file = ''

для root, dirs, file_name в os.walk(PATH): для имени в имени_файла: if ".jar" в имени: path = os.path.join(root, name) list_file + = ':' + path

print list_file

os.environ ['CLASSPATH'] = os.environ ['CLASSPATH'] + list_file

print os.environ ['CLASSPATH']

licensed under cc by-sa 3.0 with attribution.