官方地址下载的SpatialHadoop2.4版二进制包可以在Hadoop1.x下运行,但在Hadoop2.x上可视化组件就会出问题,很有可能导致namenode名称节点的元数据WebUI无法打开。原因是官网SpatialHadoop2.4安装包不兼容Hadoop2.x。SpatialHadoop2.4可视化组件和SpatialHadoop1.X有出入,如果要在Hadoop2.x上使用SpatialHadoop2.x需要自己编译源码包。这里附上在jdk1.7.0_79;Hadoop2.6.0环境下编译的下载地址:spatialhadoop-2.4.1编译包,该编译包在Hadoop2.6.0和Hadoop2.7.3测试可用。当然可以按照下面是具体编译步骤自行编译。
1. 获取SpatialHadoop源码
1.1、从github上获取SpatialHadoop源码
Figure 1.1 克隆SpatialHadoop源码
1.2、将git项目转为Maven项目
Figure 1.2 导入SpatialHadoop2项目
1.3、转为Maven项目
Figure 1.3 转为Maven项目
2. 编译项目
2.1、编译SpatialHadoop分别需要compile、package、assembly:assembly过程,三个操作是在Maven上完成的,为了方便操作,分别配置对改项目配置ompile、package、assembly:assembly三个Maven命令,然后依次执行。
Figure 2.1 运行配置
Figure 2.2 配置Maven命令
3. 常见问题
3.1、pom.xml错误,jdk.tools-1.6.jar
SpatialHadoop2.4.1需要jdk.tools-1.6.jar包,Maven会从改地址进行下载:https://repo.maven.apache.org/maven2/jdk/tools/jdk.tools/1.6/jdk.tools-1.6.jar
实际上https://repo.maven.apache.org/maven2 目录里并没有jdk目录,如下图3.1所示,因此会控制台提示jar包下载失败。该问题可以通过修改pom.xml文件解决,使Maven从本地获取jdk tools.jar包,然后把在Problems里把错误删掉,使用Maven Clean,然后重新进行Maven Install。如本地系统安装了jdk1.7.0_79,往dependencies节点下添加以下内容(注意:如果本地是1.8版本的jdk就填version 内容就是1.8):
<dependency>
<groupId>jdk.tools</groupId>
<artifactId>jdk.tools</artifactId>
<version>1.7</version>
<scope>system</scope>
<systemPath>${JAVA_HOME}/lib/tools.jar</systemPath>
</dependency>
Figure 3.1 maven2依赖包下载目录
Figure 3.2 添加jdk.tools依赖
3.2、使用compile进行编译时,提示Maven读取xxx.jar错误
例如提示读取C:\Users\GIS.m2\repository\org\apache\hadoop\hadoop-common\2.6.0\hadoop-common-2.6.0.jar错误,但该路径下确存在hadoop-common-2.6.0.jar文件,出现类似错误,删除该目录下文件,让Maven重新下载即可。
3.3、无法进行编译,出现main函数等等Exception
这可能在配置Maven编译命令时没有选择对应的版本的jre
Figure 3.3 jre版本
3.4、提示SJMR编码出错
SpatialHadoop默认使用UTF-8编码,而Eclipse在中文环境下使用了GBK编码,出现这个问题可以把edu.umn.cs.spatialHadoop.operations包下的SJMR.java文件保存为UTF-8编码。例如可以在空白出打个空格,然后保存,就会提示Save as UTF-8.
Figure 3.4 SJMR.java文件