Windows下使用spark-without-hadoop版本安装
一、without-hadoop版本的含义
Spark的版本名称中的“without Hadoop”具有误导性:这意味着该版本不与特定的Hadoop发行版绑定,并不意味着没有hadoop即可运行:用户应指出在哪里可以找到Hadoop
二、windows环境下环境变量的修改
1、非without-hadoop版本配置修改方法
- 找到SPARK_HOME目录下的conf/spark-env.sh.template,将该文件改名为spark-env.cmd(注意不是改名为spark-env.sh,因为window不认sh文件)
- 编辑spark-env.cmd文件,将#全部替换为rem,windows环境下注释用rem
在spark-env.cmd文件最后添加如下内容
set SPARK_MASTER_HOST=localhost
set SPARK_MASTER_PORT=7077
2、without-hadoop版本配置修改方法
without-hadoop版本如果只按上面的操作修改,执行spark-shell.cmd 会报错:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/fs/FSDataInputStream
这是因为without-hadoop版本没有直接包含依赖的hadoop的jar,所以需要在配置文件里指定hadoop的jar位置。
我之前在网上查到的教程中都是在$SPARK_HOME/conf/spark-env.cmd 中添加下列行(这是具有误导性的)
set SPARK_DIST_CLASSPATH=%HADOOP_HOME%/bin/hadoop classpath
实际应该是具体指明依赖的哪些hadoop下的lib文件,解决方案是在$SPARK_HOME/conf/spark-env.cmd 最后添加如下内容
set SPARK_DIST_CLASSPATH="%HADOOP_HOME%/etc/hadoop/*;%HADOOP_HOME%/share/hadoop/common/lib/*;%HADOOP_HOME%/share/hadoop/common/*;%HADOOP_HOME%/share/hadoop/hdfs/*;%HADOOP_HOME%/share/hadoop/hdfs/lib/*;%HADOOP_HOME%/share/hadoop/hdfs/*;%HADOOP_HOME%/share/hadoop/yarn/lib/*;%HADOOP_HOME%/share/hadoop/yarn/*;%HADOOP_HOME%/share/hadoop/mapreduce/lib/*;%HADOOP_HOME%/share/hadoop/mapreduce/*;%HADOOP_HOME%/share/hadoop/tools/lib/*"
这里注意2点:
- windows下环境变量的读取用%HADOOP_HOME%,Linux下用${HADOOP_HOME},不要用错了
- windows下环境变量的分隔符是分号’;‘,而Linux下环境变量的分割符是冒号’:',也不要用错了
三、windows下启动单机版Spark Standalone
由于%SPARK_HOME%\sbin目录没有start-all.cmd,也没有start-master.cmd和start-worker.cmd(start-all.sh,start-master.sh和start-worker.sh都是给Linux环境用的),所以我们需要使用%SPARK_HOME%\bin目录下的spark-class手动启动。
- 要启动主工作者,请在%SPARK_HOME%/bin目录中打开Windows命令提示符,然后复制并粘贴此命令,然后按Enter
spark-class org.apache.spark.deploy.master.Master
- 浏览http://localhost:8080,如果收到错误消息"找不到服务器",则刷新页面。从此页面,将获得唯一的URL。看起来像这样的URL:spark://localhost:7077
- 打开一个新终端,然后转到%SPARK_HOME%/bin,复制并粘贴此行代码,然后按Enter
spark-class org.apache.spark.deploy.worker.Worker spark://ip:port
这部分spark://ip:port,是从步骤2获得的URL。
最后,验证结果:
在%SPARK_HOME%/bin目录下,打开一个新的终端,执行下面命令:
spark-submit --class org.apache.spark.examples.SparkPi --master spark://localhost:7077 ../examples/jars/spark-examples_2.12-3.0.0.jar 10
求得π的值,至此大功告成!