刘勇    Email: lyssym@sina.com

本博客记录作者在工作与研究中所经历的点滴,一方面给自己的工作与生活留下印记,另一方面若是能对大家有所帮助,则幸甚至哉矣!

简介

鉴于最近在研究Hadoop编程时,为考虑编程的方便,在Windows本地编译源程序,然后直接访问Hadoop集群,这样给广大编程人员提供了极大的便利。在这个过程中积累了一些实际经验,并针对在该过程中(初级阶段)可能会遇到的问题,提供一些解决方案,希望对大家有所帮助。

环境介绍

Hadoop 集群:hadoop 2.7.1, Cent OS 6.5,jdk 1.7

eclipse 环境:Windows 7, eclipse LUNA,jdk 1.8

环境搭建

1) 安装eclipse hadoop 插件

从网络上下载与hadoop 版本相同的插件,如hadoop-eclipse-plugin-2.7.1.jar, 并将其拷贝至eclipse 安装目录中plugins,如D:\Program\eclipse\plugins,然后重启eclipse。

2) 配置mapreduce插件

Windows—>Preference—>Hadoop Map/Reduce,本文配置Hadoop处理目录在D:\hadoop。需要指出,该目录指出后续编译源程序所需的相关jar包以及所需的库文件(Windows编译所需),如图1所示。

图1 Map/Reduce 初始化目录

3) 切换视角

Windows—>Open Perspective—>Other,如图2所示。

图 2 Map/Reduce 视角

4) 配置Map/Reduce Locations

该部分配置在Windows下访问hadoop 集群的位置及相关信息。点击Map/Reduce Locations—>New Hadoop Locations—>General。参数配置过程中,需要关心方框中的Host 与Port,必须与Hadoop集群中Master与DFS配置保持一致,详细内容如图3和4所示。至于User name一般建议采用hadoop 集群安装的用户名hadoop,并在Windows用户与组中将administrator修改为hadoop能省掉很多不必要的麻烦。但是本文采用用户名root,主要是考虑该虚拟机上部署的后台程序较多,很多均需要root权限对配置文件进行修改,故此在该虚拟机上安装时采用root,后续将针对问题介绍(见FAQ 5)。

图 3 Windows下Hadoop集群DFS与NameNode配置

Map/Reduce Locations—>New Hadoop Locations—>Advanced parameters。配置过程中,只需关心方框中hadoop.tmp.dir 必须与hadoop集群core-site.xml配置一致,详细内容见图4和5。至此,eclipse Hadoop 插件已安装完毕。

图 4 Hadoop 集群中 core-site.xml配置

图 5 Windows下Hadoop集群临时文件配置

5) 测试与验证

在工程导航栏,展开DFS Locations,若能看到用户通过hadoop fs 操作命令在hadoop集群上对文件做出的操作,如图6所示,则该插件安装完成。需要指出,能够读取HDFS中文件并不表明用户拥有对HDFS的操作权限,用户需要验证对该文件系统上传文件、删除文件操作,并能完全成功,则表明确实拥有该权限。本文作者,最初采用root,见图3所示,并不能创建文件和删除文件,但是一直没有引起作者的注意,直到后期实际编程中,一直无法显示所需的结果时,才花费一定时间对其展开研究,具体解决方案见FAQ 5,希望这部分能引起注意。

图 6 Windows下访问Hadoop集群文件系统

编程异常与解决方案

经本文作者在编程过程中实际经验,写好的程序在hadoop 集群下(Linux环境中集群本地)能够访问,但是为编程的方便,将其编写于Windows下时可能会出现问题,下面结合作者的实际经验,给出相应解决方案。

1) FAQ:java.lang.NullPointerException

出现该异常是因为,在Windows下编译时会有hdfs临时文件存在,因此造成无法辨识该文件系统类型。

