1.Spark下载
https://archive.apache.org/dist/spark/
2.上传解压,配置环境变量 配置bin目录
解压:tar -zxvf spark-2.4.5-bin-hadoop2.7.tgz -C /usr/local/soft/
改名:mv spark-2.4.5-bin-hadoop2.7/ spark-2.4.5
配置环境变量:vim /etc/profile
添加环境变量:
export SPARK_HOME=/usr/local/soft/spark-2.4.5
export PATH=$PATH:$SPARK_HOME/bin
保存配置:source /etc/profile
3.修改配置文件 conf
修改spark-env.sh: cp spark-env.sh.template spark-env.sh
增加配置:
export SPARK_MASTER_IP=master
export SPARK_MASTER_PORT=7077
export SPARK_WORKER_CORES=2
export SPARK_WORKER_INSTANCES=1
export SPARK_WORKER_MEMORY=2g
export JAVA_HOME=/usr/local/soft/jdk1.8.0_171
修改:cp slaves.template slaves
增加:
node1
node2
4.发放到其他节点
xsync spark-2.4.5
(xsync是自己写的脚本,在安装Hadoop的时候写过)
4、在主节点执行启动命令
启动集群,在master中执行
./sbin/start-all.sh
http://master:8080/ 访问spark ui
5.检验安装的Spark
1. standalone client模式 日志在本地输出,一班用于上线前测试(bin/下执行)
需要进入到spark-examples_2.11-2.4.5.jar 包所在的目录下执行
cd /usr/local/soft/spark-2.4.5/examples/jars
spark-submit --class org.apache.spark.examples.SparkPi --master spark://master:7077 --executor-memory 512m --total-executor-cores 1 spark-examples_2.11-2.4.5.jar 100
2. standalone cluster模式 上线使用,不会再本地打印日志
spark-submit --class org.apache.spark.examples.SparkPi --master spark://master:7077 --driver-memory 512m --deploy-mode cluster --supervise --executor-memory 512M --total-executor-cores 1 spark-examples_2.11-2.4.5.jar 100
spark-shell spark 提供的一个交互式的命令行,可以直接写代码
spark-shell master spark://master:7077
6.整合yarn
在公司一般不适用standalone模式,因为公司一般已经有yarn 不需要搞两个资源管理框架
停止spark集群
在spark sbin目录下执行 ./stop-all.sh
spark整合yarn只需要在一个节点整合, 可以删除node1 和node2中所有的spark 文件
1、增加hadoop 配置文件地址
vim spark-env.sh
增加
export HADOOP_CONF_DIR=/usr/local/soft/hadoop-2.7.6/etc/hadoop
2、往yarn提交任务需要增加两个配置 yarn-site.xml(/usr/local/soft/hadoop-2.7.6/etc/hadoop/yarn-site.xml)
先关闭yarn
stop-yarn.sh
4、同步到其他节点,重启yarn
scp -r yarn-site.xml node1:`pwd`
scp -r yarn-site.xml node2:`pwd`
启动yarn
start-yarn.sh
cd /usr/local/soft/spark-2.4.5/examples/jars
3.spark on yarn client模式 日志在本地输出,一班用于上线前测试
spark-submit --class org.apache.spark.examples.SparkPi --master yarn-client --executor-memory 512M --num-executors 2 spark-examples_2.11-2.4.5.jar 100
4.spark on yarn cluster模式 上线使用,不会再本地打印日志 减少io
spark-submit --class org.apache.spark.examples.SparkPi --master yarn-cluster --executor-memory 512m --num-executors 2 --executor-cores 1 spark-examples_2.11-2.4.5.jar 100
获取yarn程序执行日志 执行成功之后才能获取到
yarn logs -applicationId application_1560967444524_0003
hdfs webui
http://node1:50070
yarn ui
http://node1:8088
在idea中使用spark做wordCount
import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} object Demo1WordCount { def main(args: Array[String]): Unit = { // Spark配置文件对象 val conf: SparkConf = new SparkConf() // 设置Spark程序的名字 conf.setAppName("Demo1WordCount") // 设置运行模式为local模式 即在idea本地运行 conf.setMaster("local") // Spark的上下文环境,相当于Spark的入口 val sc: SparkContext = new SparkContext(conf) // 词频统计 // 1、读取文件 /** * RDD : 弹性分布式数据集(可以先当成scala中的集合去使用) */ val linesRDD: RDD[String] = sc.textFile("spark/data/words") // 2、将每一行的单词切分出来 // flatMap: 在Spark中称为 算子 // 算子一般情况下都会返回另外一个新的RDD val wordsRDD: RDD[String] = linesRDD.flatMap(line => line.split(",")) // 3、按照单词分组 val groupRDD: RDD[(String, Iterable[String])] = wordsRDD.groupBy(word => word) // 4、统计每个单词的数量 val countRDD: RDD[String] = groupRDD.map(kv => { val word: String = kv._1 val words: Iterable[String] = kv._2 // words.size直接获取迭代器的大小 // 因为相同分组的所有的单词都会到迭代器中 // 所以迭代器的大小就是单词的数量 word + "," + words.size }) // 5、将结果进行保存 countRDD.saveAsTextFile("spark/data/wordCount") } }