Spark学习之路

Spark各组件功能简单理解(quick start)

2018-08-18  本文已影响4人  祗談風月

各个组件

资源调度

根据spark的部署方式的不同,会有不同的组件执行资源调度(资源主要指cpu,memory)

任务调度

Spark应用提交后经历了一系列的转换,最后成为Task在每个节点上执行。

  1. RDD的Action算子触发Job的提交
  2. 提交到Spark中的Job生成RDD DAG
  3. 由DAGScheduler转化为Stage DAG
  4. 每个Stage中产生相应的Task集合
  5. TaskScheduler将任务分发到Executor执行
  6. 每个任务对应相应的一个数据块,使用用户定义的函数处理数据
    块。

更详细内容 : https://www.2cto.com/net/201712/703266.html

spark 基础操作

spark-streaming 基础操作

spark的流式处理框架

pyspark-streaming demo

from pyspark.sql import SparkSession
from pyspark.streaming import StreamingContext
from pyspark.streaming.kafka import KafkaUtils

def parse_msg(spark, rdd):
    pass

if __name__ == "__main__":

    master = "yarn"
    appName = "AppName"
    kafka_params = {
        "bootstrap.servers": "master:9092",  # metadata.broker.list or bootstrap.servers
        "auto.offset.reset": "smallest"
    }

    topics = ["logger"]
    spark = SparkSession \
        .builder \
        .appName(appName) \
        .getOrCreate()

    # 优先使用sparkSession(spark2.0的方式),这样sparkContext比较容易得到,不用在自定义函数中额外传参
    sc = spark.sparkContext
    ssc = StreamingContext(sc, 10)  # 10s的数据做一次处理

    directKafkaStream = KafkaUtils.createDirectStream(ssc, topics, kafka_params)

    # get message strings from kafka
    lines = directKafkaStream.map(lambda x: x[1])

    # transform可以把DStream转换为rdd进行操作
    logJsonStrRDD = lines.transform(lambda rdd: parse_msg(spark, rdd))

    # pprint必须有,必须有一个输出,否则提示没法注册,报错: java.lang.IllegalArgumentException: requirement failed: No output operations registered, so nothing to execute
       # pprint = pretty print 用更好的格式来打印
    logJsonStrRDD.pprint(5)  

    ssc.start()
    ssc.awaitTermination() 
上一篇下一篇

猜你喜欢

热点阅读