马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
spark根本入门
- 情况搭建
- spark code
- spark core
- spark sql
- spark streaming
情况搭建
准备工作
创建安装目次
- mkdir /opt/soft
- cd /opt/soft
复制代码 下载scala
- wget https://downloads.lightbend.com/scala/2.13.14/scala-2.13.14.tgz -P /opt/soft
复制代码 解压scala
- tar -zxvf scala-2.13.14.tgz
复制代码 修改scala目次名称
下载spark
- wget https://dlcdn.apache.org/spark/spark-3.5.1/spark-3.5.1-bin-hadoop3-scala2.13.tgz -P /opt/soft
复制代码 解压spark
- tar -zxvf spark-3.5.1-bin-hadoop3-scala2.13.tgz
复制代码 修改目次名称
- mv spark-3.5.1-bin-hadoop3-scala2.13 spark-3
复制代码 修改情况遍历
- vim /etc/profile.d/my_env.sh
复制代码- export JAVA_HOME=/opt/soft/jdk-8
- export ZOOKEEPER_HOME=/opt/soft/zookeeper-3
- export HDFS_NAMENODE_USER=root
- export HDFS_SECONDARYNAMENODE_USER=root
- export HDFS_DATANODE_USER=root
- export HDFS_ZKFC_USER=root
- export HDFS_JOURNALNODE_USER=root
- export HADOOP_SHELL_EXECNAME=root
- export YARN_RESOURCEMANAGER_USER=root
- export YARN_NODEMANAGER_USER=root
- export HADOOP_HOME=/opt/soft/hadoop-3
- export HADOOP_INSTALL=$HADOOP_HOME
- export HADOOP_MAPRED_HOME=$HADOOP_HOME
- export HADOOP_COMMON_HOME=$HADOOP_HOME
- export HADOOP_HDFS_HOME=$HADOOP_HOME
- export YARN_HOME=$HADOOP_HOME
- export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
- export HBASE_HOME=/opt/soft/hbase-2
- export PHOENIX_HOME=/opt/soft/phoenix
- export HIVE_HOME=/opt/soft/hive-3
- export HCATALOG_HOME=/opt/soft/hive-3/hcatalog
- export HCAT_HOME=/opt/soft/hive-3/hcatalog
- export SQOOP_HOME=/opt/soft/sqoop-1
- export FLUME_HOME=/opt/soft/flume
- export SCALA_HOME=/opt/soft/scala-2
- export SPARK_HOME=/opt/soft/spark-3
- export SPARKPYTHON=/opt/soft/spark-3/python
- export PATH=$PATH:$JAVA_HOME/bin:$ZOOKEEPER_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HBASE_HOME/bin:$PHOENIX_HOME/bin:$HIVE_HOME/bin:$HCATALOG_HOME/bin:$HCATALOG_HOME/sbin:$HCAT_HOME/bin:$SQOOP_HOME/bin:$FLUME_HOME/bin:$SCALA_HOME/bin:$SPARK_HOME/bin:$SPARK_HOME/sbin:$SPARKPYTHON
复制代码 Local模式
scala java
启动
页面所在:http://spark01:4040
退出
pyspark
启动
页面所在:http://spark01:4040
退出
当地模式提交应用
在spark目次下实行
- bin/spark-submit \
- --class org.apache.spark.examples.SparkPi \
- --master local[4] \
- ./examples/jars/spark-examples_2.13-3.5.0.jar \
- 10
复制代码
- –class表现要实行步调的主类,此处可以更换为咱们自己写的应用步调
- –master local[2] 摆设模式,默以为当地模式,数字表现分配的假造CPU核数量
- spark-examples_2.13-3.5.0.jar 运行的应用类所在的jar包,现实利用时,可以设定为咱们自己打的jar包
- 数字10表现步调的入口参数,用于设定当前应用的任务数量
Standalone模式
编写核心设置文件
cont目次下
- cd /opt/soft/spark-3/conf
复制代码- cp spark-env.sh.template spark-env.sh
复制代码- export JAVA_HOME=/opt/soft/jdk-8
- export HADOOP_HOME=/opt/soft/hadoop-3
- export HADOOP_CONF_DIR=/opt/soft/hadoop-3/etc/hadoop
- export JAVA_LIBRAY_PATH=/opt/soft/hadoop-3/lib/native
- export SPARK_DIST_CLASSPATH=$(/opt/soft/hadoop-3/bin/hadoop classpath)
- export SPARK_MASTER_HOST=spark01
- export SPARK_MASTER_PORT=7077
- export SPARK_WORKER_MEMORY=4g
- export SPARK_WORKER_CORES=4
- export SPARK_MASTER_WEBUI_PORT=6633
复制代码 编辑slaves
- cp workers.template workers
复制代码 设置汗青日志
- cp spark-defaults.conf.template spark-defaults.conf
复制代码- spark.eventLog.enabled true
- spark.eventLog.dir hdfs://lihaozhe/spark-log
复制代码- hdfs dfs -mkdir /spark-log
复制代码- export SPARK_HISTORY_OPTS="
- -Dspark.history.ui.port=18080
- -Dspark.history.retainedApplications=30
- -Dspark.history.fs.logDirectory=hdfs://lihaozhe/spark-log"
复制代码 修改启动文件名称
- mv sbin/start-all.sh sbin/start-spark.sh
- mv sbin/stop-all.sh sbin/stop-spark.sh
复制代码 分发搭配其他节点
- scp -r /opt/soft/spark-3 root@spark02:/opt/soft
- scp -r /opt/soft/spark-3 root@spark03:/opt/soft
复制代码- scp /etc/profile.d/my_env.sh root@spark02:/etc/profile.d
- scp /etc/profile.d/my_env.sh root@spark03:/etc/profile.d
复制代码 在别的节点革新情况遍历
启动
- start-spark.sh
- start-history-server.sh
复制代码 webui
http://spark01:6633
http://spark01:18080
提交作业到集群
- spark-submit \
- --class org.apache.spark.examples.SparkPi \
- --master spark://spark01:7077 \
- ./examples/jars/spark-examples_2.13-3.5.0.jar \
- 10
复制代码 提交作业到Yarn
- spark-submit \
- --master yarn \
- --class org.apache.spark.examples.SparkPi \
- ./examples/jars/spark-examples_2.13-3.5.0.jar \
- 10
复制代码 HA模式
编写核心设置文件
cont目次下
- cd /opt/soft/spark-3/conf
复制代码- cp spark-env.sh.template spark-env.sh
复制代码- export JAVA_HOME=/opt/soft/jdk-8
- export HADOOP_HOME=/opt/soft/hadoop-3
- export HADOOP_CONF_DIR=/opt/soft/hadoop-3/etc/hadoop
- export JAVA_LIBRAY_PATH=/opt/soft/hadoop-3/lib/native
- export SPARK_DIST_CLASSPATH=$(/opt/soft/hadoop-3/bin/hadoop classpath)
- SPARK_DAEMON_JAVA_OPTS="
- -Dspark.deploy.recoveryMode=ZOOKEEPER
- -Dspark.deploy.zookeeper.url=spark01:2181,spark02:2181,spark03:2181
- -Dspark.deploy.zookeeper.dir=/spark"
- export SPARK_WORKER_MEMORY=8g
- export SPARK_WORKER_CORES=8
- export SPARK_MASTER_WEBUI_PORT=6633
复制代码 编辑slaves
- cp workers.template workers
复制代码 设置汗青日志
- cp spark-defaults.conf.template spark-defaults.conf
复制代码- spark.eventLog.enabled true
- spark.eventLog.dir hdfs://lihaozhe/spark-log
复制代码- hdfs dfs -mkdir /spark-log
复制代码- export SPARK_HISTORY_OPTS="
- -Dspark.history.ui.port=18080
- -Dspark.history.retainedApplications=30
- -Dspark.history.fs.logDirectory=hdfs://lihaozhe/spark-log"
复制代码 修改启动文件名称
- mv sbin/start-all.sh sbin/start-spark.sh
- mv sbin/stop-all.sh sbin/stop-spark.sh
复制代码 分发搭配其他节点
- scp -r /opt/soft/spark-3 root@spark02:/opt/soft
- scp -r /opt/soft/spark-3 root@spark03:/opt/soft
复制代码- scp /etc/profile.d/my_env.sh root@spark02:/etc/profile.d
- scp /etc/profile.d/my_env.sh root@spark03:/etc/profile.d
复制代码 在别的节点革新情况遍历
启动
- start-spark.sh
- start-history-server.sh
复制代码 webui
http://spark01:6633
http://spark01:18080
提交作业到集群
- spark-submit \
- --class org.apache.spark.examples.SparkPi \
- --master spark://spark01:7077 \
- ./examples/jars/spark-examples_2.13-3.5.0.jar \
- 10
复制代码 提交作业到Yarn
- spark-submit --master yarn \
- --class org.apache.spark.examples.SparkPi \
- ./examples/jars/spark-examples_2.13-3.5.0.jar 10
复制代码 spark-code
pom.xml
hdfs-conf
在 resources 目次下存放 hdfs 核心设置文件 core-site.xml 和hdfs-site.xml
被引入的hdfs设置文件为测试集群设置文件
由于生产情况与测试情况差异,项目打包的时间清除hdfs设置文件
rdd
雷同点:
都是分布式数据集
DataFrame底层是RDD,但是DataSet不是,不外他们末了都是转换成RDD运行
DataSet和DataFrame的雷同点都是有数据特性、数据范例的分布式数据集(schema)
差异点:
schema信息:
RDD中的数据是没有数据范例的
DataFrame中的数据是弱数据范例,不会做数据范例查抄
固然有schema规定了数据范例,但是编译时是不会报错的,运行时才会报错
DataSet中的数据范例是强数据范例
序列化机制:
RDD和DataFrame默认的序列化机制是java的序列化,可以修改为Kyro的机制
DataSet利用自界说的数据编码器举行序列化和反序列化
数据集方式构建RDD
- package cn.lihaozhe.chap01;
- import org.apache.spark.SparkConf;
- import org.apache.spark.api.java.JavaRDD;
- import org.apache.spark.api.java.JavaSparkContext;
- import java.util.Arrays;
- import java.util.List;
- /**
- * 数据集构建RDD
- * RDD代表弹性分布式数据集。它是记录的只读分区集合。 RDD是Spark的基本数据结构。它允许程序员以容错方式在大型集群上执行内存计算。
- *
- * @author 李昊哲
- * @version 1.0
- */
- public class JavaDemo01 {
-
-
- public static void main(String[] args) {
-
-
- // SparkConf conf = new SparkConf().setAppName("RDD").setMaster("local");
- // spark基础配置
- SparkConf conf = new SparkConf().setAppName("RDD");
- // 本地运行
- conf.setMaster("local");
- try (JavaSparkContext sparkContext = new JavaSparkContext(conf)) {
-
-
- // 数据集
- List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
- // 从集合中创建 RDD
- JavaRDD<Integer> javaRDD = sparkContext.parallelize(list);
- // 将 spark RDD 转为 java 对象
- List<Integer> collect = javaRDD.collect();
- // lambda 表达式
- collect.forEach(System.out::println);
- }
- }
- }
复制代码- package cn.lihaozhe.chap01
- import org.apache.spark.{
-
- SparkConf, SparkContext}
- /**
- * 数据集构建RDD
- * RDD代表弹性分布式数据集。它是记录的只读分区集合。 RDD是Spark的基本数据结构。它允许程序员以容错方式在大型集群上执行内存计算。
- *
- * @author 李昊哲
- * @version 1.0
- */
- object ScalaDemo01 {
-
-
- def main(args: Array[String]): Unit = {
-
-
- // val conf = new SparkConf().setAppName("RDD").setMaster("local")
- // spark基础配置
- val conf = new SparkConf().setAppName("RDD")
- // 本地运行
- conf.setMaster("local")
- val sparkContext = new SparkContext(conf)
- // 数据集
- val data = Array(1, 2, 3, 4, 5)
- // 从集合中创建 RDD
- // ParallelCollectionRDD
- val rdd = sparkContext.parallelize(data)
- rdd.foreach(println(_))
- }
- }
复制代码 当地文件构建RDD
words.txt
- linux shell
- java mysql jdbc
- hadoop hdfs mapreduce
- hive presto
- flume kafka
- hbase phoenix
- scala spark
- sqoop flink
- linux shell
- java mysql jdbc
- hadoop hdfs mapreduce
- hive presto
- flume kafka
- hbase phoenix
- scala spark
- sqoop flink
- base phoenix
- scala spark
- sqoop flink
- linux shell
- java mysql jdbc
- hadoop hdfs mapreduce
- java mysql jdbc
- hadoop hdfs mapreduce
- hive presto
- flume kafka
- hbase phoenix
- scala spark
- java mysql jdbc
- hadoop hdfs mapreduce
- java mysql jdbc
- hadoop hdfs mapreduce
- hive presto
复制代码- package cn.lihaozhe.chap01;
- import org.apache.spark.SparkConf;
- import org.apache.spark.api.java.JavaRDD;
- import org.apache.spark.api.java.JavaSparkContext;
- import java.util.List;
- /**
- * 借助外部文件 External Datasets 构建 RDD
- *
- * @author 李昊哲
- * @version 1.0
- */
- public class JavaDemo02 {
-
-
- public static void main(String[] args) {
-
-
- // SparkConf conf = new SparkConf().setAppName("RDD").setMaster("local");
- // spark基础配置
- SparkConf conf = new SparkConf().setAppName("RDD");
- // 本地运行
- conf.setMaster("local");
- try (JavaSparkContext sparkContext = new JavaSparkContext(conf)) {
-
-
- // 使用本地文件系统构建数据集
- JavaRDD<String> javaRDD = sparkContext.textFile("file:///D:/work/河南师范大学/2023/bigdata2023/spark/code/spark-code/word.txt");
- // 将 spark RDD 转为 java 对象
- List<String> collect = javaRDD.collect();
- // lambda 表达式
- collect.forEach(System.out::println);
- }
- }
- }
复制代码- package cn.lihaozhe.chap01
- import org.apache.spark.{
-
- SparkConf, SparkContext}
- /**
- * 借助外部文件 External Datasets 构建 RDD
- *
- * @author 李昊哲
- * @version 1.0
- */
- object ScalaDemo02 {
-
-
-
复制代码 |