当前位置:Gxlcms > mysql > myeclipse运行mapreduce报错:Cannotrunprogram"cygpath

myeclipse运行mapreduce报错:Cannotrunprogram"cygpath

时间:2021-07-01 10:21:17 帮助过:43人阅读

直接上代码:Mapper package com.winksi.dotstat;import java.io.IOException;import org.apache.hadoop.io.Text;import org.apache.hadoop.io.LongWritable;import org.apache.hadoop.mapreduce.Mapper;public class DotProducedMapper extends MapperLongW

直接上代码:Mapper

  1. package com.winksi.dotstat;
  2. import java.io.IOException;
  3. import org.apache.hadoop.io.Text;
  4. import org.apache.hadoop.io.LongWritable;
  5. import org.apache.hadoop.mapreduce.Mapper;
  6. public class DotProducedMapper extends Mapper<longwritable, text,="" text="">{
  7. @Override
  8. public void map(LongWritable key, Text value, Context context)
  9. throws IOException, InterruptedException{
  10. String line = value.toString();
  11. String fileds[] = line.split(",");
  12. String imsi = fileds[0];
  13. String adccompany = fileds[1];
  14. String phone = fileds[2];
  15. String cur_time = fileds[3];
  16. String call_length = fileds[4];
  17. String call_type = fileds[5];
  18. String show_length = fileds[6];
  19. String pkgname = fileds[7];
  20. String ip = fileds[8];
  21. String model = fileds[9];
  22. String ossdk = fileds[10];
  23. String av = fileds[11];
  24. String cityId = fileds[12];
  25. StringBuffer strKey = new StringBuffer();
  26. strKey.append(model).append(",").append(adccompany).append(",")
  27. .append(ossdk.toUpperCase()).append(",").append(av).append(",")
  28. .append(phone);
  29. context.write(new Text(strKey.toString()), new Text(imsi));
  30. }
  31. }
  32. </longwritable,>
Reducer:

  1. package com.winksi.dotstat;
  2. import java.io.IOException;
  3. import java.util.Date;
  4. import java.util.HashSet;
  5. import java.util.Iterator;
  6. import java.util.Set;
  7. import org.apache.hadoop.io.Text;
  8. import org.apache.hadoop.mapreduce.Reducer;
  9. public class DotProducedReducer extends Reducer<text, text,="" text="">{
  10. public void reduce(Text key, Iterator<text> values,
  11. Context context)
  12. throws IOException, InterruptedException {
  13. int count = 0;
  14. Set<string> set = new HashSet<string>();
  15. while (values.hasNext()) {
  16. set.add(values.next().toString());
  17. count++;
  18. }
  19. StringBuffer sb = new StringBuffer();
  20. sb.append(count).append(",").append(set.size());
  21. Date yesterdayDate = new Date(new Date().getTime() - 1*24*60*60*1000);
  22. String yesterday = DotStatPvUv.getCurrentDay(yesterdayDate);
  23. StringBuffer sbKey = new StringBuffer();
  24. sbKey.append(key.toString()).append(",").append(yesterday);
  25. context.write(new Text(sbKey.toString()), new Text(sb.toString()));
  26. }
  27. }
  28. </string></string></text></text,>
Spring配置文件:

  1. <!--?xml version="1.0" encoding="UTF-8"?-->
  2. <beans:beans xmlns="http://www.springframework.org/schema/hadoop" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:beans="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xsi:schemalocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
  3. http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
  4. http://www.springframework.org/schema/hadoop http://www.springframework.org/schema/hadoop/spring-hadoop.xsd">
  5. <context:property-placeholder location="classpath:config.properties">
  6. <configuration>
  7. fs.default.name=${hd.fs}
  8. </configuration>
  9. <job id="dotProductJob" input-path="${input.path}" output-path="${output.path}" mapper="com.winksi.dotstat.DotProducedMapper" reducer="com.winksi.dotstat.DotProducedReducer">
  10. <job-runner id="runner" run-at-startup="true" job-ref="dotProductJob">
  11. </job-runner></job></context:property-placeholder></beans:beans>
maven的jar包pom.xml

  1. <dependency>
  2. <groupid>org.springframework.data</groupid>
  3. spring-data-hadoop
  4. <version>1.0.2.RELEASE-cdh4</version>
  5. </dependency>
  6. <dependency>
  7. <groupid>org.apache.hadoop</groupid>
  8. hadoop-core
  9. <version>${hadoop.core.version}</version>
  10. </dependency>
java代码:

public class Test {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("hadoop-mr.xml");
}
}

运行报错:

  1. Exception in thread "main" java.io.IOException: Cannot run program "cygpath": CreateProcess error=2<span>, ?????μ???
  2. at java.lang.ProcessBuilder.start(ProcessBuilder.java:</span>459<span>)
  3. at org.apache.hadoop.util.Shell.runCommand(Shell.java:</span>201<span>)
  4. at org.apache.hadoop.util.Shell.run(Shell.java:</span>183<span>)
  5. at org.apache.hadoop.fs.FileUtil$CygPathCommand.</span><init>(FileUtil.java:413<span>)
  6. at org.apache.hadoop.fs.FileUtil.makeShellPath(FileUtil.java:</span>439<span>)
  7. at org.apache.hadoop.fs.FileUtil.makeShellPath(FileUtil.java:</span>466<span>)
  8. at org.apache.hadoop.fs.RawLocalFileSystem.execCommand(RawLocalFileSystem.java:</span>559<span>)
  9. at org.apache.hadoop.fs.RawLocalFileSystem.setPermission(RawLocalFileSystem.java:</span>551<span>)
  10. at org.apache.hadoop.fs.RawLocalFileSystem.mkdirs(RawLocalFileSystem.java:</span>355<span>)
  11. at org.apache.hadoop.fs.FilterFileSystem.mkdirs(FilterFileSystem.java:</span>212)</init>
原因是尽管连接的hadoop平台是在linux上面,但是我们的eclipse调试环境是在windows,我们需要安装一个linux模拟器“cygwin”来支持程序的运行。

在windows开发服务器上安装好cygwin,然后在环境变量中添加cygwin的bin目录,比如“D:\Program\cygwin\bin”,问题得以解决。

注意是在系统环境变量的Path上加入“D:\Program\cygwin\bin”这样我们就行像在linux上运行命令一样在windows的dos窗口下执行ls,cd等命令。

刚开始我一直是在系统环境变量下的classpath上加的D:\Program\cygwin\bin”,尝试了半天都是失败,后来才发现,是加错了地方。加完之后再cmd窗口中试一下ls,cd等命令。成功后重启myeclipse运行代码,就没有问题了。

------------------------------------------------------------------------------

之前纠结集成的Mapper和Reducer的问题,有两个文件可以继承,具体问题见:

http://wuyanzan60688.blog.163.com/blog/static/127776163201310164244955/

人气教程排行