gpt4 book ai didi

java - 在 HDFS 上使用 libhdfs 进行文件 i/o

转载 作者:可可西里 更新时间:2023-11-01 16:14:04 28 4
gpt4 key购买 nike

我想使用 libhdfs 写入和读取 HDFS。我有发布版本 hadoop2.5.0。我想做的是编译并运行他们提供的代码作为测试,代码编译正常,这就是我所做的

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

但是每当我尝试运行它时,我都会收到以下错误,

无法获取 java.lang.NoClassDefFoundError 异常的堆栈跟踪:ExceptionUtils::getStackTrace 错误。

我意识到它无法链接到 java 类的一些 jar 文件,在这里发现了类似的问题 Writing files in hdfs in C++ (libhdfs)在这里 Hadoop 2.0 JAR files , 试图解决它们但没有成功。这是我设置的 CLASSPATH 环境变量

CLASSPATH=$HADOOP_HOME/share/hadoop/common/:$HADOOP_HOME/share/hadoop/hdfs/:$HADOOP_HOME/share/hadoop/yarn/:$HADOOP_HOME/share/hadoop/mapreduce/:$HADOOP_HOME/share/hadoop/httpfs/:$HADOOP_HOME/share/hadoop/tools/

我在这里错过了什么?

最佳答案

好吧,我发现仅仅通过在 CLASSPATH 中指定它们的根目录并不能链接 jar 文件。我必须将 $HADOOP_HOME/share/hadoop/common/lib 中所有 jar 文件的路径以及 hdfs 文件夹中存在的其他文件显式添加到 CLASSPATH 环境变量中。

写了一个简单的 python 脚本来做到这一点,一切正常。这是脚本的样子

!/usr/bin/python

导入操作系统

PATH = 'path/to/your/jar/files/dir/'

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

列表文件 = []list_file = ''

对于 os.walk(PATH) 中的根、目录、文件名: 对于 file_name 中的名称: 如果名称为“.jar”: path = os.path.join(root, 名称) list_file += ':' + 路径

打印列表文件

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

打印 os.environ['CLASSPATH']

关于java - 在 HDFS 上使用 libhdfs 进行文件 i/o,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25808725/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com