解决方案:从网络上下载与hadoop 版本号相同的hadoop.lib、winutils.exe等文件,并将其拷贝至hadoop 目录bin,如D:\hadoop\bin,以及Windows系统中,如C:\Windows\System32,同时需要注意下载的文件需要与CPU位数对应,即32位或64位。本文作者曾因CPU位数的问题折腾了许久。此外,本文作者给出一个最为保险的建议,采用Windows SDK将Hadoop 源码在Windows 本地编译一下,然后提取上述lib、exe文件,则该问题迎刃而解。

2) FAQ:java.lang.UnsatisfiedLinkError:

进一步分析,出现该异常是因为,在Windows中无合适的解析hdfs临时文件的问题,因此出现该情况,可能是hadoop.lib与hadoop集群版本不对,另一方面,可能是与CPU位数不一致。

解决方案:从网络上找到正确的版本文件,或者在本地重新编译hadoop 源码。

3) FAQ:org.apache.hadoop.mapreduce.lib.input.InvalidInputException

出现该异常是因为对hdfs文件系统目录的组织,不明确所致,若不指明hdfs,则以Windows下路径作为其默认路径名。

解决方案:在eclipse 工程目录栏中展开DFS Locations,逐级写出最终文件的位置,如test文件,则为hdfs://192.168.101.244:9000/user/root/input,需要加上hdfs://ip:port。

4) FAQ:java.lang.UnsupportedClassVersionError

出现该异常,则因为在Windows上编译的Hadoop程序与Hadoop集群上采用的JDK版本不一致。

解决方案:先查看Hadoop集群上jdk版本,然后在Windows上安装相同版本的即可。如本文Window上采用jdk 1.8,而hadoop 集群上采用jdk1.7,则在Windows上安装jdk 1.7,并对所需执行的工程,修改Build Path 和Compeler,并将其设为Java SE 1.7,之后重新编译即可。

5) FAQ:org.apache.hadoop.security.AccessControlException: Permission denied

程序运行后异常停止,无任何输出结果,出现该异常,则因为在本地访问hadoop hdfs时没有权限,因此在权限部分拒绝访问而退出,如,本文的root没有配置权限访问hdfs,故而看不到数据结果,此外,很多用户不太喜欢默认的用户名hadoop, 因此设置权限显得比较重要。

解决方案:本文基于测试环境,为图简便,修改集群的core-site.xml,如图7所示,将hdfs文件系统的访问许可检查关闭。但是,在实际应用中,则根据应用场景进行设置。

图7 Hadoop 集群文件系统访问权限修改

  6)FAQ:未进入MapReduce框架,程序直接退出

  出现该异常时,可在Mapper端的setup中跟踪MapReduce是否启动。根据调试证实MapReduce尚未启动,出现该问题存在两方面原因,其一为客户端是否与Hadoop集群双向联通;其二为客户端提交任务等库文件是否完整。

  解决方案:通过客户端和Hadoop集群执行双向ping测试,尤其关注集群是否能ping 客户端,若未能成功,则需要开启客户端的防火墙;此外,鉴于客户端提交任务时,未能提供完整的库文件等信息,故此,可以将hadoop下的bin目录添加至环境变量变量中,从而实现一劳永逸。

  


  作者:志青云集
  出处:http://www.cnblogs.com/lyssym
  如果,您认为阅读这篇博客让您有些收获,不妨点击一下右下角的【推荐】。
  如果,您希望更容易地发现我的新博客,不妨点击一下左下角的【关注我】。
  如果,您对我的博客所讲述的内容有兴趣,请继续关注我的后续博客,我是【志青云集】。
  本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。


