项目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 集群搭建 详细步骤相关推荐

  1. Hadoop集群搭建详细步骤大全

    0- Hadoop运行环境搭建 1.1,安装虚拟机 1)安装虚拟机 IP地址192.168.10.100.主机名称hadoop100,4G.硬盘50G (安装vm和光盘,注意放在内存大的硬盘上) (1 ...

  2. slurm-gpu集群搭建详细步骤

    初衷 首先,slurm搭建的初衷是为了将我多个GPU机器连接起来,从来利用多台机器的计算能力,提高计算效率,之前使用过deepops去搭建,结果最后好像deepops对GPU的卡有要求,我的每台机器卡 ...

  3. 全网最详细的ambari集群搭建详细步骤

    目录 1.服务器环境说明 2.防火墙设置 3.禁用selinux 4.配置jdk和mysql驱动 5.安装Mysql 6.mysql密码操作 7.安装httpd服务 8.安装ntp 9.ntp配置 1 ...

  4. Spark-----Spark 与 Hadoop 对比,Spark 集群搭建与示例运行,RDD算子简单入门

    目录 一.Spark 概述 1.1. Spark是什么 1.2. Spark的特点(优点) 1.3. Spark组件 1.4. Spark和Hadoop的异同 二.Spark 集群搭建 2.1. Sp ...

  5. redis3.0.0 集群安装详细步骤

    2019独角兽企业重金招聘Python工程师标准>>> redis3.0.0 集群安装详细步骤 博客分类: 缓存 Redis集群部署文档(centos6系统) (要让集群正常工作至少 ...

  6. redis3.0.2 分布式集群安装详细步骤

    redis3.0.2 分布式集群安装详细步骤 --(centos5.8 X64系统) 版本历史 时间 版本 说明 编写者 2015-06-5 1.0 redis3.0.2 分布式集群安装详细步骤 cs ...

  7. Spark集群搭建中的问题

    参照<Spark实战高手之路>学习的,书籍电子版在51CTO网站 资料链接 Hadoop下载[链接](http://archive.apache.org/dist/hadoop/core/ ...

  8. Hadoop/Spark集群搭建图文全攻略

    Hadoop/Spark集群搭建图文全攻略 一.安装VMware 二.创建Linux虚拟机 三.CentOS-7安装 四.Linux系统环境配置 五.其他配置 六.虚拟机克隆 七.jdk安装 八.Zo ...

  9. Hadoop集群+Spark集群搭建基于VMware虚拟机教程+安装运行Docker

    Hadoop集群+Spark集群搭建+安装运行Docker 目录 一.准备工作 二.在虚拟机上安装CentOS 7 三.hdfs的环境准备 四.hdfs配置文件的修改 五.克隆(复制虚拟机) 六.制作 ...

  10. spark集群搭建整理之解决亿级人群标签问题

    spark集群搭建整理之解决亿级人群标签问题 参考文章: (1)spark集群搭建整理之解决亿级人群标签问题 (2)https://www.cnblogs.com/huangxincheng/p/91 ...

最新文章

  1. delphi 属性编辑器
  2. pycharm多光标设置
  3. 编译Flink项目的时候遇到cannot find symbol   symbol:   variable Time
  4. Linux 中的各种栈:进程栈 线程栈 内核栈 中断栈
  5. linux cmake 编译项目,使用CMake构建复杂工程
  6. bootstrap-表单
  7. linux内存锁定什么意思,Linux内存子系统——Locking Pages(内存锁定)
  8. Android开发人员必备的10 个开发工具
  9. HTML5 本地存储 Web Storage
  10. 基于FPGA的车牌识别
  11. 史上最全的springboot导出pdf文件
  12. PHP编写两个数的最小公倍数,两个数的最小公倍数怎么求
  13. 让你相见恨晚的Photoshop 技巧
  14. c语言中的加减乘除字母,C 语言简单加减乘除运算
  15. 网路连接配置和DNS服务?解决无线网卡连接WIFI问题(硬件和驱动没问题)?
  16. 植物大战僵尸无限阳光(包括阳光基址的寻找)
  17. 解决ios系统下微信页面无法播放背景音乐的问题
  18. 基于arduino和openmv的智能小车设计制作流程
  19. java鱼眼相机标定_鱼眼相机标定方法及标定装置制造方法
  20. thinksnsv4.6运行php,ThinkSNS开启调试模式

热门文章

  1. 130242014049-魏俊斌-《电商系统分类模块》
  2. Linux 远程登录配置
  3. 在一个centos6上安装多个不同版本python
  4. 主从不同步故障案例一
  5. CentOS 7搭建tengine+php+mariadb环境并安装discuz论坛
  6. redis如何选择合适的数据结构
  7. ip,netstat命令案例
  8. Code blocks调试教程
  9. 数据驱动安全:数据安全分析、可视化和仪表盘》一3.6 本章小结
  10. android studio执行 Information:Gradle tasks [:app:assembleDebug]失败处理