scala的基本知识
1.Scala是什么?(学会看官网:The Scala Programming Language (scala-lang.org))
Scala是一门多范式语言,类似于java,设计初衷是①实现可伸缩的语言;②集成面向对象编程(object-oriented)和函数式编程的各种特性。
多范式:①面向对象;②面向过程;③泛型;④函数式。
重点:scala运行在JVM上的,是面向对象和函数式编程。scala运行在JVM上,需要先安装jdk。
java运行流程:程序代码通过javac编译成字节码文件,然后通过java运行。
思考:既然java是通过javac编译成字节码文件,然后通过java运行,那么scala是否也可以通过scalac编译成字节码文件再通过scala运行? 答案是肯定的,可以通过scala安装部署后,查看 ~/app/scala-2.12.14/bin,里面有对应的scala和scalac
2.为什么学scala?
因为scala是Spark、Flink 和kafka的基础,Spark的源码:scala;Flink的源码是java和scala,scala与spark相互促进,所以scala是重中之重。
Scala的特点:优雅。体现在:①文件和文件夹的命名;②开发速度快(scala语言表达能力强);③因为scala运行在JVM上,很好的整合了java已有的,所以scala和java是可以相互调用的。
3.scala与java对比
Java提供了很多常用的类,如果环境OK,只要引入java的SDK,就可以直接使用String、List(在rt.jar/java/util/List目录下)、ArrayList(在rt.jar/java/util/ArrayList/ArrayList目录下)之类的。
String name = "若泽";
List
System.out.println(name); [这里输入name.so直接回车自动跳出该语句] 选中上述代码右键点击"Run TestApp.main()'运行。
上述过程为:javac TestApp.java生成.class文件,通过java运行生成javac TestApp
Scala也有自己的SDK,在scala里面可以直接调用java的SDK,也可以直接使用String、List、ArrayList之类的。
Java用的是javac;scala用的scalac和scala的组合使用。
Scala的安装部署(scala 2.12.14版本)
安装前的准备:
1.Scala可以安装在Windows也可以安装在Linux上(scala 2.12.14)
2.java -version //查看java版本,确保1.8+
3.家目录下准备以下文件夹:①software:存放下载的安装包;②source:源码;③data:测试数据;④app:安装目录;⑤script:脚本; ⑥lib:存放第三方jar包(依赖包),比如mysql的驱动。
Scala安装部署:
1.官网下载安装包
2.上传安装包scala-2.12.14.tgz到Linux下/home/hadoop001/software目录;
3.tar -xzvf scala-2.12.14.tgz -C /home/hadoop001/app; //解压 (-C:指定目录);
cd ~/app/scala-2.12.14
ll
cd bin //bin目录下就是脚本
ls
rm *bat //删除所有的.bat文件(.bat是Windows的)
ls 此时还剩:fsc、scala、scalac、scaladoc(生成文档用的) 、scalap
4.配置环境变量:把scala加入到环境变量之中
vi ~/.bashrc
export SCALA_HOME=/home/hadoop001/app/scala-2.12.14
export PATH=$SCALA_HOME/bin:$PATH
source ~/.bashrc //让环境变量生效(新打开一个窗口也会生效)
echo $SCALA_HOME/ //输出目录
scala 回车 //启动scala,进入scala交互式命令行(REPL)
此时scala部署已经完成了。
scala> 1+1回车,返回:res0:Int=2 交互式:既有输入也有输出,输入“1+1”,输出“2”
思考:当输入scala代码时,底层是否有一个解释器或编译器,把代码转换成字节码,然后通过JVM运行,把结果返回命令行? 答案肯定是的。(光标一直跳动说明它在等待字节输入)
Ctrl+C再回车退出scala交互式命令行,scala回车进入交互式命令行。
scala> 1+3 返回res0:Int=4 res0:Int=4 就是变量名(名字):数据类型, 其中res+自增的数字表示变量名;数据类型是可以推导出来的。
小练习:
scala> res0*3 返回:res1:Int=12;scala> res0*res1返回:res2:Int=48
scala> String.out.println("若泽数据...") 返回:若泽数据...
scala>println("LK哥") 返回:LK哥
打开一个新对话对比java和scala:
1.java方式:
cd ~/tmp/scala
vi HelloWorld.java
public class HelloWorld{
pubic static void main(String[] args){
System.out.println("欢迎来到若泽大数据"); //注意这里“;”
}
}
javac HeiioWorld.java //编译
ll //此时显示生成了一个HelloWorld.class文件
java HelloWord //运行
2.scala方式:
vi HelloWorld.scala
object HelloWorld{
def main(args:Array[string]){
Println("你好,LK哥") //注意这里没有“;”,scala不用分号结尾
}
}
scalac HeiioWorld.scala //编译
ll //此时显示生成了一个HelloWorld$.class文件
scala HelloWord //运行
对比上面两种方式说明.scala文件通过scalac编译成字节码文件再运行。
若把生成的.class文件删除了,java HelloWord.java不能运行;
而scala HelloWorld.scala可以运行,scala可以一步到位。
Maven的安装部署 (apache-maven-3.8.3版本)
IDE:集成开发环境(Eclipse/MyEclipse/IDEA,IDEA是具体的开发工具,使用maven进行依赖的管控)
Maven是Apache的顶级项目(域名都是:xxx.apache.org),域名:maven.apache.org,Windows和Linux都可以装。
maven的安装部署:
1.打开Maven官网,直接点Download.选择版本3.8.3,选择Files第1,2个下载。
2.上传apache-maven-3.8.3-bin.tar.gz到Linux下 /home/hadoop001/software
3.tar -xzvf apache-maven-3.8.3-bin.tar.gz -C /home/hadoop001/app
4.配置环境变量:把maven加入到环境变量中
vi ~/.bashrc
export MAVEN_HOME=/home/hadoop001/app/apache-maven-3.8.3
export PATH=$MAVEN_HOME/bin:$PATH
source ~/.bashrc //让环境变量生效(新打开一个窗口也会生效)
cd $MAVEN_HOME/
ll //此时有个关键文件夹conf
cd conf/
ll //此时有个关键文件:setting.xml
vi setting.xml //这里面有个默认配置:Default:${user.home}/.m2/repository,意思是maven需要到中央仓库把我们所需的依赖包下载到本地仓库的默认路径是:当前用户名下/.m2/repository
以hadoop001为例,在当前目录下:cd .m2,然而此时没有.m2隐藏文件夹,必须先执行mvn help:system命令查看java的环境变量和系统属性,这时系统会自动下载一些maven相关文件,.m2文件夹才会生成。
cd .m2/repository //这里存放了很多依赖的jar包。
【隐患】:默认路径在:当前用户/.m2/repository
建议:如果maven安装在Windows上,建议更改目录到其他盘(不要C盘,否则重装系统麻烦)
修改方式:将Default:${user.home}/.m2/repository下面一行移到注释外面,同时在