Java 需要使用hadoop本机吗

Java 需要使用hadoop本机吗,java,hadoop,mapreduce,Java,Hadoop,Mapreduce,我正在从java程序调用mapreduce作业。 今天,当我将mapreduce作业的输入从at设置为:LzoTextInputFormat mapreduce作业失败: Could not load native gpl library java.lang.UnsatisfiedLinkError: no gplcompression in java.library.path at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1738)

我正在从java程序调用mapreduce作业。 今天,当我将mapreduce作业的输入从at设置为:
LzoTextInputFormat
mapreduce作业失败:

Could not load native gpl library
java.lang.UnsatisfiedLinkError: no gplcompression in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1738)
at java.lang.Runtime.loadLibrary0(Runtime.java:823)
at java.lang.System.loadLibrary(System.java:1028)
at com.hadoop.compression.lzo.GPLNativeCodeLoader.<clinit>(GPLNativeCodeLoader.java:32)
at com.hadoop.compression.lzo.LzoCodec.<clinit>(LzoCodec.java:67)
at com.hadoop.mapreduce.LzoTextInputFormat.listStatus(LzoTextInputFormat.java:58)
at org.apache.hadoop.mapreduce.lib.input.FileInputFormat.getSplits(FileInputFormat.java:241)
at com.hadoop.mapreduce.LzoTextInputFormat.getSplits(LzoTextInputFormat.java:85)
at org.apache.hadoop.mapred.JobClient.writeNewSplits(JobClient.java:885)
at org.apache.hadoop.mapred.JobClient.submitJobInternal(JobClient.java:779)
at org.apache.hadoop.mapreduce.Job.submit(Job.java:432)
at org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:447)
at company.Validation.run(Validation.java:99)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:65)
at company.mapreduceTest.main(mapreduceTest.java:18)
Apr 5, 2012 4:40:29 PM com.hadoop.compression.lzo.LzoCodec <clinit>
SEVERE: Cannot load native-lzo without native-hadoop
java.lang.IllegalArgumentException: Wrong FS: hdfs://D-SJC-00535164:9000/local/usecases /gbase014/outbound/seed_2012-03-12_06-34-39/1_1.lzo.index, expected: file:///
at org.apache.hadoop.fs.FileSystem.checkPath(FileSystem.java:310)
at org.apache.hadoop.fs.RawLocalFileSystem.pathToFile(RawLocalFileSystem.java:47)
at org.apache.hadoop.fs.RawLocalFileSystem.getFileStatus(RawLocalFileSystem.java:357)
at org.apache.hadoop.fs.FilterFileSystem.getFileStatus(FilterFileSystem.java:245)
at org.apache.hadoop.fs.FileSystem.exists(FileSystem.java:648)
at com.hadoop.compression.lzo.LzoIndex.readIndex(LzoIndex.java:169)
at com.hadoop.mapreduce.LzoTextInputFormat.listStatus(LzoTextInputFormat.java:69)
at org.apache.hadoop.mapreduce.lib.input.FileInputFormat.getSplits(FileInputFormat.java:241)
at com.hadoop.mapreduce.LzoTextInputFormat.getSplits(LzoTextInputFormat.java:85)
at org.apache.hadoop.mapred.JobClient.writeNewSplits(JobClient.java:885)
at org.apache.hadoop.mapred.JobClient.submitJobInternal(JobClient.java:779)
at org.apache.hadoop.mapreduce.Job.submit(Job.java:432)
at org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:447)
at company.Validation.run(Validation.java:99)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:65)
at company.stopTransfer.mapreduceTest.main(mapreduceTest.java:18)
Apr 5, 2012 4:40:29 PM company.Validation run
 SEVERE: LinkExtractor: java.lang.IllegalArgumentException: Wrong FS: hdfs://D-SJC-00535164:9000/local/usecases/gbase014/outbound/seed_2012-03-12_06-34-39/1_1.lzo.index, expected: file:///
