在windows上使用intellij idea和maven开发hadoop mapreduce程序的小尝试

最近想看看什么推荐系统之类的东西,了解下发现常用的就是在big data平台上跑一些协同过滤算法。感觉还是潮流啊,没办法,也弄下玩玩吧,不然又要孤陋寡闻了。于是就想简单地弄个hadoop了。

为什么是windows

上班用的电脑就是windows的啊,还有个macbook,不过暂时没插座了就没用了,如果不用windows的话估计随随便便就搞好了吧。

为什么是intellij idea

电脑就这点内存,这破东西我也不想用啊,可是也没怎么用过其他的,这个ui看上去还行吧就用了,毕竟android studio也就差不多这个破东西。

基本的东西就略过了

虽然说写的这些也是很基本的东西,但是像安装idea啊maven啊新建project啊什么的大谷鸽一下很快就就有能用的信息了,这里就不重复了吧。我主要是想记录一下我谷鸽了好久都是没卵用的东西。

仅仅跑一下最基本的wordcount例子

需要依赖些什么包

maven这东西用起来挺爽的,我这里也用了,在pom.xml里写一下依赖idea就帮你搞定依赖了,就直接把内容记录一下好了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.revokey</groupId>
<artifactId>wordcount</artifactId>
<version>1.0-SNAPSHOT</version>
<repositories>
<repository>
<id>apache</id>
<url>http://maven.apache.org</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-mapreduce-client-core</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-mapreduce-client-jobclient</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.9.0</version>
</dependency>
</dependencies>
</project>

需不需要hadoop啊hdfs啊之类的

严格来说,只是跑一下最简单的wordcount,什么集群啊伪集群的都是不需要的,但是依我亲测,windows上的hadoop工具,which provides basic command line utilities for Hadoop on Windows,这个破东西是必须的。只用一台windows电脑,装上idea和maven,下载好windows上的hadoop工具,就是winutils.exe和hadoop.dll那几个文件,建一个工程,copy一下wordcount的代码,run,就ok了。

想想也知道肯定需要一个hadoop的运行程序的,毕竟你写的只是mapreduce程序的逻辑,然后还是要用hadoop去调用的。hadoop官网上的示例都写了,是bin/hadoop jar your_mapreduce.jar这要跑的。你依赖里都是hadoop的库而已,哪来hadoop可执行文件,所以得弄一个啊。像大谷鸽一下就搜到的这些文章,虽然没错,但都tm是标题党。幸好只是基本的尝试的话,这个windows的hadoop工具并不需要跟你依赖的hadoop包版本一致,所以我依赖的2.9.0版本,也可以用2.8.1版本的工具。因为这个现成的是别人弄好的,没法对版本要求太多啊,要自己编译的话那就很蛋疼了。┑( ̄Д  ̄)┍

关于环境变量

虽然我现在还不知道为什么,但有两个环境变量是需要设置的,否则一坨错误就冒出来了。

首先是HADOOP_HOME,这个要设置为前面提到的windows上的hadoop工具所在的目录。更具体一点,是要在%HADOOP_HOME%/bin里找到winutils.exe和hadoop.dll那几个文件,否则就会出现”java.io.FileNotFoundException: java.io.FileNotFoundException: HADOOP_HOME and hadoop.home.dir are unset.”这样的异常。也可以再代码里设置:”System.setProperty(“hadoop.home.dir”, “路径”);”。

然后是HADOOP_HOME要添加到PATH里面,否则会出现”org.apache.hadoop.io.nativeio.NativeIO$Windows.a
ccess0(Ljava/lang/String;I)Z”这样的错误。有的文章说用管理员权限运行idea能处理这个错误,毛线,忽悠人的。

还有一个不是必须的,hadoop.tmp.dir要设置一下,否则hadoop工具会在你不知道的路径上创建一坨文件目录。可以这样设置:”conf.set(“hadoop.tmp.dir”, “你想要的路径”);”。

最后

目前就记下这些,后面有再补充吧。

饮杯茶O(∩_∩)O~