spark 集群搭建 详细步骤
项目github地址:bitcarmanlee easy-algorithm-interview-and-practice
欢迎大家star,留言,一起学习进步
最近好不容易搞到了三台测试机,可以用来搭建spark集群搞模型。本宝宝开心得不行,赶紧行动,把spark集群搭起来,模型跑起来。
1.搭建hadoop集群
hadoop的hdfs文件系统是整个生态圈的基础,因为数据量大了以后,数据一般就都放hdfs上头了。因为四台测试机之前已经搭建好了hadoop集群环境,而且经过本宝宝测试,hadoop集群也是可用的,所以就省了搭hadoop集群的功夫。
2.配置集群host
四台机器的hostname如下:
namenodetest01.hadoop.xxx.com 192.168.9.247
datanodetest01.hadoop.xxx.com 192.168.9.248
datanodetest02.hadoop.xxx.com 192.168.9.249
datanodetest03.hadoop.xxx.com 192.168.9.228
请确认在四台机器的/etc/hosts里都添加上相应节点的信息。
3.配置集群免密登录
因为之前搭好了hadoop环境,最开始我以为这几个节点的免密登录时配置好的,所以事先没有配置。后来等把spark布好启动以后,才发现提示让我输密码,很明显就是事先没配置好免密登录。
配置的方式也很简单,因为我打算让namenodetest01机器做master,cd到home目录下的.ssh,然后执行:
ssh-keygen -t rsa
此时会在.ssh目录下生成id_rsa跟id_rsa.pub,分别对应的为私钥与公钥。
接下来,将namenodetest01的公钥scp到另外三台机器上:
scp id_rsa.pub root@datanodetest01:~/.ssh
scp id_rsa.pub root@datanodetest02:~/.ssh
scp id_rsa.pub root@datanodetest03:~/.ssh
再分别登到01,02,03两台机器,将刚传过来的公钥添加到authorized_keys中:
[root@datanodetest02 .ssh]# pwd
/root/.ssh
cat id_rsa.pub >> authorized_keys
至此,master免密登录另外两个节点配置完毕。
4.安装jdk,确保jdk版本1.7以上
因为之前搭建好了hadoop环境,所以jdk已经配置好。
需要注意的是:spark需要jdk1.7及以上。有一个节点的spark配置好以后,最开始spark-shell无法启动,但是其他两个节点的spark-shell正常启动没有问题。后来发现无法启动那个节点的jdk被人配置为1.6。。。后来修改jdk为1.7以后即可正常启动 spark-shell。
5.安装scala
因为spark是scala开发,所以scala是需要配置的。去scala官网下载相应的scala包,比如我下载的是scala-2.11.8.tar,tar -zxvf 解压以后,生成scala-2.11.8目录。查看一下里面的结构
[root@datanodetest02 soft]# tree -L 1 scala-2.11.8
scala-2.11.8
├── bin
├── doc
├── lib
└── man4 directories, 0 files
然后在/etc/profile里配置scala的环境变量:
export SCALA_HOME=/data/wanglei/soft/scala-2.11.8
export PATH=$SCALA_HOME/bin:$PATH
保存退出,source一下配置文件让其立刻生效。然后再运行scala:
[root@datanodetest02 soft]# scala
Welcome to Scala 2.11.8 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_51).
Type in expressions for evaluation. Or try :help.scala>
可见在02这个机器上scala已经成功配置好。其余两台机器也按照此过程安装配置即可。
6.开始布spark
因为我们打算用namenodetest01机器做master,所以先在namenode机器上配置spark。
先下载spark的gz包,我下载的是spark-1.6.0-bin-hadoop2.4.tgz,然后tar -zxvf解压。
看看里头有些什么
[root@namenodetest01 soft]# tree -L 1 spark-1.6.0-bin-hadoop2.4
spark-1.6.0-bin-hadoop2.4
├── bin
├── CHANGES.txt
├── conf
├── data
├── ec2
├── examples
├── lib
├── LICENSE
├── licenses
├── logs
├── NOTICE
├── python
├── R
├── README.md
├── RELEASE
├── sbin
└── work
然后cd到bin目录里,执行spark-shell脚本。如果能正常启动,说明在本机上没问题。如果不能正常启动,那就需要再排查其他原因。比如我前面提到的jdk版本问题。
7.对master进行相应的配置
cd到spark目录里的conf文件夹下。首先将spark-env.sh.template文件mv为spark-env.sh。然后添加配置项:
export JAVA_HOME=/usr/java/default/
export SCALA_HOME=/data/wanglei/soft/scala-2.11.8
export HADOOP_HOME=/usr/lib/hadoopexport STANDALONE_SPARK_MASTER_HOST=namenodetest01
export SPARK_MASTER_IP=$STANDALONE_SPARK_MASTER_HOST### Let's run everything with JVM runtime, instead of Scala
export SPARK_LAUNCH_WITH_SCALA=0
export SPARK_LIBRARY_PATH=${SPARK_HOME}/lib
export SCALA_LIBRARY_PATH=${SPARK_HOME}/lib
export SPARK_MASTER_WEBUI_PORT=18080
#export SPARK_MASTER_PORT=7077
#export SPARK_WORKER_PORT=7078
#export SPARK_WORKER_WEBUI_PORT=18081
#export SPARK_WORKER_DIR=/var/run/spark/work
#export SPARK_LOG_DIR=/var/log/spark
#export SPARK_PID_DIR='/var/run/spark/'if [ -n "$HADOOP_HOME" ]; thenexport SPARK_LIBRARY_PATH=$SPARK_LIBRARY_PATH:${HADOOP_HOME}/lib/native
fiexport HADOOP_CONF_DIR=${HADOOP_CONF_DIR:-/etc/hadoop/conf}
需要注意的是SPARK_MASTER_WEBUI_PORT默认的端口是8080,实际中8080端口是最为常用的端口,很可能被其他应用所占用。所以我们将其改为18080。经过测试发现,即使8080端口被其他应用程序占用,我们将其配为8080端口后,spark-shell能够正常启用,但是看到的页面是其他应用程序的界面。
然后将slaves.template文件cp一份为slaves,在slaves里添加如下配置:
datanodetest01
datanodetest02
datanodetest03
很明显,这个就是我们的三个worker节点。
8.分发到其他三个节点
master配置完成以后,将spark的整个包内容scp到另外三个节点上,不需要修改任何配置项。
注意:因为按集群模式启动时,会按master上的路径去找spark。所以其他节点spark的路径需要跟master保持一致。
分发完成以后,去分别取另外三个节点执行spark-shell,看看能不能正常启动,以便提早发现问题。
9.启动spark集群
在master上,cd到spark里的sbin目录,执行start-all.sh脚本:
start-all.sh
然后看到shell输出如下:
starting org.apache.spark.deploy.master.Master, logging to /data/wanglei/soft/spark-1.6.0-bin-hadoop2.4/logs/spark-root-org.apache.spark.deploy.master.Master-1-datanodetest01.hadoop.xxx.com.out
datanodetest01: starting org.apache.spark.deploy.worker.Worker, logging to /data/wanglei/soft/spark-1.6.0-bin-hadoop2.4/logs/spark-root-org.apache.spark.deploy.worker.Worker-1-datanodetest01.hadoop.xxx.com.out
datanodetest02: starting org.apache.spark.deploy.worker.Worker, logging to /data/wanglei/soft/spark-1.6.0-bin-hadoop2.4/logs/spark-root-org.apache.spark.deploy.worker.Worker-1-datanodetest02.hadoop.xxx.com.out
datanodetest03: starting org.apache.spark.deploy.worker.Worker, logging to /data/wanglei/soft/spark-1.6.0-bin-hadoop2.4/logs/spark-root-org.apache.spark.deploy.worker.Worker-1-datanodetest03.hadoop.xxx.com.out
很明显可以看出,集群显示启动了master,然后在启动了三个worker。
10.查看集群状态
spark集群的默认web管理页面端口为8080,url为http://master:8080
由于我们之前配置了18080端口,将上面的端口地址改为18080即可。
查看一下页面:
可以看出,集群有三个worker,而且现在都是处于正常工作状态。
11.运行第一个spark代码
在 ./examples/src/main 目录下有一些 Spark 的示例程序,有 Scala、Java、Python、R 等语言的版本。我们可以先运行一个示例程序 SparkPi(即计算 π 的近似值),执行如下命令:
./run-example SparkPi
然后会输出很多运行内容
[root@datanodetest02 bin]# ./run-example SparkPi
Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
16/07/20 14:16:34 INFO SparkContext: Running Spark version 1.6.0
16/07/20 14:16:34 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
16/07/20 14:16:35 INFO SecurityManager: Changing view acls to: root
16/07/20 14:16:35 INFO SecurityManager: Changing modify acls to: root
16/07/20 14:16:35 INFO SecurityManager: SecurityManager: authentication disabled; ui acls disabled; users with view permissions: Set(root); users with modify permissions: Set(root)
16/07/20 14:16:35 INFO Utils: Successfully started service 'sparkDriver' on port 44304.
...
里面有一行输出为:
Pi is roughly 3.14374
这就把Pi的值给算出来了。
通过运行这个简单的测试代码,我们很容易就发现spark的优势:与MR相比,spark的速度快很多。MR即使最简单一个任务,从任务提交到分配资源到任务正式运行最后输出结果,都接近分钟级。大家看看spark的执行:
...
16/07/20 14:16:38 INFO Executor: Finished task 1.0 in stage 0.0 (TID 1). 1031 bytes result sent to driver
16/07/20 14:16:38 INFO Executor: Finished task 0.0 in stage 0.0 (TID 0). 1031 bytes result sent to driver
16/07/20 14:16:38 INFO TaskSetManager: Finished task 1.0 in stage 0.0 (TID 1) in 701 ms on localhost (1/2)
16/07/20 14:16:38 INFO TaskSetManager: Finished task 0.0 in stage 0.0 (TID 0) in 730 ms on localhost (2/2)
16/07/20 14:16:38 INFO TaskSchedulerImpl: Removed TaskSet 0.0, whose tasks have all completed, from pool
16/07/20 14:16:38 INFO DAGScheduler: ResultStage 0 (reduce at SparkPi.scala:36) finished in 0.744 s
16/07/20 14:16:38 INFO DAGScheduler: Job 0 finished: reduce at SparkPi.scala:36, took 1.009645 s
Pi is roughly 3.14374
...
12.关闭spark集群
如果要关闭spark集群,很简单。cd到spark目录下的sbin目录,然后执行stop-all.sh脚本即可。
spark 集群搭建 详细步骤相关推荐
- Hadoop集群搭建详细步骤大全
0- Hadoop运行环境搭建 1.1,安装虚拟机 1)安装虚拟机 IP地址192.168.10.100.主机名称hadoop100,4G.硬盘50G (安装vm和光盘,注意放在内存大的硬盘上) (1 ...
- slurm-gpu集群搭建详细步骤
初衷 首先,slurm搭建的初衷是为了将我多个GPU机器连接起来,从来利用多台机器的计算能力,提高计算效率,之前使用过deepops去搭建,结果最后好像deepops对GPU的卡有要求,我的每台机器卡 ...
- 全网最详细的ambari集群搭建详细步骤
目录 1.服务器环境说明 2.防火墙设置 3.禁用selinux 4.配置jdk和mysql驱动 5.安装Mysql 6.mysql密码操作 7.安装httpd服务 8.安装ntp 9.ntp配置 1 ...
- Spark-----Spark 与 Hadoop 对比,Spark 集群搭建与示例运行,RDD算子简单入门
目录 一.Spark 概述 1.1. Spark是什么 1.2. Spark的特点(优点) 1.3. Spark组件 1.4. Spark和Hadoop的异同 二.Spark 集群搭建 2.1. Sp ...
- redis3.0.0 集群安装详细步骤
2019独角兽企业重金招聘Python工程师标准>>> redis3.0.0 集群安装详细步骤 博客分类: 缓存 Redis集群部署文档(centos6系统) (要让集群正常工作至少 ...
- redis3.0.2 分布式集群安装详细步骤
redis3.0.2 分布式集群安装详细步骤 --(centos5.8 X64系统) 版本历史 时间 版本 说明 编写者 2015-06-5 1.0 redis3.0.2 分布式集群安装详细步骤 cs ...
- Spark集群搭建中的问题
参照<Spark实战高手之路>学习的,书籍电子版在51CTO网站 资料链接 Hadoop下载[链接](http://archive.apache.org/dist/hadoop/core/ ...
- Hadoop/Spark集群搭建图文全攻略
Hadoop/Spark集群搭建图文全攻略 一.安装VMware 二.创建Linux虚拟机 三.CentOS-7安装 四.Linux系统环境配置 五.其他配置 六.虚拟机克隆 七.jdk安装 八.Zo ...
- Hadoop集群+Spark集群搭建基于VMware虚拟机教程+安装运行Docker
Hadoop集群+Spark集群搭建+安装运行Docker 目录 一.准备工作 二.在虚拟机上安装CentOS 7 三.hdfs的环境准备 四.hdfs配置文件的修改 五.克隆(复制虚拟机) 六.制作 ...
- spark集群搭建整理之解决亿级人群标签问题
spark集群搭建整理之解决亿级人群标签问题 参考文章: (1)spark集群搭建整理之解决亿级人群标签问题 (2)https://www.cnblogs.com/huangxincheng/p/91 ...
最新文章
- delphi 属性编辑器
- pycharm多光标设置
- 编译Flink项目的时候遇到cannot find symbol symbol: variable Time
- Linux 中的各种栈:进程栈 线程栈 内核栈 中断栈
- linux cmake 编译项目,使用CMake构建复杂工程
- bootstrap-表单
- linux内存锁定什么意思,Linux内存子系统——Locking Pages(内存锁定)
- Android开发人员必备的10 个开发工具
- HTML5 本地存储 Web Storage
- 基于FPGA的车牌识别
- 史上最全的springboot导出pdf文件
- PHP编写两个数的最小公倍数,两个数的最小公倍数怎么求
- 让你相见恨晚的Photoshop 技巧
- c语言中的加减乘除字母,C 语言简单加减乘除运算
- 网路连接配置和DNS服务?解决无线网卡连接WIFI问题(硬件和驱动没问题)?
- 植物大战僵尸无限阳光(包括阳光基址的寻找)
- 解决ios系统下微信页面无法播放背景音乐的问题
- 基于arduino和openmv的智能小车设计制作流程
- java鱼眼相机标定_鱼眼相机标定方法及标定装置制造方法
- thinksnsv4.6运行php,ThinkSNS开启调试模式
热门文章
- 130242014049-魏俊斌-《电商系统分类模块》
- Linux 远程登录配置
- 在一个centos6上安装多个不同版本python
- 主从不同步故障案例一
- CentOS 7搭建tengine+php+mariadb环境并安装discuz论坛
- redis如何选择合适的数据结构
- ip,netstat命令案例
- Code blocks调试教程
- 数据驱动安全:数据安全分析、可视化和仪表盘》一3.6 本章小结
- android studio执行 Information:Gradle tasks [:app:assembleDebug]失败处理