前言:html
毕业两年了,以前的工做一直没有接触过大数据的东西,对hadoop等比较陌生,因此最近开始学习了。对于我这样第一次学的人,过程仍是充满了不少疑惑和不解的,不过我采起的策略是仍是先让环境跑起来,而后在能用的基础上在多想一想为何。java
经过这三个礼拜(基本上就是周六周日,其余时间都在加班啊T T)的探索,我目前主要完成的是:linux
1.在Linux环境中伪分布式部署hadoop(SSH免登录),运行WordCount实例成功。 http://www.cnblogs.com/PurpleDream/p/4009070.html apache
2.本身打包hadoop在eclipse中的插件。 http://www.cnblogs.com/PurpleDream/p/4014751.html 服务器
3.在eclipse中访问hadoop运行WordCount成功。 http://www.cnblogs.com/PurpleDream/p/4021191.html eclipse
因此我下边会分三次记录下个人过程,为本身之后查阅方便,要是能帮助到其余人,天然是更好了!分布式
===============================================================长长的分割线====================================================================ide
正文:oop
在以前的两篇文章中,我主要是介绍了本身初次学习hadoop的过程当中是如何将hadoop伪分布式模式部署到linux环境中的,以及如何本身编译一个hadoop的eclipse插件。若是你们有须要的话,能够点击我在前言中列出的前两篇文章的连接。学习
今天,我将在eclipse中,讲解如何使用MapReduce。对于下面的问题,咱们首先讲解的是,如何在eclipse中配置DFS Location,而后讲解的是,在配置好的Location上运行WordCount实例。
第一步,配置DFS Location:
1.打开eclipse以后,切换到Map/Reduce模式,点击右下角的“new hadoop Location”图标,弹出一个弹出框,以下图所示,页面中中有两个页签须要配置,分别是General和Advanced Parameters。
2.首先,咱们先配置General中内容。General中主要须要咱们进行Map/Reduce和HDFS的host的配置。
(1).以前咱们在Linux安装hadoop时,曾经修改了两个配置文件,分别是mapred-site.xml和core-site.xml。当时咱们再配置的时候,配置的主机就是localhost和端口号。这里因为咱们是在eclipse远程访问你Linux服务器中的hadoop,因此咱们须要将原来配
置文件中的localhost修改为你服务器的ip地址,端口号不变(固然你能够参考网上的文章,配置host文件)。
(2).而后将eclipse中咱们刚才打开的General页签中的Map/Reduce的host配置成你的mapred-site.xml配置的ip地址和端口号;再将HDFS的host配置成你的core-site.xml配置的ip地址和端口号。注意,若是你勾选了HDFS中的那个“Use M/R Master Host”选项,那么HDFS的host将默认与Map/Reduce中配置的ip地址一致,端口号可另行配置。
3.而后,咱们要配置的是Advanced Parameters这个选项卡中的内容,这里面的内容比较多,可是没关系张哦,由于咱们在第一次配置时,可使用他的默认配置。
(1)打开这个选项卡,咱们能够浏览一下这里面的内容,着重看下其中选项值包含“/tmp/.....”这种目录结构的选项,若是咱们后边本身配置的话,其实要修改的也就是这些项。默认的“dfs.data.dir”是在linux服务器中的“/tmp”目录下,有时会带上你的root帐号,这个能够根据本身的须要。
(2).若是你不想使用上边的默认配置,则咱们根据本身的须要,在咱们安装的hadoop中的hdfs-site.xml文件中,增长对“dfs.data.dir”这个选项的配置,对应的目录本身能够提早创建,个人配置如图:
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <!-- Put site-specific property overrides in this file. --> <configuration> <property> <name>dfs.data.dir</name> <value>/myself_setted/hadoop/hadoop-1.0.1/myself_data_dir/dfs_data_dir</value> </property> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.permissions</name> <value>false</value> </property> </configuration>
(3).以个人配置为例,若是我在hadoop的服务器端作了这样的配置,那么我在Advanced Parameters选项卡中,须要修改下面的的几个选项的value值,注意,其实有个小技巧,你在配置的时候,先找到“hadoop.tmp.dir”这个选项,将这个选项配置成你自定义的目录位置,而后将Location这个弹出框关掉,再选中刚才的那个Location从新点击右下角的“Edit hadoop Location”选项(在“new hadoop Location”旁边),而后再切换到Advanced Parameters选项卡,会发现与之相关的几个选项的目录前缀都会发生改变,这时候你在浏览一下其余选项,确保目录前缀都进行了修改,就ok了。
dfs.data.dir => /myself_setted/hadoop/hadoop-1.0.1/myself_data_dir/hadoop_tmp_dir/dfs/data
dfs.name.dir => /myself_setted/hadoop/hadoop-1.0.1/myself_data_dir/hadoop_tmp_dir/dfs/name
dfs.name.edits.dir => /myself_setted/hadoop/hadoop-1.0.1/myself_data_dir/hadoop_tmp_dir/dfs/name
fs.checkpoint.dir => /myself_setted/hadoop/hadoop-1.0.1/myself_data_dir/hadoop_tmp_dir/dfs/namesecondary
fs.checkpoint.edits.dir => /myself_setted/hadoop/hadoop-1.0.1/myself_data_dir/hadoop_tmp_dir/dfs/namesecondary
fs.s3.buffer.dir => /myself_setted/hadoop/hadoop-1.0.1/myself_data_dir/hadoop_tmp_dir/s3
hadoop.tmp.dir => /myself_setted/hadoop/hadoop-1.0.1/myself_data_dir/hadoop_tmp_dir
mapred.local.dor => /myself_setted/hadoop/hadoop-1.0.1/myself_data_dir/hadoop_tmp_dir/mapred/local
mapred.system.dir => /myself_setted/hadoop/hadoop-1.0.1/myself_data_dir/hadoop_tmp_dir/mapred/system
mapred.temp.dir => /myself_setted/hadoop/hadoop-1.0.1/myself_data_dir/hadoop_tmp_dir/mapred/temp
mapreduce.jobtracker.staging.root.dir => /myself_setted/hadoop/hadoop-1.0.1/myself_data_dir/hadoop_tmp_dir/mapred/staging
4.通过上边的几步,咱们本身的Location已经配置完了,这时候若是没有什么问题的话,会在咱们的eclipse的左上角“DFS Location”的下面,显示出咱们刚刚配置好的Location,右键点击这个Location的选择“Refresh”或者“ReConnect”,若是以前的配置没有问题的话,会显示咱们再第一篇文章中上传的a.txt文件,以及咱们以前在linux服务器端运行hadoop成功的output文件夹,以下图。若是没有上传文件,那么只会显示“dfs.data.dir”这个目录。
第二步,运行Word Count实例:
1.Location配置好以后,咱们能够在eclipse中创建一个MapReduce项目的工程。
(1).利用反编译软件,从hadoop-1.0.1的安装包中反编译hadoop-examples-1.0.1.jar这个jar包,将其中的Word Count类取出来,放到你刚才创建的工程中。注意,若是你以前参考的在编译eclipse的hadoop插件时,参考的是个人第二篇文章的方法,这里须要加一步,右键点击项目选择buidld Path,对于以“hadoop-”开头的jar包,除了“hadoop-core-1.0.1.jar”和“hadoop-tools-1.0.1.jar”这两个jar包,其他的以“hadoop-”开头的jar包都要删除掉。主要是由于若是不删除,会致使WordCount这个类方法中的有些累引入的不正确。
2.项目创建好以后,咱们在WordCount类中,右键选择“Run Configurations”弹出一个弹出框,以下图,而后选中“Arguments”选项卡,在其中的“Program arguments”中配置你的hdfs的input文件的目录和output目录,而后点击“run”,运行便可,若是在console中没有抛出异常,证实运行成功,可选择左上角的Location,选择“Refresh”,会显示你的output文件夹以及运行的结果文件。
第三步,错误排除:
1.若是以前的output文件夹存在,你直接在eclipse中运行WordCount方法的话,可能console会报“output文件夹已经存在”这个错误,那么你只须要现将Location中的output文件夹删除,这个错误就不会报了。
2.若是你运行的过程当中报了“org.apache.hadoop.security.AccessControlException: Permission denied:。。。。”这个错误,是因为本地用户想要远程操做hadoop没有权限引发的,这时,咱们须要在hdfs-site.xml中配置dfs.permissions属性修改成false(默认为true),能够参考本文上边关于“hdfs-site.xml”的配置。
3.若是你运行的过程当中报了“Failed to set permissions of path:。。。。”这个错误,解决方法是修改/hadoop-1.0.1/src/core/org/apache/hadoop/fs/FileUtil.java里面的checkReturnValue,注释掉便可(有些粗暴,在Window下,能够不用检查)。注意,此处修改时,网上的通常方法是,从新编译hadoop-core的源码,而后从新打包。其实若是想省事儿一点的话,咱们能够在项目中创建一个org.apache.hadoop.fs这个包,将FileUtil.java这个类复制到这个包里面,按照下边图片中的修改方法,修改FileUtil.java就好了。之因此这种方法也行,是由于java运行时,会优先默认在本项目的源码中扫描相同路径的包,而后才是引入的jar文件中的。
通过上边的步骤,我想多数状况下,你已经成功的在eclipse中远程访问了你的hadoop了,也许在你实践的过程当中还会碰到其余问题,只要你耐心的在网上搜索资料,相信必定能够解决的,切记不要太着急。