Windows环境下编写Spark程序经常遇到的一个BUG及解决方案
1、前言
Spark是继Hadoop,Hive,Storm之后开发的一款高效,便捷的大数据开源框架,其主要有Spark-core,Spark-SQL,Spark-Streaming,Spark-Mllib。并且它可以用单机模式,基于Mesos,Standalone,Yarn来开发。
其中,Spark一般可用来读取本地文件做离线处理用,Spark-SQL提供了一套偏向于传统SQL语句的命令,便于更多开发人员的使用,Spark-Streaming是用于实时处理的情况下,但目前而言相比于Storm的一条一条的信息处理,SparkStreaming还是偏向于批处理,而最后的Spark-MLlib是集合了目前最火的机器学习的部分重要算法,使得开发人员更加高效的利用这些API。
Spark的开发语言主要是Scala,Java,Python,但是Scala是开发效率最高的,这与它的函数式编程思维离不开,但是在某些情况下,比如小编的公司需要利用Java来开发,这便有些“坑”了,还好JAVA SE8提供了Stream式编程和Lambda表达式,使得开发起来相对也能容易一些了,日后我会逐步更新JAVA SE8的Lambda和Stream,以及Spark的更多应用,今天的内容主要是针对我们在Windows坏境下开发Spark会遇到的一个问题及解决办法。
2、配置文件
1、首先我们系统得配置JDK环境,基于Spark的开发习惯,建议使用JDK8以上版本,我们可以去官网下载JDK8,然后解压安装到本地,切记:路径不能有中文,空格等。
2、然后右击此计算机->属性->高级系统设置->高级->环境变量,然后在系统变量中,新建一个:
然后在Path里面
添加如上内容,然后点击确定后,按win+R打开运行提示窗口,输入cmd,在此界面输入java,如果看到如下内容,表示安装成功:
3、安装Hadoop:Hadoop是大数据的基本“平台”,基本所有其他框架都基于Hadoop中的HDFS,因此Hadoop也是必须安装的,笔者用的是2.7.1的版本,这个也可以在官网下载,如果没有,可以私信笔者,我可以给大家分享,安装包名是:hadoop-2.7.1_64bit.tar.gz,这个在Linux和win环境下都可以解压使用的,解压后,在该安装目录下找到/etc/hadoop/hadoop-env.cmd(如果是Linux系统就是hadoop-env.sh),将set JAVA_HOME=%JAVA_HOME%改为set JAVA_HOME=E:\JDK1.8(自己的安装环境),有些情况下如果是可以保留原写法的,
4、然后和JDK配置环境变量是一样的,需要在系统变量中配置:
HADOOP_HOME=F:\hadoop-2.7.1
然后在path中,配置%HADOOP_HOME%\bin
然后重新打开cmd窗口,输入hadoop,可以看到以下提示信息:
5、配置scala环境,官网下载scala安装包,同上面步骤,解压;
3、问题点
讲述完了上面的环境,我们在使用Eclipse IDE进行Spark开发时,当我们编辑如下代码时,
public class Demo01 {
public static void main(String[] args) {
SparkConf conf = new SparkConf().setMaster("local").setAppName("cql");
JavaSparkContext jsc = new JavaSparkContext(conf);
JavaRDD<String> input = jsc.textFile("F://work.txt");
然后点击运行时,很有可能会报:
Could not locate executabl …\hadoop-2.2.0\hadoop-2.2.0\bin\winutils.exe in the Hadoop binaries
这个原因便是由于我们hadoop原生安装包缺少部分文件,这个文件同样可以联系笔者进行分享,文件名是:
hadoopbin_for_hadoop2.7.1.zip。
具体操作步骤如图:
①、将该压缩包解压后,将其所有文件复制到hadoop安装目录下的bin目录;
②、将hadoop.dll复制到C:\Windows\System32下
重启我们的Eclipse 就可以解决了。
4、后记
后续我打算将自己学到的Spark技术,JAVA 8的新技术,分享给大家,然后逐步将所有主流大数据框架进行分享。