Spark集群搭建

[TOC]
spark环境搭建
版本总览
百度网盘下载 提取码:
7g8v
scala
下载并安装scala
下载 scala-2.12
安装
rpm -ivh scala-2.12.15.rpm查看scala版本
scala -version
配置环境
查询包中文件安装位置 -l:
rpm -ql 包名
编辑
/etc/profile,文件末尾添加配置
执行source /etc/profile令其生效
其他节点同样配置即可
免密登录
修改主机名(非必须)
查看主机名用
hostname修改主机名/etc/hostname修改后重启服务器reboot
配置host文件
vi /etc/hosts
/etc/init.d/network restart
生成秘钥对
使用
RSA类型的加密类型来创建密钥对
-f 参数表示指定密钥对生成位置与名称
密钥对通常放在
~/.ssh目录下回车即可创建密钥对,需要输入密码如果不需要为密钥对进行加密,那么可以一路回车
有需要清空文件的可以执行
truncate -s 0 authorized_keys
创建成功之后,可以看到 .ssh 目录下多了两个文件,分别是:
id_key:密钥对的私钥,通常放在客户端
id_rsa.pub:密钥对中的公钥,通常放在服务端
秘钥上传服务器
文件权限
将your_key.pub 公钥文件上传至需要连接的服务器
-i 参数表示使用指定的密钥,-p参数表示指定端口,ssh 的默认端口是 22
公钥查看
本地的公钥文件上传在服务器的.ssh/authorized_keys 文件中
免密检测
hadoop
新建用户(非必须)
新建hadoop用户
修改hadoop用户密码
切换用户
新建文件夹
关闭防火墙
关闭selinux
安装
下载并解压hadoop到
/usr/hadoop-3.2.0
下载 hadoop-3.2.0,解压到
/usr/hadoop-3.2.0配置环境变量
执行
source /etc/profile令其生效查看hadoop版本,
hadoop version
配置文件
Hadoop配置文件的配置,需要配置的文件有几个分别是
hadoop-env.sh
core-site.xml
hdfs-site.xml
mapred-site.xml
yarn-site.xml
workers文件
这些文件均可以在
/usr/hadoop-3.2.0/etc/hadoop下找到
workers文件
旧版本以及网上的教程是修改etc/hadoop/slaves文件,但是新版已经移除了这一个文件,取而代之的是workers文件,上述设置代表我的集群有三个datanode结点
hadoop_env.sh 在hadoop根目录下执行
mkdir pids,用于存放pid文件
注意的是,如果之前没有设置JAVA_HOME的环境变量,此处直接这样引用会出现错误,改用绝对路径即可消除错误。
core-site.xml
hdfs-site.xml
mapred-site.xml
yarn-site.xml
从节点设置
将hadoop目录拷贝到从节点的对应目录 仿照主节点对应的数据目录设置,设置对应的数据目录(即/data一系列目录)
hadoop启动和测试
第一次开启时首先要初始化hdfs
此处需要注意一个问题,第二次开启不需要再次初始化,遇到问题需要再次初始化,建议删除存放文件 上述配置文件中指明了存放数据的文件为dfs,到时候删除即可
主节点启动
查看进程
查看对应的数据结点是否正确
hdfs主页
Slave03:50070,如果不行,试试默认端口9870hadoop主页
Slave03:8088
主要命令
启动集群:
./sbin/start-all.sh关闭集群:
./sbin/stop-all.sh
常见问题
stop-all.sh的时候hadoop的相关进程都无法停止
解决方案: 参考spark的常见问题,Hadoop的pid命名规则:
因此,这里的pid文件名为:
hadoop-root-datanode.pid
hadoop-root-namenode.pid
hadoop-root-nodemanager.pid
hadoop-root-resourcemanager.pid
hadoop-root-secondarynamenode.pid
通过jps查看相关进程的pid,恢复这些pid文件即可使用stop-all.sh停止hadoop,根治方案参考spark常见问题部分
spark安装
安装配置
下载解压,复制到
/usr/spark-3.0
配置环境变量
vi /etc/profile
执行source /etc/profile令其生效
配置
spark-env.sh将conf文件夹下的spark-env.sh.template重命名为spark-env.sh,并添加以下内容: 在spark根目录下执行mkdir pids,用于存放pid文件
配置
slaves将conf文件夹下的slaves.template重命名为slaves,并添加以下内容:
配置从节点(将spark目录复制到其他节点的同一个目录下)
在
sbin目录下使用start-all.sh启动集群

