我可以在没有完整Hadoop安装的情况下从本地客户端使用Snappy压缩吗?

时间:2013-05-01 20:14:27

标签: hadoop snappy

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

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

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

2 个答案:

答案 0 :(得分:2)

Hadoop在libsnappy.so中查找$HADOOP_HOME/lib/native/。所以你可以尝试这样做:

  1. 创建类似/home/user/hadoop/lib/native
  2. 的文件夹结构
  3. libsnappy.solibhadoop.so放入此文件夹。您可以从群集中复制它。
  4. $HADOOP_HOME设为/home/user/hadoop
  5. 运行您的应用。

答案 1 :(得分:0)

终于解决了这个问题。

正如Shutty所期望的那样,只是班级装载机看错了地方。 (或者如果你想以另一种方式想到它,我没有把它放在正确的位置。)

好老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)

一旦我把文件打到其中一个位置,事情就变得很糟糕了。

我希望将来可以帮助其他人。