前提:你搭建好了hadoop 2.x的linux环境,并可以成功执行。还有就是window可以訪问到集群。over
1、
hfds-site.xml 添加属性:关闭集群的权限校验。windows的用户一般与linux的不一样,直接将它关闭掉好了。记住不是core-site.xml 重新启动集群
2、hadoop-eclipse-plugin-2.7.0.jar将插件放到plugins文件夹下
3、复制linux master已安装好的hadoop文件夹到windows,然后eclipse 配置定位hadoop的文件夹,重新启动eclipse
4、打开配置,hadoop选项,定位hadoop主文件夹。然后打开mapreduce的view 设置配置属性:其它额外属性不要配置,username也不用改,此时能够链接上了。
5、新建MRproject
6、建立wordcount类(自己复制即可)
在src以下直接新建log4j.properties:
内容例如以下:主要是信息打印:(你能够将info改成debug,内容过多,改成info了)
log4j.rootLogger=info,stdout,R
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p - %m%n
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=mapreduce_test.log
log4j.appender.R.MaxFileSize=1MB
log4j.appender.R.MaxBackupIndex=1
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n
log4j.logger.com.codefutures=DEBUG
7、错误多多啊:
解决方案1)人家提示HADOOP_HOME没有设置,那就配置windows的环境变量。定位到hadoop文件夹
执行报:
第一项不报了,第二项继续:
2)java.io.IOException: Could not locate executable nullinwinutils.exe in the Hadoop binaries.
说不能定位,看来是HADOOP_HOME没起作用,那就在main里加入代码,否则不报null:
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
<name>dfs.permissions</name>
<value>false</value>
</property>
2、hadoop-eclipse-plugin-2.7.0.jar将插件放到plugins文件夹下
3、复制linux master已安装好的hadoop文件夹到windows,然后eclipse 配置定位hadoop的文件夹,重新启动eclipse
4、打开配置,hadoop选项,定位hadoop主文件夹。然后打开mapreduce的view 设置配置属性:其它额外属性不要配置,username也不用改,此时能够链接上了。
5、新建MRproject
6、建立wordcount类(自己复制即可)
在src以下直接新建log4j.properties:
内容例如以下:主要是信息打印:(你能够将info改成debug,内容过多,改成info了)
log4j.rootLogger=info,stdout,R
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p - %m%n
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=mapreduce_test.log
log4j.appender.R.MaxFileSize=1MB
log4j.appender.R.MaxBackupIndex=1
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n
log4j.logger.com.codefutures=DEBUG
7、错误多多啊:
执行报:
1)、java.io.IOException: HADOOP_HOME or hadoop.home.dir are not set.
2)java.io.IOException: Could not locate executable nullinwinutils.exe in the Hadoop binaries.解决方案1)人家提示HADOOP_HOME没有设置,那就配置windows的环境变量。定位到hadoop文件夹
执行报:
第一项不报了,第二项继续:
2)java.io.IOException: Could not locate executable nullinwinutils.exe in the Hadoop binaries.
说不能定位,看来是HADOOP_HOME没起作用,那就在main里加入代码,否则不报null:
System.setProperty("hadoop.home.dir" , "E:\bigdata\hadoop2" );
执行报:Could not locate executable E:igdatahadoop2inwinutils.exe in the Hadoop binaries.
这次变了,检查文件夹,的确没有winutils.exe,由于我们是从linux复制下来的
那就添加呗:
这次变了,检查文件夹,的确没有winutils.exe,由于我们是从linux复制下来的
那就添加呗:
从https://github.com/srccodes/hadoop-common-2.2.0-bin 下载bin文件夹,替换到windows中hadoop里的bin文件夹
执行报:
第二项不报了。又来新的了:
执行报:
第二项不报了。又来新的了:
Exception in thread "main" org.apache.hadoop.mapreduce.lib.input.InvalidInputException :
Input path does not exist: file:/input
这个嘛,嘿嘿,參数设置成绝对的。hadoop1的时候不用,如今是第二代:乖乖的设置參数为 hdfs://master:9000/input hdfs://master:9000/output
执行 继续报错:
执行 继续报错:
Exception in thread "main" java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z
说是本地库的问题,那就改改源代码,将本地库的调用屏蔽掉:拷贝源代码文件org.apache.hadoop.io.nativeio.NativeIO到项目中 。定位: 然后定位到570行(别hadoop2.2是。版本号不一样如今2.7是607行还是直接搜索public static boolean access(String path,
AccessRight desiredAccess)吧,),直接改动为return
true; 不让access了。
复制麻烦,那就新建类,定位包,然后复制类内容即可了。
继续执行继续报错:
org.apache.hadoop.security.AccessControlException: Permission denied: user=Administrator,
access=WRITE, inode="/output/_temporary/0":root:supergroup:drwxr-xr-x
权限不够,linux用户是root,window默认用户是Administrator 我都将window改成root了,看来这个改法没起作用。另外我在core-site.xml也添加了不让校验权限啊。无论用。又一次设置參数:换一种方式,之前是在core-site.xml设置的权限为false。改到hdfs-site.xml里试试,假设不行改源代码。
对于: WARN - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable这个警告没事,执行在linux就不报了。
8、最后。尝试将wordcount拆成子类的形式。将mapper移出来试试,由于有的时候多个类会提示报错:
9、欢迎訪问下hegou.me这个站点。怎么样,仅仅是在本机搭建个測试环境。工作中就不要在正式集群里跑了。还是乖乖測试好代码先。over。
(所以我在第一步提示是在hdfs里而不是core里面改)
执行 继续报,别报了,出结果了:
Input split bytes=100
Combine input records=179
Combine output records=131
Reduce input groups=131
Reduce shuffle bytes=1836
Reduce input records=131
Reduce output records=131
对于: WARN - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable这个警告没事,执行在linux就不报了。
8、最后。尝试将wordcount拆成子类的形式。将mapper移出来试试,由于有的时候多个类会提示报错:
删除output文件夹,又一次执行:OK。没问题。正确出结果了。
9、欢迎訪问下hegou.me这个站点。怎么样,仅仅是在本机搭建个測试环境。工作中就不要在正式集群里跑了。还是乖乖測试好代码先。over。