at org.apache.hadoop.fs.FileSystem.checkPath(FileSystem.java:310)
at org.apache.hadoop.fs.RawLocalFileSystem.pathToFile(RawLocalFileSystem.java:47)
at org.apache.hadoop.fs.RawLocalFileSystem.getFileStatus(RawLocalFileSystem.java:357)
at org.apache.hadoop.fs.FilterFileSystem.getFileStatus(FilterFileSystem.java:245)
at org.apache.hadoop.fs.FileSystem.exists(FileSystem.java:648)
at com.hadoop.compression.lzo.LzoIndex.readIndex(LzoIndex.java:169)
at com.hadoop.mapreduce.LzoTextInputFormat.listStatus(LzoTextInputFormat.java:69)
at org.apache.hadoop.mapreduce.lib.input.FileInputFormat.getSplits(FileInputFormat.java:241)
at com.hadoop.mapreduce.LzoTextInputFormat.getSplits(LzoTextInputFormat.java:85)
at org.apache.hadoop.mapred.JobClient.writeNewSplits(JobClient.java:885)
at org.apache.hadoop.mapred.JobClient.submitJobInternal(JobClient.java:779)
at org.apache.hadoop.mapreduce.Job.submit(Job.java:432)
at org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:447)
at company.Validation.run(Validation.java:99)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:65)
at company.stopTransfer.mapreduceTest.main(mapreduceTest.java:18)
无法加载本机gpl库
java.lang.UnsatifiedLink错误:java.library.path中没有gplcompression
位于java.lang.ClassLoader.loadLibrary(ClassLoader.java:1738)
位于java.lang.Runtime.loadLibrary0(Runtime.java:823)
位于java.lang.System.loadLibrary(System.java:1028)
位于com.hadoop.compression.lzo.GPLNativeCodeLoader(GPLNativeCodeLoader.java:32)
位于com.hadoop.compression.lzo.LzoCodec。(LzoCodec.java:67)
位于com.hadoop.mapreduce.LzoTextInputFormat.listStatus(LzoTextInputFormat.java:58)
位于org.apache.hadoop.mapreduce.lib.input.FileInputFormat.getSplits(FileInputFormat.java:241)
位于com.hadoop.mapreduce.LzoTextInputFormat.getSplits(LzoTextInputFormat.java:85)
位于org.apache.hadoop.mapred.JobClient.writeNewSplits(JobClient.java:885)
位于org.apache.hadoop.mapred.JobClient.submitJobInternal(JobClient.java:779)
位于org.apache.hadoop.mapreduce.Job.submit(Job.java:432)
位于org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:447)
运行(Validation.java:99)
位于org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:65)
位于company.mapreduceTest.main(mapreduceTest.java:18)
2012年4月5日下午4:40:29 com.hadoop.compression.lzo.LzoCodec
严重:在没有本机hadoop的情况下无法加载本机lzo
java.lang.IllegalArgumentException:错误的FS:hdfs://D-SJC-00535164:9000/local/usecases /gbase014/outbound/seed_2012-03-12_06-34-39/1_1.lzo.index,预期:文件:///
位于org.apache.hadoop.fs.FileSystem.checkPath(FileSystem.java:310)
位于org.apache.hadoop.fs.RawLocalFileSystem.pathToFile(RawLocalFileSystem.java:47)
位于org.apache.hadoop.fs.RawLocalFileSystem.getFileStatus(RawLocalFileSystem.java:357)
位于org.apache.hadoop.fs.FilterFileSystem.getFileStatus(FilterFileSystem.java:245)
位于org.apache.hadoop.fs.FileSystem.exists(FileSystem.java:648)
位于com.hadoop.compression.lzo.LzoIndex.readIndex(LzoIndex.java:169)
位于com.hadoop.mapreduce.LzoTextInputFormat.listStatus(LzoTextInputFormat.java:69)
位于org.apache.hadoop.mapreduce.lib.input.FileInputFormat.getSplits(FileInputFormat.java:241)
位于com.hadoop.mapreduce.LzoTextInputFormat.getSplits(LzoTextInputFormat.java:85)
位于org.apache.hadoop.mapred.JobClient.writeNewSplits(JobClient.java:885)
位于org.apache.hadoop.mapred.JobClient.submitJobInternal(JobClient.java:779)
位于org.apache.hadoop.mapreduce.Job.submit(Job.java:432)
位于org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:447)
运行(Validation.java:99)
位于org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:65)
位于company.stopTransfer.mapreduceTest.main(mapreduceTest.java:18)
2012年4月5日下午4:40:29公司。验证运行
严重:LinkExtractor:java.lang.IllegalArgumentException:错误的FS:hdfs://D-SJC-00535164:9000/local/usecases/gbase014/outbound/seed_2012-03-12_06-34-39/1_1.lzo.index,应为:文件:///
位于org.apache.hadoop.fs.FileSystem.checkPath(FileSystem.java:310)
位于org.apache.hadoop.fs.RawLocalFileSystem.pathToFile(RawLocalFileSystem.java:47)
位于org.apache.hadoop.fs.RawLocalFileSystem.getFileStatus(RawLocalFileSystem.java:357)
位于org.apache.hadoop.fs.FilterFileSystem.getFileStatus(FilterFileSystem.java:245)
位于org.apache.hadoop.fs.FileSystem.exists(FileSystem.java:648)
位于com.hadoop.compression.lzo.LzoIndex.readIndex(LzoIndex.java:169)
位于com.hadoop.mapreduce.LzoTextInputFormat.listStatus(LzoTextInputFormat.java:69)
位于org.apache.hadoop.mapreduce.lib.input.FileInputFormat.getSplits(FileInputFormat.java:241)
位于com.hadoop.mapreduce.LzoTextInputFormat.getSplits(LzoTextInputFormat.java:85)
位于org.apache.hadoop.mapred.JobClient.writeNewSplits(JobClient.java:885)
位于org.apache.hadoop.mapred.JobClient.submitJobInternal(JobClient.java:779)
位于org.apache.hadoop.mapreduce.Job.submit(Job.java:432)
位于org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:447)
运行(Validation.java:99)
位于org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:65)
位于company.stopTransfer.mapreduceTest.main(mapreduceTest.java:18)
但在lib/native中,它们是一些带有a、la的扩展文件,所以。。。 我试图在path环境变量中设置它们,但仍然不起作用

谁能给我提个建议


多谢各位

您的错误与hadoop本机库文件夹中不存在Lzo的实际共享库有关

gplnativecododeloader
的代码正在寻找一个名为
gplcompression
的共享库。Java实际上正在寻找一个名为
libgplcompression.so
的文件。如果您的
lib/native/${arch}
文件夹中不存在此文件,您将看到此错误

在终端中,导航到hadoop基本目录并执行以下操作以转储安装的本机库,然后发回原始问题

uname -a
find lib/native

如果您使用的是Cloudera Hadoop,则可以根据以下说明轻松安装lzo:


您在什么环境下运行?什么版本的hadoop?您是否安装了hadoop native?我正在使用hadoop-0.20.0我想我已经安装了hadoop native。我可以从命令行运行mapreduce作业:hadoop jar验证…感谢您的建议!文件夹中有libgplcompression文件。但它仍然不起作用。因为我从java调用ToolRunner,所以我将其作为java应用程序运行。我设置了conf.set(“java.library.path”,“本机文件夹的绝对路径”),但它仍然不工作!集群中的每个节点上都有这个libgplcompression.so文件吗?对不起,我的意思是在系统中设置java.library.path。我认为设置
java.library.path
只适用于作业客户端(我需要进一步挖掘源代码)但是您可以通过DistributedCache添加共享库-请参阅本机共享库部分!在java路径中将路径添加到本机解决了这个问题。