java—在hdfs上使用libhdfs进行文件i/o

cmssoen2  于 2021-05-30  发布在  Hadoop
关注(0)|答案(1)|浏览(455)

我想用libhdfs来写hdfs和读hdfs。我有hadoop2.5.0的发布版本。我要做的是编译并运行他们作为测试提供的代码,代码编译得很好,下面是我要做的
gcc-i/usr/lib/jvm/java-7-openjdk-amd64/include test/test\libhdfs\u ops.c-o test.o-lhdfs-l。
但每当我试着运行它时,我都会出现以下错误,
无法获取java.lang.noclassdeffounderror的堆栈跟踪异常:exceptionutils::getstacktrace错误。
我意识到它无法链接到java类的一些jar文件,在这里发现了类似的问题,用c++(libhdfs)编写hdfs文件和hadoop2.0jar文件,试图解决它们,但没有成功。下面是我设置的classpath env变量
classpath=$hadoop\u home/share/hadoop/common/:$hadoop\u home/share/hadoop/hdfs/:$hadoop\u home/share/hadoop/yarn/:$hadoop\u home/share/hadoop/mapreduce/:$hadoop\u home/share/hadoop/httpfs/:$hadoop\u home/share/hadoop/tools/
我错过了什么?

mqkwyuun

mqkwyuun1#

我发现jar文件并不是通过在类路径中指定它们的根目录来链接的。我必须显式地将$hadoop\u home/share/hadoop/common/lib中的所有jar文件以及hdfs文件夹中的其他jar文件的路径添加到classpath env变量中。
为此编写了一个简单的python脚本,一切正常。下面是脚本的样子

!/usr/bin/python文件

导入操作系统
path='path/to/your/jar/files/dir/'

os.environ['classpath']=“临时路径”

listfiles=[]列表文件=''
对于root,dirs,file\u name in os.walk(path):对于file\u name:if“.jar”in name:path=os.path.join(root,name)list\u file+=':'+path
打印列表文件
os.environ['classpath']=os.environ['classpath']+列表文件
打印操作系统环境['classpath']

相关问题