2012-11-02 26 views
12

Tôi có bản thực thi bản đồ và giảm tốc được viết bằng C#. Tôi muốn sử dụng chúng với tính năng phát trực tuyến Hadoop.Phát trực tiếp Hadoop với C# và Mono: IdentityMapper được sử dụng không chính xác

Đây là lệnh tôi đang sử dụng để tạo ra các công việc Hadoop ...

hadoop jar $HADOOP_HOME/contrib/streaming/hadoop-streaming-*.jar 
-input "/user/hduser/ss_waits" 
-output "/user/hduser/ss_waits-output" 
–mapper "mono mapper.exe" 
–reducer "mono reducer.exe" 
-file "mapper.exe" 
-file "reducer.exe" 

Đây là lỗi gặp phải bởi mỗi mapper ...

java.io.IOException: Type mismatch in key from map: expected org.apache.hadoop.io.Text, recieved org.apache.hadoop.io.LongWritable 
at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.collect(MapTask.java:1014) 
at org.apache.hadoop.mapred.MapTask$OldOutputCollector.collect(MapTask.java:592) 
at org.apache.hadoop.mapred.lib.IdentityMapper.map(IdentityMapper.java:38) 
at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:50) 
at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:436) 
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:372) 
at org.apache.hadoop.mapred.Child$4.run(Child.java:255) 
at java.security.AccessController.doPrivileged(Native Method) 
at javax.security.auth.Subject.doAs(Subject.java:415) 
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1121) 
at org.apache.hadoop.mapred.Child.main(Child.java:249) 

Dựa trên call- ngăn xếp, vấn đề dường như là lớp (IdentityMapper) Java (Java) đang được sử dụng làm người lập bản đồ. (Điều này giải thích tại sao lỗi không phù hợp loại đã được gây ra). Trình ánh xạ phải là tệp "mono mapper.exe" có thể chạy được.

Bất kỳ ý tưởng nào tại sao mono mapper.exe không được sử dụng?

Các mapper.exe và reducer.exe có quyền sau đây: -rwxr-xr-x

tôi có thể thực hiện thành công mono mapper.exe từ vỏ lệnh unix và có nó đọc trong văn bản từ stdin và viết để stdout.

Môi trường:

  • Ubuntu Server 12.04 LTS (VM chạy trên Azure)
  • Hadoop 1.0.4
  • Mono 2,10
+0

Một gợi ý nhỏ: Nếu bạn đang chia lệnh công việc của mình trên nhiều dòng, bạn có viết \ ở cuối mỗi dòng (không phải là cuối cùng) không? – Douglas

+0

Bạn cũng có thể thử: tạo tập lệnh gói (http://www.mono-project.com/Guide:Running_Mono_Applications#Shell_Scripts) hoặc tạo nhóm (http://www.mono-project.com/Guide:Running_Mono_Applications#Bundles) –

Trả lời

1

Giả sử mono là trong PATH, làm bạn cần đường dẫn đầy đủ đến mapper.exe và reducer.exe? tức là

hadoop jar $HADOOP_HOME/contrib/streaming/hadoop-streaming-*.jar 
-input "/user/hduser/ss_waits" 
-output "/user/hduser/ss_waits-output" 
–mapper "mono /path/to/mapper.exe" 
–reducer "mono /path/to/reducer.exe" 
-file "mapper.exe" 
-file "reducer.exe" 
Các vấn đề liên quan