文章目录
Spark 2.4.7
1. 简介
Apache Spark是用于大规模数据处理的统一分析引擎。它提供Java,Scala,Python和R中的高级API,以及支持常规执行图的优化引擎。它还支持一组丰富的更高级别的工具,包括Spark SQL用于SQL和结构化数据的处理,MLlib机器学习,GraphX用于图形处理,以及Structured Streaming的增量计算和流处理。
2. 安装
Spark 安装包类型可选是否包含Hadoop,包含的话则包括Hadoop相关依赖,可以直接添加hive-site.xml配置后,访问hive,否则需要自己在打包。这里选择包含Hadoop的。
2.1 Local模式
配置环境变量,修改 ~/.bashrc 文件,该文件中环境变量只对hadoop用户有效
export SPARK_HOME=/home/hadoop/softwares/spark/spark-2.4.7
PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
让环境变量立即生效
source ~/.bashrc
复制conf/spark-env.sh
cp ./conf/spark-env.sh.template ./conf/spark-env.sh
修改conf/spark-env.sh
export SPARK_DIST_CLASSPATH=$(/home/hadoop/softwares/hadoop/hadoop-2.7.2/bin/hadoop classpath)
测试
配置完成后就可以直接使用,通过运行Spark自带的示例,验证Spark是否安装成功。
计算Pi
./bin/run-example SparkPi
运行交互式Spark Shell
./bin/spark-shell
加载文件,进行简单RDD操作
val textFile = sc.textFile("file:///home/hadoop/softwares/spark/spark-2.4.7/README.md")
// 获取RDD文件textFile的第一行内容
textFile.first()
// 获取RDD文件textFile所有项的计数
textFile.count()
// 抽取含有“Spark”的行,返回一个新的RDD
val lineWithSpark = textFile.filter(line => line.contains("Spark"))
// 统计新的RDD的行数
lineWithSpark.count()
// 找出文本中每行的最多单词数
textFile.map(line => line.split(" ").size).reduce((a, b) => if (a > b) a else b)
输入:quit
退出
2.2 集群模式
2.2.1 独立模式
独立模式可以在集群的每个节点上放置Spark的安装目录,然后通过启动master,让worker连接master,也可以指定salve文件,来实现集群。
2.2.1.1 方式1:直接连接master
启动master
./sbin/start-master.sh -h 192.168.110.40 --webui-port 18080
可以启动一个或多个worker,并通过以下方式将其连接到master
./sbin/start-slave.sh spark://192.168.110.40:7077
可在 conf/spark-env.sh 中指定端口等配置
export SPARK_MASTER_WEBUI_PORT=18080
export SPARK_WORKER_WEBUI_PORT=18081
针对集群运行交互式Spark Shell
./bin/spark-shell --master spark://192.168.110.40:7077
2.2.1.2 方式2:创建slaves文件
安装 Hadoop多节点集群
集群规划
192.168.110.40 hadoop-master
192.168.110.41 hadoop-slave1
192.168.110.42 hadoop-slave2
Spark文件目录根据上面Local模式进行修改,删除上面测试产生的work和logs文件夹。
配置slaves文件,设置worker节点
cp ./conf/slaves.template ./conf/slaves
删除slaves文件中其他内容,添加
hadoop-slave1
hadoop-slave2
修改conf/spark-env.sh
export JAVA_HOME=/usr/local/softwares/java/jdk1.8.0_161
export SPARK_DIST_CLASSPATH=$(/home/hadoop/softwares/hadoop/hadoop-2.7.2/bin/hadoop classpath)
export SPARK_MASTER_HOST=192.168.110.40
export SPARK_MASTER_WEBUI_PORT=18080
分发Spark文件目录
新建文件夹
mkdir -p /home/hadoop/softwares/spark
在hadoop-master分发到hadoop-slave1,hadoop-slave2。
scp -r /home/hadoop/softwares/spark/spark-2.4.7/ hadoop-slave1:/home/hadoop/softwares/spark/spark-2.4.7/
scp -r /home/hadoop/softwares/spark/spark-2.4.7/ hadoop-slave2:/home/hadoop/softwares/spark/spark-2.4.7/
hadoop-slave1,hadoop-slave2完成spark环境变量的配置。
在hadoop-master运行
启动master
./sbin/start-master.sh
启动worker
./sbin/start-slaves.sh
针对集群运行交互式Spark Shell
./bin/spark-shell --master spark://192.168.110.40:7077
2.2.2 在Yarn上启动Spark
在独立模式的方式2上进行修改,三个节点都修改conf/spark-env.sh
export HADOOP_CONF_DIR=/home/hadoop/softwares/hadoop/hadoop-3.1.2/etc/Hadoop
启动后,使用client模式
./bin/spark-submit \
--master yarn \
--deploy-mode client \
--class org.apache.spark.examples.SparkPi ./examples/jars/spark-examples_2.11-2.4.7.jar 10
cluster模式
./bin/spark-submit \
--master yarn \
--deploy-mode cluster \
--class org.apache.spark.examples.SparkPi ./examples/jars/spark-examples_2.11-2.4.7.jar 10
client模式常用于本地测试,而cluster模式常用于生成环境。
3. 集成 Hive
将 hive-site.xml 复制到 Spark 的 conf 目录,将 MySQL 的驱动添加到 Spark 的 jars 目录。
启动 spark-shell 测试
参考:
Spark 官方文档
Spark安装和编程实践(Spark2.4.0)
Spark 2.0分布式集群环境搭建
Spark On YARN中client和cluster的区别