Удастся ли кому-нибудь использовать hdfs из c ++, используя hadoop 2.6.0?
Я пытаюсь скомпилировать этот код:
#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!";
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);
}
Вот список моих папок:
$ ls ${HADOOP_HDFS_HOME}
bin etc include lib libexec LICENSE.txt logs NOTICE.txt README.txt sbin share
$ ls ${HADOOP_HDFS_HOME}/include
hdfs.h Pipes.hh SerialUtils.hh StringUtils.hh TemplateFactory.hh
$ ls ${HADOOP_HDFS_HOME}/lib/native
libhadoop.a libhadooppipes.a libhadoop.so libhadoop.so.1.0.0 libhadooputils.a libhdfs.a libhdfs.so libhdfs.so.0.0.0
Я пытаюсь скомпилировать с помощью этой команды и получить ошибки:
g++ -I${HADOOP_HDFS_HOME}/include -L${HADOOP_HDFS_HOME}/lib/native -lhdfs -lhadooputils -o hdfs_test hdfs_test.cpp
/tmp/ccyYER8m.o: In function `main':
hdfs_test.cpp:(.text+0x1b): undefined reference to `hdfsConnect'
hdfs_test.cpp:(.text+0x8f): undefined reference to `hdfsOpenFile'
hdfs_test.cpp:(.text+0xe8): undefined reference to `hdfsWrite'
hdfs_test.cpp:(.text+0xfe): undefined reference to `hdfsFlush'
hdfs_test.cpp:(.text+0x141): undefined reference to `hdfsCloseFile'
Я понимаю, что должен связать некоторые библиотеки hadoop, но я не могу найти никакой документации. Также у меня нет большого опыта в с ++.
Попробуй это:
export HADOOP_INSTALL = / home / james / Desktop / hadoop2.7.2
экспорт PATH = $ PATH: $ HADOOP_INSTALL / bin
добавить настройки компоновщика:
-lhadooppipes
-lhadooputils
добавить каталоги поиска по каталогам:
/ Библиотека / родной
КСТАТИ:
Если вы работаете в 64-битной системе, вам нужно скомпилировать hadoop для 64-битной системы.