在windows上安装spark1.6.2的一些问题记录

之所以想在windows上装spark环境,不是因为脑子抽风,主要是工作需要,公司的都是linux环境,别人预先安装好了的spark环境(选择spark1.6.2也是这个原因),由于之前也没有接触过,然后领导布置任务,让我写一个spark读取hive数据库的程序,结果发现环境好像很多问题,搜了一堆帖子也没搞定问题,所以决定在自己家里的PC上来自己安装一下环境,顺便熟悉一下。
安装的过程挺顺利的,十几分钟就搞好了。主要参考下面两个帖子:

启动后spark报的错误记录和处理如下:

1. 报错SPARK_CLASSPATH wad detected.This is deprecated in Spark 1.0+

这个是启动spark-shell的时候在打印出spark的图标后面报的错,原因是我们在conf\spark-env中去设置了SPARK_CLASSPATH这个变量。 这个提示下面还告诉了我们解决的方法:

Please instead use:

spark-submit with –driver-class-path to augment the driver classspath

spark.executor.extraClassPath to augment the executor classpath

这里我们的解决方法就是直接去spark-env中取消设置spark_classpath变量,然后去conf\spark-defaults中设置变量spark.executor.extraClassPath,把他设置成之前spark_classpath的值即可。

2. WARN Connection: BoneCP specified but not present in CLASSPATH (or one of dependencies)

这个日志是正常的,这个是BonCP试图去绑定到一个JDBC链接。

另外如果我们要指定我们的日志记录等级的话,我们可以在conf文件夹下设置文件log4j.properties,比如设置

log4j.rootCategory=INFO, console

修改为

log4j.rootCategory=ERROR, console

不让它打印INIFO日志。或者在spark-shell执行的时候这样写代码:

import org.apache.log4j.Logger.   
import org.apache.log4j.Level.  
Logger.getLogger("org").setLevel(Level.OFF).  
Logger.getLogger("akka").setLevel(Level.OFF).  

参考:

3. WARN ObjectStore: Version information not found in metastore. hive.metastore.schema.verification is not enabled so recording the schema version 1.2.0

这个是我们没有配置spark的数据库报错,我们可以去设置hbase或者其他数据库都可以。这里我需要配置hive环境。

hive环境的装配(结合公司的linux环境)

公司的hive是已经安装好了的并且单独能用的,记得之前在网上搜的配置hive on spark的帖子说到spark如果要支持hive的话,重新编译spark并且打开支持hive的选项,编译完最后会在SPARK_HOME的lib目录下会多出来三个jar包,我之前看到公司的$SPARK_HOME/lib目录下面有这三个jar包,错误地以为公司安装spark环境的人是自己编译并且打开了hive支持开关的。但是我今天在官网下载预编译好的spark包,解压后发现lib目录下本来就存在这三个jar包……我感觉我被这个帖子误导了。

我现在怀疑公司的Spark环境是没有打开hive支持开关的。

并且公司linux环境应该是不能联外网的,也不知道有没有配置maven的镜像服务器(之前老大让我直接用IDEA编译,似乎就是没有网络访问环境)。所以很蛋疼了,现在我希望能在家里编译好spark然后发进公司。

在有网络的linux环境下编译的话很简单,我们只需要在下载好的源码下运行如下命令就可以在线编译,附带一些maven上的依赖包全部弄好: ./make-distribution -Pyarn -Phadoop-2.6 -Dhadoop.version=2.6.0 -Phive -Phive-thriftserver -DskipTests
但是家里只有windows环境,那么我们就需要在windwos环境下编译spark了。

在windows编译spark支持hive

1. 选用工具

官方的编译教程主要用了两个工具,maven和sbt。我这里选了sbt,直接去sbt的官网下载windows下的版本msi,直接运行安装好。

2. 下载spark的source code

下载后解压

3. 在线编译

打开cmd界面,进入到spark源码的根目录,运行如下命令:
sbt -Pyarn -Phadoop-2.6 -Dhadoop.version=2.6.0 -Phive -Phive-thriftserver -DskipTests clean package

  • 指定hadoop版本-Dhadoop.version=2.6.0,如果yarn的版本和hadoop不一样的话,还要单独指定yarn的版本,like this -Dyarn.version=2.x.x
  • 指定支持hive -Phive
  • 指定支持hive连接JDBC-Phive-thriftserver
  • 跳过测试-DskipTests

4. hive的配置

编译完成后解压包,然后去配置hive的一些环境,具体可以参考帖子Spark on hive 环境部署去配置。