Spark 使用 Scala语言进行开发,Scala运行在Java平台之上,因此需要下载并安装JDK和Scala。值得注意的是,Scala、Java和Spark三者之间是有版本搭配限制的,可以根据官方文档提供的组合进行下载,否则会出现启动异常。具体的关系可在官网相关文档中看到,如图2-1所示,笔者在此使用的环境组合是Spark2.3.0+Java8+Scala 2.11。
先打开终端在桌面创建一个文件夹,命名自拟。然后把压缩包放入这里。
1.修改访问权限
使用 tar 命令解压下载的文件。
tar -zxvf spark.tgz
tar -zxvf jdk.tar.gz
tar -zxvf scala.tgz
本书中所有的软件都放在了/opt目录中,因此使用复制命令把所有软件包复制到/opt 文件夹中。
修改文件夹的权限为 777
在使用Spark之前,需要进行一定的配置。主要工作包括:安装SSH、实现免密码登修改环境变量、修改Spark文件夹的访问权限、节点参数配置等。
2.安装SSH
SSH(Secure She11)是一种安全的传输协议。通过SSH协议对传输的数据进行加密从而有效防止远程管理过程中的信息泄露问题。在组建Spark集群时,多台实体机需要进行文件传输等通信。在通信过程中如果需要频繁输入密码是不切实际的,因此需要无密码登录。
在 Ubuntu系统中,软件的安装是通过apt-get install加软件名这种命令方式进行的。安装的软件存在于 Ubuntu中配置的源服务器中,在源服务器中存储了大量的软件镜像,类似于一个软件应用商店,通过该命令,就可以通过网络从远程的应用商店中下载并安装SSH。
安装SSH方法如下
同时按下组合键“Ctrl+AIT”打开 shell,或者在界面等地方单击右键打开终端,并输入命令。
sudo apt-get install ssh //sudo是使用管理员权限进行安装
运行后会询问是否继续安装,此时从键盘输人“Y”并按回车键同意安装。因为了管理员权限进行安装,所以会出现需要输人密码的提示,输人管理员密码后回车的行下载安装。安装过程除了询问是否同意某些条件外,不需要人为干预,程序自动下载安装。
SSH免密码登录
安装完SSH后,打开Shell,输人命令生成密钥,命令如下。
ssh-keygen -trsa
#或者
ssh-keygen
单击回车键,终端会提示需要用户填写一些内容,这里可以不用填写任何内容“Enter”键继续运行,如图所示。运行结束以后,默认在~/.ssh目录生成两个文件。
id rsa //私钥
id_rsa.pub //公钥
把公钥的内容添加到 authorized keys 文件中:
cat ~/.ssh/id rsa.pub >> ~/.ssh/authorized keys
更改权限:
chmod 700 /.ssh
chmod 600 /.ssh/authorized_keys
设置完后输入命令:
ssh localhost
如果出现欢迎字样而不出现需要输入密码则说明设置成功。如果出现需要输入密码则只需修改一下.ssh 文件夹的权限和 authorized_keys 的权限即可,如图 所示。
若出现以下问题:
出现这个的原因是:
Ubuntu 16.04 通过命令行 apt-get 命令安装的 openssh-server 的版本与当前系统中已经存在的 openssh-client版本不一致。之前网上的解决方案都不成功,下面提供一种最简单的解决方案:
1.卸载原Ubuntu系统自带的openssh-client
sudo apt autoremove openssh-client
2、通过命令行 apt-get 重新安装openssh-client
sudo apt-get install openssh-client
3、再通过命令行 apt-get 安装openssh-server
sudo apt-get install openssh-server
然后重复ssh localhost
还有一个原因就是主机没有开启ssh-agent服务:ctrl+shift+esc 打开任务管理器找到ssh-agent点进去,开启openssh authentication服务,改为自动。
3.修改profile文件
Windows操作系统中环境变量的设置一般使用图形化的工具完成,在Linux里面需要手动地修改/etc/profile 文件,也可以修改~/.bashrc文件。其中,不同点就是 bashrc 仅在交互式Shell启动时被读取,而profile 仅在LOGIN Shell 时被读取。输入命令:
sudo vi /etc/profile ##以管理员权限修改profile文件内容
用管理员权限打开 profile 文件,输入密码后即可进行编辑。在键盘上单击I键开始编辑,I就是insert的意思。滚动鼠标至最下面,然后输人以下路径配置。
#配置JAVA环境
export JAVA_HOME=/opt/jdk #配置 JAVA HOME
export CLASS_PATH=/opt/jdk/lib #配类路径
export PATH=$PATH:$JAVA_HOME/bin #添加bin路径到PATH,添加后可以在命令行中直接调用#配置SCALA环境
export SCALA_HOME=/opt/scala #配置 SCALA HOME
export PATH=$PATH:$SCALA_HOME/bin #添加 bin 目录到 PATH#配置SPARK环境
export SPARK_HOME=/opt/spark
export PATH=$PATH:$SPARK_HOME/bin #添加bin 日录到 PATH
输入完毕后,按 Esc键,然后输人冒号,最后输入wq进行保存并退出。
:wq
配置好的 profle不会立即生效,操作系统重启后即可生效,也可以执行 source 命令立
即生效。
source /etc/profile
执行以上命令后,可以在Shell中输人Java、Scala进行测试,如果能够打印出Java相关的信息,进入Scala交互命令行,则说明配置成功。
修改Spark配置文件
(1)复制模板文件。在Spark的conf目录中已经存放了Spark环境配置和节点配置以及日志配置等文件的模板(以template结尾的文件),并且模板文件中有相关配置项的文字描述提示。将文件夹中 spark-env,sh.template、log4j.properties.template、slaves.template3个文件各复制一份,去掉template后缀,然后Spark启动时就会对文件中的配置项进行读取,否则找不到配置。
cd /opt/spark/conf //进入配置文件夹中
cp spark-env.sh.template spark-env.sh //Spark环境相关
cp log4j.properties.template log4j.properties //spark日志相关
cp slaves.template slave //Spark集群节点
(2)修改spark-env设置主节点和从节点的配置,。
export JAVA_HOME=/opt/jdk #添加java位置
export SCALA_HOME=/opt/scala #添加Scala位置
export SPARK_MASTER_IP=SparkMaster #设置主节点地址
export SPARK_WORKER_MEMORY=4g #设置节点内存大小
export SPARK_WORKER_INSTANCES=1 #设置节点实例数export SPARK_WORKER_CORES=2 #设置节点参与计算的核心数
(3)修改slaves 设置从节点地址。
添加节点主机名称,默认为localhost
4.Spark 集群启动与关闭
Spark应用最终是以提交集群任务的方式运行的,因此在提交应用之前需要先启动集群,并查看集群状态,确保集群处于正常的可使用状态。Spark除了可以以Mesos或者 YARN模式运行之外,也可以以Standalone和Local模式运行。Local模式可以进行基本的Spark操作,一般作为简单的测试使用。本书采用Standalone模式进行实验Standalone是一种独立模式,自带完整的服务,无须依赖其他资源管理器,可以单独部署到集群中。
(1)启动 Spark Standalone 集群
进人Spark目录中:
cd /opt/spark-2.3.0-bin-Hadoop2.7/sbin
运行 start-all.sh启动集群:
./start-all.sh
ubuntu@ubuntu:/opt/spark/conf$ cd /opt/spark/sbin
ubuntu@ubuntu:/opt/spark/sbin$ ./start-all.sh
starting org.apache.spark.deploy.master.Master, logging to /opt/spark/logs/spark-ubuntu-org.apache.spark.deploy.master.Master-1-ubuntu.out
localhost: starting org.apache.spark.deploy.worker.Worker, logging to /opt/spark/logs/spark-ubuntu-org.apache.spark.deploy.worker.Worker-1-ubuntu.out
ubuntu@ubuntu:/opt/spark/sbin$//则运行成功!
在启动的时候如果出现需要输入密码的情况,这种情况则是因为部分文件没有设置权限。在启动的过程中会生成新的文件夹,只需对Spark目录重新设置权限即可。
sudo chmod-R777 /opt/spark //设置文件夹可读可写可执行权限
启动成功后打开浏览器,输入地址localhost:8080即可査看集群的 UI界面(打开Ubuntu里面的火狐浏览器输入网址)。在 UI 界面中可以看到集群节点的核心数、地址、内存、状态等信息如果:该界面,则可能是由于没有启动成功,查看报错原因后修改,再次运行查看。
关闭集群集群的关闭与启动相似,同样进入sbin文件夹中,使用stop-al1.sh脚本关闭集运行:
./stop-all.sh
集群启动完毕后,可以使用 spark-submit命令进行任务的提交。进入spark-submit文件所在的目录中:
cd /opt/spark/bin
执行以下命令提交集群:
spark-submit --master spark://master:7077 --deploy-mode client--executor-memory 512M --total-executor-cores 4 demo.py
应用提交集群后,应用的基本信息和运行情况都将会在Web界面中展现出来。启动浏览器打开地址 localhost:8080后会出现图2-14所示的界面。该界面中的CompletedApplications列表中将会出现运行过的应用,包括应用的名称、使用的核心、内存、提交时间、所有者和运行时间等信息。
打开 Shell,运行 PySpark后,在浏览器中输人地址 localhost:4040,即可查看 Spark的Jobs 监控界面。査看Job的详细执行过程,可以分析执行缓慢的Jobs,然后进行性能调优。