启动成功后,我们在浏览器输入Slave03:8080看到有三个结点,就代表我们安装成功了。 如果发现启动错误,请查看logs目录下的日志,自行检查配置文件!
日志配置
配置spark的执行日志等级,进入到spark根目录下的
conf目录cp log4j.properties.template log4j.properties,修改配置如下
主要命令
启动集群:
./sbin/start-all.sh关闭集群:
./sbin/stop-all.sh
常见问题
stop-all.sh的时候spark的相关进程都无法停止
$SPARK_PID_DIR中存放的是pid文件,就是要停止进程的pid。其中$SPARK_PID_DIR默认是在系统的/tmp目录 系统每隔一段时间就会清除/tmp目录下的内容。到/tmp下查看一下,果然没有相关进程的pid文件了。 这才导致了stop-all.sh无法停止集群。 解决方案: $SPARK_PID_DIR下新建pid文件,pid文件命名规则如下
$SPARK_PID_DIR默认是/tmp$SPARK_IDENT_STRING是登录用户$USER,我的集群中用户名是root$command是调用spark-daemon.sh时的参数,有两个:org.apache.spark.deploy.master.Master
org.apache.spark.deploy.worker.Worker
$instance也是调用spark-daemon.sh时的参数,我的集群中是1
因此pid文件名如下(名字不对的情况下,可以执行./start-all.sh,重新启动查看后,再执行./stop-all.sh进行本次集群的关闭,注意这里关闭的是本次打开的,之前无法关闭的进程仍然还在):
spark-root-org.apache.spark.deploy.master.Master-1.pid
spark-root-org.apache.spark.deploy.worker.Worker-1.pid
通过jps查看相关进程的pid,将pid保存到对应的pid文件即可,之后调用spark的stop-all.sh,即可正常停止spark集群 要根治这个问题,只需要在集群所有节点都设置$SPARK_PID_DIR,$HADOOP_PID_DIR和$YARN_PID_DIR即可
pyspark
环境配置
基础环境
spark集群服务器配置环境变量,
vi /etc/profile
执行source /etc/profile使其生效
安装pyspark库
对于spark服务器和work间环境不一致的情况
方式一: 重新安装python虚拟环境,使得路径完全一致
方式二: 配置软链接
在服务器 liunx 环境上修改查看python的包路径site-package
graphx环境
安装graphframes
去graphframes官网下载对应jar包,这里spark集群是3.0.3,所以可以下载Version: 0.8.2-spark3.0-s_2.12这个版本的 复制到spark根目录下的jars目录中,集群中每个节点都需要 如果还会出错,可以把该jar包也复制一份到python环境下 /opt/anaconda/install/envs/ray37/lib/python3.7/site-packages/pyspark/jars
配置远程解释器
配置连接
配置连接的远程服务器
打开Pycharm -> Tools -> Deployment -> Configuration
点击加号,选择SFTP,给服务器取一个名字
点击SSH configuration后面的省略号 输入
服务器IP地址和账号密码,结束后测试一下连接情况Connection Parameters下的心跳可以设置10秒 确认后,保存退出当前窗口
点击自动检测 ,选择远程服务器的工作路径 这里选的是,自己提前新建的空文件夹
/home/huangyc/hyc_test
Mappings下选择Local path,配置当前项目的路径 保存,退出
配置解释器
选择远程的解释器

点击move即可next 配置路径,远程的选择自己之前新建的
/home/huangyc/hyc_testAutomatically upload ...表示会自动上传项目到服务器中

其它功能
在
Pycharm上显示远程代码:选择Tools -->Deployment-->Browse Remote Host更新代码:将本地代码上传到服务器上
Tools -->Deployment-->upload to服务器上代码下载到本地代码上
Tools -->Deployment-->Download from
测试例子
简单词统计 + pagerank例子
执行方法
可以直接在pycharm中执行,这里pycharm使用的是远程的python环境,这里执行时的内存是默认值 1024.0 MiB
在pycharm中执行可能需要加上变量设置,但使用
spark-submit则可以不需要或者执行以下命令执行,这里执行时的内存是spark中配置的 8.0 GiB
本地连接
除了配置远程服务器的py解释器,还可以配置本地的模式
需要在spark集群中配置host映射,通过
vi /etc/hosts命令打开hosts文件,添加本地的主机名映射
最后执行/etc/init.d/network restart刷新DNS 如果没有的话,可能会报错误 Caused by: java.io.IOException: Failed to connect to DSE-20191111ZOU:65320 Caused by: java.net.UnknownHostException: DSE-20191111ZOU
py代码中需要添加以下的环境参数才能连接上spark集群
⚡: 本地的python版本尽量和spark集群上的一致,避免不必要的错误
常见问题
Last updated
Was this helpful?