2016-08-02 22 views
0

我正在使用com.cloudera.crunch版本:'0.3.0-3-cdh-5.2.1'。使用緊縮寫入時java.lang.UnsatisfiedLinkError MemPipeline

我有一個小程序,它讀取一些AVRO並根據一些標準過濾掉無效數據。我正在使用pipeline.write(PCollection,AvroFileTarget)來寫入無效的數據輸出。它在生產運行中運行良好。

對於單元測試這段代碼,我使用MemPipeline實例。 但是,在這種情況下寫入輸出時會失敗。

我得到錯誤:

java.lang.UnsatisfiedLinkError: org.apache.hadoop.util.NativeCrc32.nativeComputeChunkedSumsByteArray(II[BI[BIILjava/lang/String;JZ)V 
    at org.apache.hadoop.util.NativeCrc32.nativeComputeChunkedSumsByteArray(Native Method) 
    at org.apache.hadoop.util.NativeCrc32.calculateChunkedSumsByteArray(NativeCrc32.java:86) 
    at org.apache.hadoop.util.DataChecksum.calculateChunkedSums(DataChecksum.java:428) 
    at org.apache.hadoop.fs.FSOutputSummer.writeChecksumChunks(FSOutputSummer.java:197) 
    at org.apache.hadoop.fs.FSOutputSummer.flushBuffer(FSOutputSummer.java:163) 
    at org.apache.hadoop.fs.FSOutputSummer.flushBuffer(FSOutputSummer.java:144) 
    at org.apache.hadoop.fs.FSOutputSummer.write(FSOutputSummer.java:78) 
    at org.apache.hadoop.fs.FSDataOutputStream$PositionCache.write(FSDataOutputStream.java:50) 
    at java.io.DataOutputStream.writeBytes(DataOutputStream.java:276) 
    at com.cloudera.crunch.impl.mem.MemPipeline.write(MemPipeline.java:159) 

任何想法有什麼不對?

+0

我記得看到在MemPipeline的AVRO處理存在的一些缺陷;你的模式是否特別複雜?您是否可以在MemPipeline中使用該模式編寫任何Avro記錄,還是僅僅是您篩選出的無效記錄會引發此錯誤? – Suriname0

+0

嗨,我無法使用MemPipeline寫任何記錄。 MemPipeline.write()總是給我這個錯誤。 – Yogesh

+0

那麼這可能是您的模式的一個問題。嘗試使用非常基本的Avro模式創建一個簡單的測試(例如一個帶有單個字符串字段的記錄),並查看您是否能夠將物化記錄寫入磁盤。如果你不能,這可能是你的依賴問題;如果您使用的是像Maven這樣的工具,請檢查依賴關係樹,並考慮明確排除一些可能導致問題的傳遞依賴關係。 – Suriname0

回答

1

Hadoop環境變量應該與hadoop.dll和winutils.exe一起配置正確。

而且通過JVM參數在執行MR工作/應用 -Djava.library.path = HADOOP_HOME/lib目錄/本地