背景
最近要开发智能推荐引擎,后期系统需要搭载在Spark集群上,前期要开发相关脚本,需要一个测试环境,所以向公司申请了一台主机,平台是Linux,操作系统CentOS,背景交代完毕,现在需要在单机Linux主机上部署Spark。
准备:
JDK:1.8
Spark:2.4.5
Linux系统平台:本文所用Linux版本为CentOS 7
步骤
第一步:下载并解压JDK
首先去Oracle官网现在JDK压缩包
官网下载地址
我选择的版本是jdk-8u241-linux-x64.tar.gz
下载完成后上传到Linux服务器下,新建一个文件夹software,然后解压压缩包。
解压的Linux命令:
tar -zxvf jdk-8u241-linux-x64.tar.gz
第二步:下载并解压Spark
首先到spark官网下载Spark压缩包
官网下载地址
现在已经有最新的预览版本是Spark 3.0.0-preview2,已于2019年12月23日发布,有需要的话可以选择此版本,本次我下载的是2.4.5版本。
下载完成后上传到Linux服务器software文件夹下,然后解压压缩包。
解压的Linux命令:
tar -zxvf spark-2.4.5-bin-hadoop2.7.tgz
(备注:为了后续方便,这里可以重命名Spark文件夹)
第三步:配置环境变量
3.1 配置系统的环境变量:
进入/etc/profile目录下,输入如下:
vim /etc/profile
会提示文件已存在,见下图,选择“e”,并输入“i”进入编辑模式
然后在文件的最后加上如下配置:
#Java
export JAVA_HOME=/tmp/software/jdk1.8.0_241
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib/
#Spark
export SPARK_HOME=/tmp/software/spark-2.4.5-bin-hadoop2.7
export PATH=$JAVA_HOME/bin:$SPARK_HOME/bin:$PATH
然后键盘按下“Esc”,输入“:”冒号加“wq”保存退出vim编辑模式,最后运行:source /etc/profile 使文件修改生效。
3.2 配置spark的配置文件:
首先新建spark-env.sh配置文件(spark环境配置文件):
这个文件默认不存在,这里有spark-env.sh.template,我们复制一份并命名新文件为spaek-env.sh。
首先进入spark的conf目录下:
cd /tmp/software/spark-2.4.5-bin-hadoop2.7/conf
copy一份spark-env.sh
cp spark-env.sh.template spark-env.sh
然后进入vim编辑模式
vim spark-env.sh
输入“i”进入编辑模式,在文件的最后加上如下配置
export JAVA_HOME=/tmp/software/jdk1.8.0_241
export SPARK_HOME=/tmp/software/spark-2.4.5-bin-hadoop2.7
export SPARK_MASTER_ID=***.***.***.***
export SPARK_MASTER_HOST=***
export SPARK_MASTER_PORT=7077
export SPARK_WORKER_MEMORY=2g
见下图:
其中:
- SPARK_MASTER_IP为自己的Linux的ip地址;
- SPARK_MASTER_HOST为主机名
- SPARK_MASTER_PORT为默认端口号7077
然后键盘按下“Esc”,输入“:”冒号加“wq”保存退出vim编辑模式,最后运行:source spark-env.sh 使文件修改生效。
3.3 配置slaves的配置文件:
新建slaves配置文件(子节点配置文件):
首先进入spark的conf目录下:
cd /tmp/software/spark-2.4.5-bin-hadoop2.7/conf
copy一份slaves:
cp slaves.template slaves
然后进入vim编辑模式:
vim slaves
输入“i”进入编辑模式,在文件的最后加上如下配置
配置上localhost,最后“Esc”,输入“:”加“wq”保存退出vim编辑模式,最后source slaves使修改生效。
(备注:由于我使用环境为单机环境,只有一个节点,所以这里配置localhost)
最后:
测试一下,回到spark的主目录中,找到sbin目录,然后启动spark,使用命令sbin/start-all.sh。
sbin/start-all.sh
提示输入密码,反复输入root密码不对,然后root的密码改了又改还不行,后来搞清楚了此处非root密码,而是slave的密码,后期使用需要不断的输入密码,该繁琐的一步会带来极大的麻烦。因此进行进一步设置,实现ssh localhost免密码登录配置。
ssh localhost免密码登录配置
如果需要频繁的进行SSH登录,远程拷贝,在一台Linux上给另外一台Linux发送SSH指令,每一次都要输入对应Linux的命令就非常的麻烦,为了更加安全和方便,可以建立一种信任机制,让特定的机器、特定的用户可以不用输入密码就可以登录、远程拷贝、执行SSH命令了。这种信任机制可以通过配置SSH免密码登录实现,而想要免密码登录到Linux的机器上,需要生成一对秘钥,一个公钥,一个私约。
第一步:前提配置
使用root登录修改配置文件:/etc/ssh/sshd_config,将其中三行的注释去掉,见下图:
然后重启ssh服务:
service sshd restart
第二步:执行命令
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
其中ssh-keygen命令是生成秘钥,-t是加密类型,dsa是一种加密方式。
生成密钥文件
第三步:执行命令
将 id_dsa.pub文件内容导入/authorized_keys,执行:
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
配置完成后,会在当前用户的家目录的.ssh目录生成两个文件,一个是id_dsa即私钥,另一个是id_dsa.pub即公钥,见下图:
第四步:修改权限
修改本文件的权限
- ~/.ssh需要是700权限
- authorized_keys需要是644权限
严格按照如下操作赋权:
chmod 700 ~/.ssh
chmod 644 ~/.ssh/authorized_keys
再次测试,执行ssh localhost,普通用户成功…………
但是root下,我又看到了那熟悉的,仿佛夜空中最闪亮的那颗星“Permission denied, please try again”,
晕,只能再改,后来网上找到了解决办法,
将/etc/ssh/sshd_config文件中PermitRootLogin no改成PermitRootLogin yes
测试,root下执行ssh localhost成功
回到spark的主目录中,找到sbin目录,然后启动spark,使用命令sbin/start-all.sh以及使用jps查看是否启动成功。
显示 Jps、Master、Worker三项,启动成功,并且不再需要密码验证。
后续:
Spark目录:
- spark根目录下的bin目录,包含用来和Spark交互的可执行文件,如Spark shell
- examples包含一些单机Spark job,可以研究和运行这些例子
Spark的Shell:
- Spark的shell能够处理分布在集群上的数据
- Spark把数据加载到节点的内存中,因此分布式处理可在秒级完成
- 快速使用迭代式计算,实时查询、分析一般能够在shells中完成
- Spark提供了Python shells和Scala shells。
这里以Scala shell为例,演示读取本地文件并进行操作:
进入Scala shell:
spark-shell
还可以运行pyspark:
pyspark
你没看错(此处手动滑稽),还是熟悉的朋友“Hello,world”
End…
后续会继续介绍如何实现在Spark里使用Anaconda以及在windows通过浏览器远程连接Linux服务器的jupyter,详细请浏览:
系列之二:Spark里使用Anaconda配置及实现
系列之三:在windows通过浏览器远程连接Linux服务器的jupyter notebook