一、IDEA开发hadoop项目配置
1.新建工程:
2.选择maven,勾上create from archetype,选择quickstart:
3.填写maven的坐标,“groupId”,“artifactId”,以及“version”,其中groupId是公司域名的反写,而artifactId是项目名或模块名,而version就是该项目或模块所对应的版本号,点击next:
4.可以使用本地的maven,直接点击next。或者下载maven,勾选第一个Override,使用下载的settings目录:
5.写项目名,项目位置:
6.点击finish,修改pom.xml,添加Hadoop依赖,添加完后点击右下角弹出的import changes,会自动添加依赖的jar包:
7.项目配置完成。
二、IDEA开发hadoop项目打包
1.右击项目名称,选择Open Module Settings
2.选择Artifacts,点击中间绿色的+号,选择JAR,再选择第二个选项
3.点击Main Class右边的小方块选择主类,下一个选项如果要打成一个压缩包选择第一个,如果其他依赖包要分开放也就是最后是多个jar包选择第二个选项。我选第一个,然后点击OK
4.勾选include in project build,点击+和-号添加最后jar包内的其他jar包,主要是将项目依赖的jar包导入,如果一开始配置好了,直接点OK就行。
5.然后点击Build按钮,选择Build Artifacts...
6.出现以下选择框,第一次使用选择Build,非第一次选Rebuild
7.Build完之后多出了out目录与target目录,接着就可以去本地out目录下找已经完成的jar包
三、出现过的问题
按以上步骤完成的jar包在使用hadoop jar命令会出现奇怪的问题,如果你的MapReduce程序的输入路径,输出路径写死的话不会出现问题,但是如果输入路径和输出路径接受的是参数的话会报错。具体情况如下:
比如使用hadoop jar /本地目录/包名.jar 包名.主类名 输入路径 输出路径。
会首先报出FileAlreadyExistsException: Output directory 输入路径,也就是把输入路径当成了输出路径
删除输入路径后会报出InvalidInputException: Input path does not exist /hdfs目录名/包名.主类名
由此可以判定hadoop jar命令将包名.主类名当成了输入路径,把输入路径当成了输出路径,输出路径多余。
解决办法:
不要选择主类,让它空着。hadoop jar命令的第二个参数需要你输入主类的名称,如果你打包时选择了主类的名称,它就会将你的包名.主类名当成输入路径,因为它已经知道主类是什么了,所以会产生这样的错误。