一,前言
1.1 集群规划
需要已经配置免密登录的三台CentOS7服务器:
IP地址 | hosts | 节点身份 |
172.16.49.246 | docker01 | Master,Worker |
172.16.49.247 | docker02 | Worker |
172.16.49.248 | docker03 | Worker |
1.2 前置条件
1)提前安装JDK1.8,请参考:https://www.t9vg.com/archives/346
2)提前安装Scala,请参考:https://www.t9vg.com/archives/635
1.3 安装包下载
官方下载页面:http://spark.apache.org/downloads.html
本文使用spark-2.2.2-bin-hadoop2.7,下载地址:https://pan.baidu.com/s/1kEQ09N8VPG_9oLwoxwDUaA 密码: 22gk
二,安装部署
2.1,解压和修改配置文件
###解压spark
tar -zxvf spark-2.2.2-bin-hadoop2.7.tgz
###修改conf
cd conf/
mv slaves.template slaves
vim slaves
###添加工作节点
docker01
docker02
docker03
###编辑sbin/spark-config文件,添加配置文件
export JAVA_HOME=/usr/local/jdk1.8.0_91 #这个要根据自身java_home修改
配置整个集群的环境变量(可选) 通过conf/spark-env.sh进一步配置整个集群的环境变量,如下变量,这里先用默认的值 。
变量 | 描述 |
SPARK_MASTER_IP | 绑定一个外部IP给master. |
SPARK_MASTER_PORT | 从另外一个端口启动master(默认: 7077) |
SPARK_MASTER_WEBUI_PORT | Master的web UI端口 (默认: 8080) |
SPARK_WORKER_PORT | 启动Spark worker 的专用端口(默认:随机) |
SPARK_WORKER_DIR | 伸缩空间和日志输入的目录路径(默认: SPARK_HOME/work); |
SPARK_WORKER_CORES | 作业可用的CPU内核数量(默认: 所有可用的); |
SPARK_WORKER_MEMORY | 作业可使用的内存容量,默认格式1000M或者 2G (默认: 所有RAM去掉给操作系统用的1 GB);注意:每个作业自己的内存空间由SPARK_MEM决定。 |
SPARK_WORKER_WEBUI_PORT | worker 的web UI 启动端口(默认: 8081) |
SPARK_WORKER_INSTANCES | 每台机器上运行worker数量 (默认: 1). 当你有一个非常强大的计算机的时候和需要多个Spark worker进程的时候你可以修改这个默认值大于1 . 如果你设置了这个值。要确保SPARK_WORKER_CORE 明确限制每一个r worker的核心数, 否则每个worker 将尝试使用所有的核心 。 |
SPARK_DAEMON_MEMORY | 分配给Spark master和 worker 守护进程的内存空间 (默认: 512m) |
SPARK_DAEMON_JAVA_OPTS | Spark master 和 worker守护进程的JVM 选项(默认: none) |
2.2 复制文件到另外2台机器
scp -r spark-2.2.2-bin-hadoop2.7/ docker02:/hadoop/
scp -r spark-2.2.2-bin-hadoop2.7/ docker03:/hadoop/
三,运行和测试
3.1启动集群
###在任意一台机器运行命令
[root@docker01 spark-2.2.2-bin-hadoop2.7]# sbin/start-all.sh
starting org.apache.spark.deploy.master.Master, logging to /hadoop/spark-2.2.2-bin-hadoop2.7/logs/spark-root-org.apache.spark.deploy.master.Master-1-docker01.out
docker03: starting org.apache.spark.deploy.worker.Worker, logging to /hadoop/spark-2.2.2-bin-hadoop2.7/logs/spark-root-org.apache.spark.deploy.worker.Worker-1-localhost.localdomain.out
docker02: starting org.apache.spark.deploy.worker.Worker, logging to /hadoop/spark-2.2.2-bin-hadoop2.7/logs/spark-root-org.apache.spark.deploy.worker.Worker-1-docker02.out
docker01: starting org.apache.spark.deploy.worker.Worker, logging to /hadoop/spark-2.2.2-bin-hadoop2.7/logs/spark-root-org.apache.spark.deploy.worker.Worker-1-docker01.out
###jps命令查看启动情况
[root@docker01 spark-2.2.2-bin-hadoop2.7]# jps
13168 Worker
13076 Master
13244 Jps
[root@docker02 hadoop]# jps
8704 Jps
8642 Worker
[root@docker03 hadoop]# jps
8704 Jps
8642 Worker
访问web界面:docker01:8080
3.2启动spark-shell连接集群
#在本地客户端连接服务器集群spark-shell
mbp15:bin mac$ ./spark-shell --master spark://docker01:7077
此时spark的监控界面会有对应的任务显示:
3.2提交spark任务到集群
本文将提交一个spark自带的examples
### --class:命名空间(包名)+类名;--master:spark集群的master;.jar:jar包位置;3:core并行度
mbp15:bin mac$ ./spark-submit --class org.apache.spark.examples.JavaSparkPi --master spark://docker01:7077 ../examples/jars/spark-examples_2.11-2.2.2.jar 3
注意:spark-client 和spark集群需要版本一致,否则将报错:Can only call getServletHandlers on a running MetricsSystem