Windows下Hadoop编程环境配置指南的更多相关文章

  1. windows下spark开发环境配置

    http://www.cnblogs.com/davidwang456/p/5032766.html windows下spark开发环境配置 --本篇随笔由同事葛同学提供. windows下spark ...

  2. 【Objective-C】Windows下Objective-C开发环境配置

    [Objective-C]Windows下Objective-C开发环境配置 ftp://ftpmain.gnustep.org/pub/gnustep/binaries/windows/   最近打 ...

  3. windows下apache+https环境配置

    windows下apache+https环境配置 转 https://www.cnblogs.com/sandaizi/p/7519370.html 1.修改配置文件conf/httpd.conf,去 ...

  4. Metabase在Windows下的开发环境配置

    Metabase在Windows下的开发环境配置 */--> pre.src {background-color: #292b2e; color: #b2b2b2;} Metabase在Wind ...

  5. windows下sublime2 clojure环境配置

    最近在看<七周七并发模型>,其中函数式编程使用的是clojure来做说明,所以也想顺便学习一下clojure这种不同的编程方式语言.那么做开发肯定需要开发环境,第一步先下载clojure官 ...

  6. Windows下Spark单机环境配置

    1. 环境配置 a)  java环境配置: JDK版本为1.7,64位: 环境变量配置如下: JAVA_HOME为JDK安装路径,例如D:\software\workSoftware\JAVA 在pa ...

  7. windows下python+flask环境配置详细图文教程

    本帖是本人在安装配置python和flask环境时所用到的资源下载及相关的教程进行了整理罗列,来方便后面的人员,省去搜索的时间.如果你在安装配置是存在问题可留言给我. 首先罗列一下python+fla ...

  8. Windows 下 Swoole开发环境配置

    一直停留在windows,入了 jetbrains 的全家桶.准备入门 Swoole,不可能每做一点修改就 git push 运行一下.因此要在 windows 上配置 swoole 运行环境.对比了 ...

  9. Windows 下Hadoop的环境变量配置

    一.安装JDK 1.下载路径:http://www.oracle.com/technetwork/java/javase/downloads/index.html 2.安装到C:\Java\jdk1. ...

随机推荐

  1. 线段树--codevs 1690 开关灯

    codevs 1690 开关灯 USACO  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题目描述 Description YYX家门前的街上有N(2& ...

  2. Codeforces Beta Round #92 (Div. 1 Only) A. Prime Permutation 暴力

    A. Prime Permutation 题目连接: http://www.codeforces.com/contest/123/problem/A Description You are given ...

  3. OOW 2015 MYSQL

    https://events.rainfocus.com/oow15/catalog/oracle.jsp?search.event=openworldEvent&search.mysql=d ...

  4. hihoCoder - 1082 - 然而沼跃鱼早就看穿了一切 (字符串处理!!)

    #1082 : 然而沼跃鱼早就看穿了一切 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描写叙述 fjxmlhx每天都在被沼跃鱼刷屏,因此他急切的找到了你希望你写一个程序屏蔽全 ...

  5. find命令专辑

    find命令使用技巧 查找文件,移动到某个目录 使用find和xargs 15条 linux Find 命令实际使用方法 find 命令用法 find命令使用经验 find用法小结 find与xarg ...

  6. Ant:Ant 入门

    背景 自从有了 Maven 以后,Ant 视乎就不流行了,不过 Ant 还是有其应用场景的,Ant 的思想比较简洁,如下: 一个 project 包含多个 target(类似成员方法). 一个 tar ...

  7. mysql least函数

    LEAST(N1,N2,N3,N4,......) LEAST()函数是GREATEST()的相反函数. 其目的是为了返回从值列表(N1,N2,N3,和等)的项最少值.下面的示例演示正确使用和输出LE ...

  8. iOS: 字体样式

    获取iOS内置所有的字体如下: NSArray *familyNames = [UIFont familyNames]; for( NSString *familyName in familyName ...

  9. Javascript屏蔽鼠标右键-超简单,不过还是记录一下

    Javascript屏蔽鼠标右键,其实作用也不大,也许是为了防止别人查看源代码,其实想查看源代码有多种途径,未必需要通过鼠标右键.不过当我们自定义鼠标右键弹出菜单时,也许需要这些. 下面是源码: 1 ...

  10. hadoop压缩框架

    一般来说,计算机处理的数据都存在一些冗余度,同时数据中间,尤其是相邻数据间存在着相关性,所以可以通过一些有别于原始编码的特殊编码方式来保存数据,使数据占用的存储空间比较小,这个过程一般叫压缩.和压缩对 ...