Hadoop에서 이런 에러를 만났습니다. 검색해도 딱히 나오는 것이 없습니다. 있습니다만 별다른 답이 없는 듯 합니다.
똑같은 에러를 만났는데 해결못했습니다.
"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 설정은 따로 해주지 않아도 잘 돈다.