开发环境搭建:
两个文件
hadoop的win安装包,然后配置path;
然后还有一个几个配置的包,然后把配置放在hadoop安装包里面的;
====================
解决MapReduce任务在windows本地执行的NullPointerException问题
原创 2017年03月01日 11:06:25
为了能在调试MapReduce任务阶段有更好的工作效率,我们可以把URI的Schema设置为file:///,这样MapReduce任务就可以范围windows本地文件夹。当我在尝试这么做的时候出现了如下的空指针异常
Exception in thread "main" java.lang.NullPointerException
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1010) at org.apache.hadoop.util.Shell.runCommand(Shell.java:445) at org.apache.hadoop.util.Shell.run(Shell.java:418) at org.apache.hadoop.util.Shell$ShellCommandExecutor.execute(Shell.java:650) at org.apache.hadoop.util.Shell.execCommand(Shell.java:739) at org.apache.hadoop.util.Shell.execCommand(Shell.java:722) at org.apache.hadoop.fs.RawLocalFileSystem.setPermission(RawLocalFileSystem.java:633) at org.apache.hadoop.fs.RawLocalFileSystem.mkdirs(RawLocalFileSystem.java:421) at org.apache.hadoop.fs.FilterFileSystem.mkdirs(FilterFileSystem.java:281) at org.apache.hadoop.mapreduce.JobSubmissionFiles.getStagingDir(JobSubmissionFiles.java:125) at org.apache.hadoop.mapreduce.JobSubmitter.submitJobInternal(JobSubmitter.java:348) at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1285)
原因是hadoop.dll文件和winutils.exe文件缺失了。解决步骤为:
1,下载这两个文件,下载地址:
2,解压之后,把hadoop.dll拷贝到C:\Windows\System32下面
3,创建环境变量HADOOP_HOME,然后把winutils.exe文件拷贝到${HADOOP_HOME}/bin目录下
=============================
使用Hadoop2.6.0,在eclipse下面调试mapreduce程序的时候,控制台不打印程序运行时的日志,而是显示如下信息:
log4j:WARN No appenders could be found for logger (org.apache.hadoop.metrics2.lib.MutableMetricsFactory).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN hadoop See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
说明没有配置log4j.properties文件。这虽然不影响程序的正常运行,但是看不到日志难免不爽。 解决方法: 把Hadoop2.6.0的安装目录下面的/etc/hadoop/目录下面的log4j.properties文件拷贝放到MapReduce工程的src目录下面。===========================
maven打可运行jar包:
在pom文件里面加第一个plugin
<build>
<!-- <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> </resource> </resources> --> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <archive> <manifest> <mainClass>com.autohome.userbehaviorenhance.mr.UserBehaviorEnhancementMR</mainClass> </manifest> </archive> <encoding>UTF8</encoding> </configuration> </plugin> <plugin> <artifactId>maven-source-plugin</artifactId> <version>2.1</version> <configuration> <attach>true</attach> </configuration> <executions> <execution> <phase>compile</phase> <goals> <goal>jar</goal> </goals> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.3</version> <configuration> <source>1.8</source> <target>1.8</target> <encoding>UTF-8</encoding> <!--<verbal>true</verbal> --> </configuration> </plugin> </plugins> </build>
然后在run as ---> mvn:build上面的goal参数里面加入参数:
clean assembly:assembly
然后,再在打包的target里面寻找 后缀为 -jar-with-dependencies.jar 的jar包即可运行jar包;
其实也可以直接用eclipse的export来打可运行jar包,
一定要注意,buildpath配置下面的configuration build path source里面是否有过滤设置,否则可能一些文件打不进去;
这两种情况,一定要注意;