设为首页 收藏本站
查看: 916|回复: 0

[经验分享] Hadoop学习三十:Win7 Eclipse调试Centos Hadoop2.2-Mapreduce

[复制链接]

尚未签到

发表于 2016-5-13 07:06:14 | 显示全部楼层 |阅读模式
 
一. 自己搭建开发环境
     今天自己搭建了一套Centos5.3 + Hadoop2.2 + Hbase0.96.1.1的开发环境,Win7 Eclipse调试MapReduce成功。可能是版本比较高的原因,出了问题,网上找不到完整解决方案,只能靠自己。
 
二. Hadoop安装
     这个就不啰嗦了,网上大把文章。我下载的是hadoop-2.2.0.tar.gz



  • http://www.cnblogs.com/xia520pi/archive/2012/05/16/2503949.html 很详细的介绍了Hadoop Hdfs的安装。它这个不是Hadoop2.2的,但配置都大同小异。
  • MapReduce的配置可以参考http://blog.sina.com.cn/s/blog_546abd9f0101i8b8.html。


     安装成功后,能顺利查看以下几个页面,就OK了。我的集群环境是200master,201-203slave。


  • dfs.http.address   192.168.1.200:50070
  • dfs.secondary.http.address  192.168.1.200:50090
  • dfs.datanode.http.address  192.168.1.201:50075
  • yarn.resourcemanager.webapp.address  192.168.1.200:50030
  • mapreduce.jobhistory.webapp.address 192.168.1.200:19888。这个好像访问不了。需要启动hadoop/sbin/mr-jobhistory-daemon.sh start historyserver才可以访问。


三. Hadoop2.x eclispe-plugin
     https://github.com/winghc/hadoop2x-eclipse-plugin
     目前这个插件还在开发中,你可以自己下载源码编译,网上也有人发布编译好的jar。
     http://blog.csdn.net/zythy/article/details/17397153 这个同学写的很详细了。
     需要注意一点的是,Hadoop installation directory里填写Win下的hadoop home地址,其目的在于创建MapReduce Project能从这个地方自动引入MapReduce需要的jar。解压hadoop-2.2.0.tar.gz到本地即可。
 
四. 各种问题
      上面一步完成后,创建一个MapReduce Project,运行时发现出问题了。


  •  
    java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.

     跟代码就去发现是HADOOP_HOME的问题。如果HADOOP_HOME为空,必然fullExeName为null\bin\winutils.exe。解决方法很简单啦,乖乖的配置环境变量吧,不想重启电脑可以在MapReduce程序里加上System.setProperty("hadoop.home.dir", "...");暂时缓缓。org.apache.hadoop.util.Shell.java
      public static final String getQualifiedBinPath(String executable)
    throws IOException {
    // construct hadoop bin path to the specified executable
    String fullExeName = HADOOP_HOME_DIR + File.separator + "bin"
    + File.separator + executable;
    File exeFile = new File(fullExeName);
    if (!exeFile.exists()) {
    throw new IOException("Could not locate executable " + fullExeName
    + " in the Hadoop binaries.");
    }
    return exeFile.getCanonicalPath();
    }
    private static String HADOOP_HOME_DIR = checkHadoopHome();
    private static String checkHadoopHome() {
    // first check the Dflag hadoop.home.dir with JVM scope
    String home = System.getProperty("hadoop.home.dir");
    // fall back to the system/user-global env variable
    if (home == null) {
    home = System.getenv("HADOOP_HOME");
    }
    ...
    }
     
  • 这个时候得到完整的地址fullExeName,我机器上是D:\Hadoop\tar\hadoop-2.2.0\hadoop-2.2.0\bin\winutils.exe。继续执行代码又发现了错误
    Could not locate executable D:\Hadoop\tar\hadoop-2.2.0\hadoop-2.2.0\bin\winutils.exe in the Hadoop binaries.
     就去一看,没有winutils.exe这个东西。去https://github.com/srccodes/hadoop-common-2.2.0-bin下载一个,放就去即可。
  • 继续出问题
    at org.apache.hadoop.util.Shell.execCommand(Shell.java:661)
    at org.apache.hadoop.fs.RawLocalFileSystem.setPermission(RawLocalFileSystem.java:639)
    at org.apache.hadoop.fs.RawLocalFileSystem.mkdirs(RawLocalFileSystem.java:435)
      继续跟代码org.apache.hadoop.util.Shell.java
      public static String[] getSetPermissionCommand(String perm, boolean recursive,
    String file) {
    String[] baseCmd = getSetPermissionCommand(perm, recursive);
    String[] cmdWithFile = Arrays.copyOf(baseCmd, baseCmd.length + 1);
    cmdWithFile[cmdWithFile.length - 1] = file;
    return cmdWithFile;
    }
    /** Return a command to set permission */
    public static String[] getSetPermissionCommand(String perm, boolean recursive) {
    if (recursive) {
    return (WINDOWS) ? new String[] { WINUTILS, "chmod", "-R", perm }
    : new String[] { "chmod", "-R", perm };
    } else {
    return (WINDOWS) ? new String[] { WINUTILS, "chmod", perm }
    : new String[] { "chmod", perm };
    }
    }
     cmdWithFile数组的内容为{"D:\Hadoop\tar\hadoop-2.2.0\hadoop-2.2.0\bin\winutils.exe", "chmod", "755", "xxxfile"},我把这个单独在cmd里执行了一下,发现
    无法启动此程序,因为计算机中丢失 MSVCR100.dll
     那就下载一个呗http://files.cnblogs.com/sirkevin/msvcr100.rar,丢到C:\Windows\System32里面。再次cmd执行,又来了问题
    应用程序无法正常启动(0xc000007b)
     下载http://blog.csdn.net/vbcom/article/details/7245186 DirectX_Repair来解决这个问题吧。记得修复完后要重启电脑。搞定后cmd试一下,很棒。
  • 到了这里,已经看到曙光了,但问题又来了
    Exception in thread "main" java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z
     代码就去
        /** Windows only method used to check if the current process has requested
    *  access rights on the given path. */
    private static native boolean access0(String path, int requestedAccess);
     显然缺少dll文件,还记得https://github.com/srccodes/hadoop-common-2.2.0-bin下载的东西吧,里面就有hadoop.dll,最好的方法就是用hadoop-common-2.2.0-bin-master/bin目录替换本地hadoop的bin目录,并在环境变量里配置PATH=HADOOP_HOME/bin,重启电脑。
  • 终于看到了MapReduce的正确输出output99。 DSC0000.jpg


