Spark作为主流的大数据计算引擎之一,是必须掌握的大数据技术技能之一,随着大数据在更多的行业当中落地应用,Spark的应用范围也在不断扩大,Spark在线使用,成为企业的普遍需求之一。今天我们就主要来分享一下Spark集群环境搭建及基本使用。
Spark在线使用的第一步,就是先要进行集群环境的搭建。在Spark官网上,Spark的版本很多,有基于Hadoop构建的,也有独立运行的版本,今天我们这里以基于Hadoop构建的Spark版本为例。
Spark集群环境搭建:
进入Spark的下载目录,https://spark.apache.org/downloads.html,下载Pre-built for Apache Hadoop 2.7 and later;
把spark-2.4.4-bin-hadoop2.7.tgz文件下载到home路径下,然后解压到指定目录,
$tar-zxvf~/spark-2.4.4-bin-hadoop2.7.tgz-C/usr/local/
然后进入目录修改Spark目录的拥有者:
$cd/usr/local
$sudo mv./spark-2.4.4-bin-hadoop2.7./spark
$sudo chowm-R user_name./spark
配置环境变量
修改bashrc,配置环境变量,把Spark的bin和sbin路径加入到环境变量,
$vim~/.bashrc
export SPARK_HOME=/usr/local/spark
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
export PYTHONPATH=$SPARK_HOME/python:$SPARK_HOME/python/lib/py4j-0.10.7-src.zip:$PYTHONPATH
export PYSPARK_PYTHON=python3
Master节点配置
进入Spark目录,修改spark-env.sh文件,
$cd/usr/local/spark
$vim./conf/spark-env.sh
在spark-env.sh中添加下面内容,
export SPARK_DIST_CLASSPATH=$(/usr/local/hadoop/bin/hadoop classpath)
export HADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoop
export SPARK_MASTER_IP=10.110.113.132
SPARK_MASTER_IP指定的是master节点的IP,后面启动集群Spark时slave节点会注册到SPARK_MASTER_IP,如果这一项不配置,Spark集群则没有可使用资源,
修改slaves文件
配置完master节点信息之后需要配置slave节点信息,slave节点的信息配置在slaves文件里,由于Spark目录下没有这个文件,因此需要首先从slaves.template拷贝一下,
$cd/usr/local/spark/
$cp./conf/slaves.template./conf/slaves
然后添加如下内容,
slave0
slave0
slave1
需要注意的是,slaves文件里配置的是运行作业任务的节点(worker),这样的话master的节点只作为控制节点,而不作为工作节点,如果需要把master节点的资源也充分利用起来,需要把master节点也加入到slaves文件中。
slave节点配置
首先在master节点上把配制好的目录进行打包,拷贝到每个slave节点上,
$cd/usr/local
$tar-zcf~/spar.tar.gz./spark
$scp~/spark/tar.gz slave0:~/
$scp~/spark/tar.gz slave1:~/
$scp~/spark/tar.gz slave2:~/
然后在每个slave节点上执行下方命令,把文件解压到相应路径下,
$sudo rm-rf/usr/local/spark
$sudo tar-zxvf~/spark.tar.gz-C/usr/local
$sudo chown-R user_name/usr/local/spark
这样就完成了slave节点的配置。
启动Spark集群
如果要使用HDFS的话,在启动Spark集群前需要先启动Hadoop集群,
$cd/usr/local/hadoop/
$./sbin/start-all.sh
然后进入Spark目录,启动Spark集群,
$cd/usr/local/spark
$./sbin/start-all.sh
需要说明一下,前面配置Hadoop集群是提到,需要配置ssh免密登陆,对于Spark也是同样的道理,如果不配置ssh免密登陆的话,执行./sbin/start-all.sh会提示输入密码。
除了使用./sbin/start-all.sh启动Spark集群外,还可以分开启动,先启动master节点,然后启动slave节点,
$./sbin/start-master.sh
$./sbin/start-slaves.sh
如果前面没有完成Master节点配置指定master节点IP,那么执行./sbin/start-slaves.sh时则无法注册master节点的IP,这样集群计算资源则无法使用。除了配置spark-env.sh指定master节点IP外,还可以通过下面方式指定注册的master节点IP,
$./sbin/start-slave.sh 10.110.113.132
然后分别在master节点和slave节点执行下面命令会看到分别多出一个Master进程和Worker进程。
Spark在线使用:
下面就以一个简单的示例,讲解一下HDFS+Spark的使用方法。
上传数据到HDFS
新建一个hello_world.txt的本地文件,并在文件中添加3行hello world,然后上传至HDFS,
$cd/usr/local/hadoop/
$./bin/hdfs dfs-mkdir-p/usr/hadoop
$touch hello_world.txt
$echo-e"hello world\nhello world\nhello world">>hello_world.txt
$./bin/hdfs dfs-put./hello_world.txt/usr/hadoop
编写Spark程序
新建一个spark.py的Python文件,
$vim spark.py
添加如下内容,
from pyspark import SparkConf
from pyspark import SparkContext
conf=SparkConf().setAppName("FirstProject").setMaster("local[*]")
sc=SparkContext.getOrCreate(conf)
rdd=sc.textFile("hdfs:///master:9000/usr/hadoop/hello_world.txt")
rdd.map(lambda line:line).foreach(print)
然后运行程序,
$python spark.py
hello world
hello world
hello world
关于Spark在线使用及集群配置过程,以上就是一个简单的介绍了。在Spark和Hadoop的集成当中,涉及到很多细节方面的调整,这一点大家可以进行实操巩固,多练习,对于后续的学习和掌握也是很有好处的。成都加米谷大数据,专业
大数据培训机构,大数据开发2020春季班正在招生中,详情可联系客服了解!