spark 常见"便签"
变量传参:
1,在 spark 编写的程序之中是没有全局变量的,是因为在 driver设置的全局变量,在 execute 可以使用,但是不会返回给driver,除非使用累加器
2,累加器只能在 driver端进行使用,因为它是来自于 sc(只存在于 driver)
package day01 import org.apache.spark.{Accumulator, SparkConf, SparkContext} object Add_num { def main(args: Array[String]): Unit = { val conf = new SparkConf().setMaster("local").setAppName("ADD_NUM") val sc = new SparkContext(conf) val rdd = sc.textFile("./1.txt") val rdd2 = sc.textFile("./1.txt") var num = 0 var accumulator:Accumulator[Int] =sc.accumulator(0) val rdd_1 =rdd.map(line=>{ num += 1 line }) rdd_1.collect() println(num) // num = 0 val rdd2_1 = rdd2.map(line=>{ accumulator.add(1) println(accumulator)// 在 execute 获取不需要使用 value line }) rdd2_1.collect() println(accumulator.value) // 5 accumulator累加器全局统筹变量 }}
spark Dataframe:
1, Dataframe 是一个分布式数据容器,有数据与数据的结构信息组成(schema)
2, Dataframe API 提供一套高层的关系操作,比函数式的 RDD API更加友好
3, Dataframe 底层是 Row RDD, 这也是为什么 Dataframe可以与 RDD相互转换的原因
spark 集群支持log 记录(主从一致)
1,spark 支持事件日志写入某个目录,并且可以日志压缩
2,日志是 application 日志,只不过存储在了 hdsf 之中
# 开启 log ,并且配置 log 路径 spark.eventLog.enabled true spark.eventLog.dir hdfs://master:9000/spark/logs # 配置历史服务器路径(spark 重启也可以看到历史记录) spark.history.fs.logDirectory hdfs://master:9000/spark/logs # 使用此参数指定log压缩(snappy 压缩格式) spark.eventLog.compress true
可以开启一个端口来查看历史服务(spark-defaults.conf),需要指定配置的历史记录所对应的hdfs 位置
export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=7777 -Dspark.history.retainedApplications=3 -Dspark.history.fs.logDirectory=hdfs://master:9000/spark/logs"
启动历史服务器(进程 HistoryServer ), 只有查看历史的作用,对设定的历史路径(hdfs)进行展示
./sbin/start-history-server.sh
spark 集群构建(主从一致)
1,修改Spark配置文件spark-env.sh
#指定 master 地址与 ip 和 JAVA_HOME SPARK_MASTER_PORT=7077 SPARK_MASTER_IP=sr128 export JAVA_HOME=/usr/local/java/jdk-11.0.2
2,slaves文件中加入所有Work的地址
slave1
slave2
slave3