0070 IntelliJ IDEA+Scala+Hadoop +Spark的开发环境搭建

一、准备

必备环境:Windows7+JDK8.0,并已经安装了IntelliJ IDEA。

1、下载scala 2.10.6

http://www.scala-lang.org/download/all.html

2、下载spark-1.5.1-bin-hadoop2.3

http://spark.apache.org/downloads.html

选择对应版本。

3、下载hadoop-2.7.x

http://hadoop.apache.org/releases.html

选择binary下载。


二、环境配置

1、Scala环境配置

       解压安装包,假设放置于:D:\OpenSourceLab\TestProject\scala

系统变量添加:

变量名:SCALA_HOME

变量值:D:\OpenSourceLab\TestProject\scala

点击Path变量,在最末端添加D:\OpenSourceLab\TestProject\scala\bin;

注意以英文的分号结尾。

在cmd中输入:scala –version

若打印出类似以下的信息则环境配置完成。


2、hadoop环境配置

解压安装包,假设放在:D:\appForWork\hadoop-2.8.1

和步骤1类似的操作

       设置hadoop变量名为HADOOP_HOME,变量值为:D:\appForWork\hadoop-2.8.1

在path中添加D:\appForWork\hadoop-2.8.1\bin

在cmd中运行:hadoop –version


说明成功的。

3、spark直接解压即可

       假设放置在:D:\OpenSourceLab\spark-1.5.1-bin-hadoop2.3

4、创建Scala程序(离线情况)

       原理:在Scala项目中添加spark以及Scala(网上说可选)的依赖包,开始创建:

       ⌠File⌡-->⌠New Project⌡-->⌠Scala⌡-->⌠IDEA⌡-->项目名字⌠Finsh⌡

离线模式选择IDEA创建

自动根据SCALA_HOME目录定位SDK

点击项目名右键⌠New⌡-->⌠Directory⌡-->创建名字src的文件夹


将文件夹设置为源根目录(文件夹变为蓝色)

点击src ,⌠New⌡-->⌠Scala Class⌡


好的,现在生成了一个test类,在里面先写一行Scala代码测试一下:

Scala项目已经搭建成功,另外注意生成了一个out文件。

 

5、导入spark的jar包

⌠File⌡-->⌠ProjectStructure⌡-->⌠Libraries⌡-->点  +  -->Java -->找到解压的spark所在目录,一直点进去找到lib中的spark-assembly-1.5.1-hadoop1.2.1.jar


添加spark依赖包


找到lib下的依赖包,一直确定,然后apply再finish没完成。

 

6、spark日志提取程序测试

1)         测试日志准备:在项目根目录下创建一个textLog.txt文件,你可以在里面随便打一些单词,一行为一条日志,多输几行,然后随机在其中插上单词 “error”,保存。

2)         删掉测试的Scala代码,只留下类名和一个空的主函数。在class之前导入需要用到的spark类:

import org.apache.spark.{SparkContext,SparkConf}

在main中加入以下代码:

//Scala中初始化Spark
val conf = new SparkConf().setMaster("local").setAppName("getErrorInfo")
val sc = new SparkContext(conf)
//本地文件读取
val rdd = sc.textFile("testLog.txt")
//过滤出有error的日志条
val errorLines = rdd.filter(_.contains("error"))
//存储提取出的数据放入新建的文件夹下
//在当前主文件夹下生成输出文件夹
//errorLines.saveAsTextFile("extractedLog")
//指定一个目录输出  !!当再次运行时,必须把已经生成过的文件夹删除,不然报错!!              errorLines.saveAsTextFile("D:\\OpenSourceLab\\TestProject\\Turational"+"\\out\\extractedLog")
//打印出提取的内容
//errorLines.foreach(x => println(x))


我将输出文件放在out下面,名字为extractedLog。

运行报错

java.io.IOException:Could not locate executable D:\appForWork\hadoop-2.8.1\bin\winutils.exe in the Hadoopbinaries.

……

大意是在hadoop的bin目录下找不到 winutils.exe。

解决办法:

下载相应的文件:winutils.exe以及hadoop.dll

放置在:D:\appForWork\hadoop-2.8.1\bin目录中

下载链接:

http://vdisk.weibo.com/s/z88sCIH-rJ2FA(这个是针对Hadoop2.8.x的版本)


或者:Hadoop2.7.x所需的


 

然后再次运行:


这次成功啦!

在out目录下生成了我们自定义的文件夹,看到了运行成功的提示_SUCCESS,点击文件夹中的part-0000,用记事本或notepad++打开,即可看见提取出含有”error”字符的日志行了。

       上面运行的结果输出是不是有点太多了?是的,这些日志输出我们一点也不关心,如何去掉这些INFO提示信息呢?有办法,而且很简单很有效!

 

7、设置spark输出的日志信息级别

       这里之所以输出信息这么多,是因为Apache的原始代码中,将日志的输出级别设置为INFO。级别是这样的等级:ERROR>WARN>INFO,也就是说他们预定成最低级别。

       那我们给它设置成更高的级别不就接好了吗?设置成WARN的话输出信息就会大大减少,这在控制台打印输出信息时非常有用,不然在一大堆信息中寻找自己的输出,很费力!

       在class前面再导入一个日志类:

importorg.apache.log4j.{Level,Logger}

在class后面,main函数之前只需添加一句代码:

Logger.getLogger("org").setLevel(Level.ERROR)

先把原来生成的文件夹删掉再运行:

是不是少了很多INFO,这里还有几个INFO,这是在调用主函数之前产生的,这样输出比较干净了。

8、小结

      IDEA集成开发工具非常适合Scala的开发。 本人第一次搭建这个东西,以上的总结完全是基于前人的探索,,我只是不断地去搜寻解决找些解决方案,因此不是属于我的东西,但是辛苦是有版权的,转载请注明本文出处。

       

posted @ 2017-09-22 20:15  gendlee1991  阅读(140)  评论(0)    收藏  举报