Skip to content

Instantly share code, notes, and snippets.

@ruseel
Last active August 29, 2015 14:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ruseel/a814f7b89260f3b7ac26 to your computer and use it in GitHub Desktop.
Save ruseel/a814f7b89260f3b7ac26 to your computer and use it in GitHub Desktop.
hadoop snappy UnsatisfiedLinkError

Hadoop에서 이런 에러를 만났습니다. 검색해도 딱히 나오는 것이 없습니다. 있습니다만 별다른 답이 없는 듯 합니다.

http://stackoverflow.com/questions/22150417/hadoop-mapreduce-java-lang-unsatisfiedlinkerror-org-apache-hadoop-util-nativec

똑같은 에러를 만났는데 해결못했습니다.

"hadoop snappy"로 검색해보면 이런 저런 글들이 많은데 참으로 혼란스럽습니다. google의 snappy를 설치하라고 하는 듯 하기도 하고 hadoop-snappy를 설치하라는 듯 하기도 하고 "hadoop common"에 integration되서 이제 필요없는 듯 하기도 합니다.

그래서 저는 OSX 10.9에 cdh4.6.0을 압축을 풀어 설치하고 난 후에 대체 어찌해야 하는 걸까요?

java.lang.Exception: java.lang.UnsatisfiedLinkError: org.apache.hadoop.util.NativeCodeLoader.buildSupportsSnappy()Z
  at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:406)
Caused by: java.lang.UnsatisfiedLinkError: org.apache.hadoop.util.NativeCodeLoader.buildSupportsSnappy()Z
  at org.apache.hadoop.util.NativeCodeLoader.buildSupportsSnappy(Native Method)
  at org.apache.hadoop.io.compress.SnappyCodec.checkNativeCodeLoaded(SnappyCodec.java:62)
  at org.apache.hadoop.io.compress.SnappyCodec.getCompressorType(SnappyCodec.java:127)
  at org.apache.hadoop.io.compress.CodecPool.getCompressor(CodecPool.java:104)
  at org.apache.hadoop.io.compress.CodecPool.getCompressor(CodecPool.java:118)
  at org.apache.hadoop.mapred.IFile$Writer.<init>(IFile.java:105)
  at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.mergeParts(MapTask.java:1533)
  at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.flush(MapTask.java:1199)
  at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:418)
  at org.apache.hadoop.mapred.MapTask.run(MapTask.java:332)
  at org.apache.hadoop.mapred.LocalJobRunner$Job$MapTaskRunnable.run(LocalJobRunner.java:268)
  at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:439)
  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
  at java.util.concurrent.FutureTask.run(FutureTask.java:138)
  at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
  at java.lang.Thread.run(Thread.java:695)

CDH를 쓰고 싶은 저로서는 이런 결론을 내렸습니다.

여러 글을 보니 snappy는 google에서 만들었는데 hadoop-snappy 프로젝트에서 snappy를 hadoop에 잘 넣어서 쓰다가 이제 hadoop-common으로 integration되었다. stacktrace에 떨어지고 있는 org.apache.hadoop.io.compress.SnappyCodec 클래스를 인터넷에서 검색해봐도 그런 것 같다.

UnsatisfiedLinkError에러는 System.load나 System.loadlibrary 함수를 호출할 때 나는 에러는 맞는 듯 한데 아무리 google snappy를 컴파일 해서 /usr/local/lib에 넣어도 ~/Library/Java/Extension에 넣어도 $HADOOP_HOME/lib나 /lib/native에 넣어도 별반 달라지는 것이 없다.

org.apache.hadoop.util.NativeCodeLoader.buildSupportsSnappy를 못 찾는 것이면 리눅스라면 libhadoop.so가 없어서 그런 것이 아닐까? 그렇다면 CDH에서 osx용 libhadoop.dynlib를 제공해 주지 않는 이상 못 하는 것. 아니면 직접 CDH를 compile하거나.

Cloudera에서 제공하는 CDH 4.6.0 VM안에서 돌려보면 snappy 설정은 따로 해주지 않아도 잘 돈다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment