- A+
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将任务发送给执行程序运行。
有关这种架构有几件有用的事情要注意:
- 每个应用程序都获得自己的执行程序进程,这些进程在整个应用程序的持续时间内保持不变,并在多线程中运行任务。这有利于在调度方(每个驱动程序安排自己的任务)和执行方(在不同JVM中运行的不同应用程序的任务)之间彼此隔离应用程序。但是,这也意味着数据不能在不写入外部存储系统的情况下在不同的Spark应用程序(SparkContext的实例)之间共享。
- Spark与底层群集管理器无关。只要可以获取执行程序进程,并且这些进程彼此通信,即使在也支持其他应用程序(例如Mesos / YARN)的集群管理器上运行它也是相对容易的。
- 驱动程序必须在其生命周期中监听并接收其执行器的传入连接(例如,请参阅网络配置部分中的spark.driver.port)。因此,驱动程序必须能够从工作节点进行网络寻址。
- 因为驱动程序调度集群上的任务,所以它应该靠近工作节点运行,最好在相同的局域网上运行。如果要远程发送请求到集群,最好是向驱动程序打开一个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)。
三.安装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://mirror.bit.edu.cn/apache/spark/spark-2.4.0/spark-2.4.0-bin-hadoop2.7.tgz
2.解压
tar zxvf spark-2.4.0-bin-hadoop2.7.tgz
mv spark-2.4.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)