3

我有一个 hadoop 集群,可以从本地机器访问以进行开发/调试。我的本地盒子中没有安装 hadoop;相反,我只使用客户端库(通过 Maven,FWIW)。

我目前正在尝试读取一些使用 Snappy 压缩压缩的序列文件。我收到一个错误:“本机 snappy 库不可用”。到目前为止,我能找到的有关解决此问题的所有信息看起来都假设您在客户端计算机上安装了完整的 Hadoop。他们都在谈论将libhadoop.solibsnappy.so放在lib/native您的 Hadoop 目录下。在我的开发机器上,我没有 Hadoop 目录。

虽然我想我可以完整安装 Hadoop,但我很想知道是否可以做一些更简单的事情。到目前为止,让我的过程发现这些库的各种尝试都失败了。我可能还没有找到正确的配置,但是根据所有关于使用 Snappy 的文档和线程,我不确定它是否可能(或者至少是直截了当的)。

4

2 回答 2

2

Hadooplibsnappy.so$HADOOP_HOME/lib/native/. 所以你可以尝试这样做:

  1. 创建一个文件夹结构,如/home/user/hadoop/lib/native
  2. 在这个文件夹中放一个libsnappy.so和。libhadoop.so您可以从集群中复制它。
  3. 设置$HADOOP_HOME/home/user/hadoop
  4. 运行您的应用程序。
于 2013-07-26T13:11:57.923 回答
0

终于解决了这个问题。

正如shuty所预料的那样,这只是类加载器找错了位置的问题。(或者如果你想换个角度想,我没有把它放在正确的位置。)

老好人strace最终挽救了局面。它揭示了以下内容:

stat64("/usr/lib/jvm/java-6-sun-1.6.0.26/jre/lib/i386/libsnappy.so", 0xb68eef50) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/jvm/java-6-sun-1.6.0.26/jre/lib/i386/server/libsnappy.so", 0xb68eef50) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/jvm/java-6-sun-1.6.0.26/jre/lib/i386/libsnappy.so", 0xb68eef50) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/jvm/java-6-sun-1.6.0.26/jre/../lib/i386/libsnappy.so", 0xb68eef50) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/intellij-12.1/bin/libsnappy.so", 0xb68eef50) = -1 ENOENT (No such file or directory)
stat64("./libsnappy.so", 0xb68eef50)    = -1 ENOENT (No such file or directory)
stat64("/usr/java/packages/lib/i386/libsnappy.so", 0xb68eef50) = -1 ENOENT (No such file or directory)
stat64("/lib/libsnappy.so", 0xb68eef50) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/libsnappy.so", 0xb68eef50) = -1 ENOENT (No such file or directory)

一旦我将文件拍打到其中一个位置,事情就变得很顺利。

我希望这对将来的其他人有所帮助。

于 2013-12-03T23:46:21.777 回答