3
我創建了這個作業,它從HDFS讀取一堆JSON文件並嘗試將它們加載到MongoDB中。這只是地圖腳本,因爲我不需要任何額外的處理步驟。我正在嘗試使用mongo-hadoop連接器。Hadoop使用mongo-hadoop連接器流式傳輸失敗
該腳本使用Perl編寫並配置給羣集中的所有節點,並配置了所有其他依賴項。該腳本以二進制模式發出原始JSON文件的BSON序列化版本。
因爲某些原因作業失敗,出現以下錯誤:
Error: java.lang.ClassCastException: org.apache.hadoop.io.Text cannot be cast to com.mongodb.hadoop.io.BSONWritable
at com.mongodb.hadoop.streaming.io.MongoInputWriter.writeValue(MongoInputWriter.java:10)
at org.apache.hadoop.streaming.PipeMapper.map(PipeMapper.java:106)
at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:54)
at org.apache.hadoop.streaming.PipeMapRunner.run(PipeMapRunner.java:34)
at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:453)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:343)
at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:168)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:422)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1657)
at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:162)
不僅如此,但我使用Python中的pymono-Hadoop的包創建一個版本相同的腳本。作業失敗並出現相同的錯誤。
在日誌中失敗的任務挖一點點後,我發現,實際的錯誤是:
2016-06-13 16:13:11,778 INFO [Thread-12] com.mongodb.hadoop.io.BSONWritable: No Length Header available.java.io.EOFException
的問題是,它靜靜地失敗,我已經添加了一些記錄在映射器,但從它看起來映射器甚至沒有被調用。這就是我打電話給我的工作:
yarn jar /usr/hdp/2.4.0.0-169/hadoop-mapreduce/hadoop-streaming.jar \
-libjars /opt/mongo-hadoop/mongo-hadoop-core-1.5.2.jar,/opt/mongo-hadoop/mongo-hadoop-streaming-1.5.2.jar,/opt/mongo-hadoop/mongodb-driver-3.2.2.jar \
-D mongo.output.uri="${MONGODB}" \
-outputformat com.mongodb.hadoop.mapred.MongoOutputFormat \
-jobconf stream.io.identifier.resolver.class=com.mongodb.hadoop.streaming.io.MongoIdentifierResolver \
-io mongodb \
-input "${INPUT_PATH}" \
-output "${OUTPUT_PATH}" \
-mapper "/opt/mongo/mongo_mapper.py"
我在做什麼錯?似乎沒有其他方式來獲得進入HDFS數據的MongoDB ...
您應該添加更新並回答問題的答案。如果有人在搜索中發現你的問題,他們將會有更輕鬆的時間。 – grochmal
謝謝。完成! –