五. 总结 


  •  hadoop eclipse插件不是必须的,其作用在我看来就是如下三点(这个是一个错误的认识,具体请参考http://zy19982004.iyunv.com/blog/2031172)。study-hadoop是一个普通project,直接运行(不通过Run on Hadoop这只大象),一样可以调试到MapReduce。

      • 对hadoop中的文件可视化。
      • 创建MapReduce Project时帮你引入依赖的jar。
      • Configuration conf = new Configuration();时就已经包含了所有的配置信息。


  • 还是自己下载hadoop2.2的源码编译好,应该是不会有任何问题的(没有亲测)。
  
六. 其它问题


  •  还是
    Exception in thread "main" java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z
    代码跟到org.apache.hadoop.util.NativeCodeLoader.java去看
      static {
    // Try to load native hadoop library and set fallback flag appropriately
    if(LOG.isDebugEnabled()) {
    LOG.debug("Trying to load the custom-built native-hadoop library...");
    }
    try {
    System.loadLibrary("hadoop");
    LOG.debug("Loaded the native-hadoop library");
    nativeCodeLoaded = true;
    } catch (Throwable t) {
    // Ignore failure to load
    if(LOG.isDebugEnabled()) {
    LOG.debug("Failed to load native-hadoop with error: " + t);
    LOG.debug("java.library.path=" +
    System.getProperty("java.library.path"));
    }
    }
    if (!nativeCodeLoaded) {
    LOG.warn("Unable to load native-hadoop library for your platform... " +
    "using builtin-java classes where applicable");
    }
    }
     这里报错如下
    DEBUG org.apache.hadoop.util.NativeCodeLoader - Failed to load native-hadoop with error: java.lang.UnsatisfiedLinkError: HADOOP_HOME\bin\hadoop.dll: Can't load AMD 64-bit .dll on a IA 32-bit platform

     怀疑是32位jdk的问题,替换成64位后,没问题了
    2014-03-11 19:43:08,805 DEBUG org.apache.hadoop.util.NativeCodeLoader - Trying to load the custom-built native-hadoop library...
    2014-03-11 19:43:08,812 DEBUG org.apache.hadoop.util.NativeCodeLoader - Loaded the native-hadoop library
     这里也解决了一个常见的警告
    WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
     
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-216220-1-1.html 上篇帖子: CentOS 5.8 编译安装mysql5.5.25a 下篇帖子: centos环境下svn多资源库配置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表