大数据之Spark集群部署

  • A+
所属分类:Big Data

Apache Spark是一种快速和通用的集群计算系统。它提供Java,Scala,Python和R中的高级API,以及支持一般执行图的优化引擎。它还支持一组丰富的更高级别的工具,包括Spark SQL 用于SQL和结构化数据的处理,MLlib机器学习,GraphX用于图形处理和Spark Streaming.

Spark应用程序作为独立的集群进程运行,由SparkContext主程序中的对象(称为驱动程序)协调。

具体来说,要在集群上运行,SparkContext可以连接到几种类型的集群管理器 (Spark自己的独立集群管理器,Mesos或YARN),它们跨应用程序分配资源。一旦连接,Spark 将在集群中的节点上获取执行程序,这些进程可以为应用程序运行计算和存储数据。接下来,它将您的应用程序代码(由JAR或Python文件传递给SparkContext定义)发送给执行程序。最后,SparkContext将任务发送给执行程序运行。

大数据之Spark集群部署

有关这种架构有几件有用的事情要注意:

  1. 每个应用程序都获得自己的执行程序进程,这些进程在整个应用程序的持续时间内保持不变,并在多线程中运行任务。这有利于在调度方(每个驱动程序安排自己的任务)和执行方(在不同JVM中运行的不同应用程序的任务)之间彼此隔离应用程序。但是,这也意味着数据不能在不写入外部存储系统的情况下在不同的Spark应用程序(SparkContext的实例)之间共享。
  2. Spark与底层群集管理器无关。只要可以获取执行程序进程,并且这些进程彼此通信,即使在也支持其他应用程序(例如Mesos / YARN)的集群管理器上运行它也是相对容易的。
  3. 驱动程序必须在其生命周期中监听并接收其执行器的传入连接(例如,请参阅网络配置部分中的spark.driver.port)。因此,驱动程序必须能够从工作节点进行网络寻址。
  4. 因为驱动程序调度集群上的任务,所以它应该靠近工作节点运行,最好在相同的局域网上运行。如果要远程发送请求到集群,最好是向驱动程序打开一个RPC,并从附近提交操作,而不是从远离工作节点运行驱动程序

一.环境说明

Spark集群中包括3个节点:1个Master,2个Slave,节点之间局域网连接,可以互相ping通,节点地址如下:

系统    主机名        IP地址
  Centos 7.3   Master   192.168.2.45
  Centos 7.3   Slave1   192.168.2.46
  Centos 7.3   Slave2   192.168.2.47

官方安装 要求:Spark运行于Java 8+,Python 2.7 + / 3.4 +和R 3.1+。对于Scala API,Spark 2.2.0使用Scala 2.11。您将需要使用兼容的Scala版本(2.11.x)。

二.部署hadoop集群

三.安装Scala(三台都安装)

1.下载

wget https://downloads.lightbend.com/scala/2.12.4/scala-2.12.4.tgz

2.解压

tar zxvf scala-2.12.4.tgz

mv scala-2.12.4 /opt/scala

3.修改环境变量

vim /etc/profile

export SCALA_HOME=/opt/scala
export PATH=$SCALA_HOME/bin:$PATH

source /etc/profile

4.修改属主

chown -R hadoop /opt/scala/

四.Spark

1.下载

wget http://mirrors.hust.edu.cn/apache/spark/spark-2.2.0/spark-2.2.0-bin-hadoop2.7.tgz

2.解压

tar zxvf spark-2.2.0-bin-hadoop2.7.tgz

mv spark-2.2.0-bin-hadoop2.7 /opt/spark

3.添加环境变量

vim /etc/profile

#Spark enviroment
export SPARK_HOME=/opt/spark
export PATH="$SPARK_HOME/bin:$PATH"

source /etc/profile

4.修改属主

chown -R hadoop: /opt/spark

5.切换hadoop,修改配置文件

su hadoop

cd /opt/spark/conf/

cp spark-env.sh.template spark-env.sh

vim spark-env.sh

export JAVA_HOME=/usr/java/jdk1.8.0_161
export SCALA_HOME=/opt/scala
export HADOOP_HOME=/opt/hadoop
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export SPARK_MASTER_IP=Master
export SPARK_MASTER_HOST=Master
export SPARK_MASTER_WEBUI_PORT=8080
export SPARK_MASTER_PORT=7077
export SPARK_WORKER_PORT=7078
export SPARK_WORKER_MEMORY=2g
export SPARK_WORKER_CORES=2
export SPARK_HOME=/opt/spark
export SPARK_DIST_CLASSPATH=$(/opt/hadoop/bin/hadoop classpath)

6.修改slaves

cp slaves.template slaves

vim slaves

Master
Slave1
Slave2

7.复制到其他节点上

scp -r /opt/spark/ hadoop@Slave1:/home/hadoop

scp -r /opt/spark/ hadoop@Slave2:/home/hadoop

8.移动到/opt下,因/opt必须是root用户才能写入,所以在Slave1和Slave2执行

sudo mv /home/hadoop/spark/ /opt/spark

9.启动服务

/opt/spark/sbin/start-all.sh

10.测试

jps

Master上新增Master

Slave1和Slave2上新增Worker

11.增加开机启动

在Master上执行

sudo echo /opt/spark/sbin/start-all.sh /etc/rc.d/rc.local

12.查看集群状态

在客户端上输入Master地址访问,http://Master:8080

13.建立测试文件,上传到hadoop

vim test.txt

Hello world
Hello spark
Hello bigdata

hdfs dfs -mkdir -p /data/input

hdfs dfs -put test.txt /data/input

hdfs dfs -ls /data/input

14.使用spark-shell测试test.txt文件

$spark-shell

然后输入下面命令

scala>val file=sc.textFile("hdfs://master:9000/data/input/test.txt")
scala>val rdd = file.flatMap(line => line.split(" ")).map(word => (word,1)).reduceByKey(_+_)
scala>rdd.collect()
scala>rdd.foreach(println)

大数据之Spark集群部署

 

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: