• spark-08-SparkStraming简介与kafka0.8集群安装


    
    

    kafka0.8.2的安装

    ####################################################

    实时计算相关技术
    Strom / JStrom Spark Streming Flink
    实时性高 有延迟 实时性高
    吞吐量较低 吞吐量高 吞吐量高
    只能实时计算 离线+实时 离线+实时
    算子比较少 算子丰富 算子丰富
    没有 机器学习 没有
    没有 图计算 没有
    使用比较少 非常火 一般

    一个完整的生态是非常重要的,spark生态特别完善

    http://chant00.com/2017/07/28/Spark%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/

    ---------------------------------------------------------

    Kafka的一些概念
    Broker : 安装Kafka服务的那台集群就是一个broker(broker的id要全局唯一)
    Producer :消息的生产者,负责将数据写入到broker中(push)
    Consumer:消息的消费者,负责从kafka中读取数据(pull),老版本的消费者需要依赖zk,新版本的不需要
    Topic: 主题,相当于是数据的一个分类,不同topic存放不同的数据
    Consumer Group: 消费者组,一个topic可以有多个消费者同时消费,多个消费者如果在一个消费者组中,那么他们不能重复消费数据

    Spark Streaming 2.2.0兼容kafka 0.8.2.1以上的版本,主要支持0.8和0.10这两个版本

    ---------------------------------------------------------
    kafka集群安装
    1.下载Kafka安装包
    2.上传安装包
    3.解压
    4.修改配置文件 config/server.properties
    broker.id=0
    host.name=node-4
    log.dirs=/data/kafka
    zookeeper.connect=node-1:2181,node-2:2181,node-3:2181
    5.将配置好的kafka拷贝到其他机器上
    6.修改broker.id和host.name
    7.启动kafka
    /bigdata/kafka_2.11-0.8.2.2/bin/kafka-server-start.sh -daemon /bigdata/kafka_2.11-0.8.2.2/config/server.properties


    #查看topic信息
    /bigdata/kafka_2.11-0.8.2.2/bin/kafka-topics.sh --list --zookeeper node-1:2181,node-2:2181

    #创建topic
    /bigdata/kafka_2.11-0.8.2.2/bin/kafka-topics.sh --create --zookeeper node-1:2181,node-2:2181 --replication-factor 3 --partitions 3 --topic xiaoniu

    #往Kafka的topic中写入数据(命令行的生成者)
    /bigdata/kafka_2.11-0.8.2.2/bin/kafka-console-producer.sh --broker-list node-4:9092,node-5:9092,node-5:9092 --topic xiaoniu

    #启动消费者
    /bigdata/kafka_2.11-0.8.2.2/bin/kafka-console-consumer.sh --zookeeper node-1:2181,node-2:2181 --topic xiaoniu --from-beginning

    kafka0.10安装及命令

    ##############################################################

    kafka集群部署

    broker.id=1
    delete.topic.enable=true
    log.dirs=/bigdata/kafka_2.11-0.10.2.1/data
    zookeeper.connect=node-1:2181,node-2:2181,node-3:2181

    启动kafka
    /bigdata/kafka_2.11-0.10.2.1/bin/kafka-server-start.sh -daemon /bigdata/kafka_2.11-0.10.2.1/config/server.properties

    停止kafka
    /bigdata/kafka_2.11-0.10.2.1/bin/kafka-server-stop.sh


    创建topic
    /bigdata/kafka_2.11-0.10.2.1/bin/kafka-topics.sh --create --zookeeper node-1:2181,node-2:2181,node-3:2181 --replication-factor 3 --partitions 3 --topic my-topic


    列出所有topic
    /bigdata/kafka_2.11-0.10.2.1/bin/kafka-topics.sh --list --zookeeper node-1:2181,node-2:2181,node-3:2181

    查看某个topic信息
    /bigdata/kafka_2.11-0.10.2.1/bin/kafka-topics.sh --describe --zookeeper node-1:2181,node-2:2181,node-3:2181 --topic my-topic

    启动一个命令行的生产者
    /bigdata/kafka_2.11-0.10.2.1/bin/kafka-console-producer.sh --broker-list node-1:9092,node-1.xiaoniu.xom:9092,node-3:9092 --topic xiaoniu

    启动一个命令行的消费者
    /bigdata/kafka_2.11-0.10.2.1/bin/kafka-console-consumer.sh --zookeeper node-1:2181,node-2:2181,node-3:2181 --topic my-topic --from-beginning

    # 消费者连接到borker的地址
    /bigdata/kafka_2.11-0.10.2.1/bin/kafka-console-consumer.sh --bootstrap-server node-1:9092,node-2:9092,node-3:9092 --topic xiaoniu --from-beginning


    Kafka Connect:
    https://kafka.apache.org/documentation/#connect
    http://docs.confluent.io/2.0.0/connect/connect-jdbc/docs/index.html

    Kafka Stream:
    https://kafka.apache.org/documentation/streams
    https://spark.apache.org/docs/1.6.1/streaming-kafka-integration.html

    kafka monitor:
    https://kafka.apache.org/documentation/#monitoring
    https://github.com/quantifind/KafkaOffsetMonitor
    https://github.com/yahoo/kafka-manager

    kafka生态圈:
    https://cwiki.apache.org/confluence/display/KAFKA/Ecosystem

    记录

    ######################################################

    SparkSQL是Spark上的高级模块,SparkSQL是一个SQL解析引擎,将SQL解析成特殊的RDD(DataFrame),然后在Spark集群中运行

    SparkSQL是用来处理结构化数据的(先将非结构化的数据转换成结构化数据)

    SparkSQL支持两种编程API
    1.SQL方式
    2.DataFrame的方式(DSL)

    SparkSQL兼容hive(元数据库、SQL语法、UDF、序列化、反序列化机制)

    SparkSQL支持统一的数据源,课程读取多种类型的数据

    SparkSQL提供了标准的连接(JDBC、ODBC),以后可以对接一下BI工具

    ------------------------------------------------------------

    RDD和DataFrame的区别

    DataFrame里面存放的结构化数据的描述信息,DataFrame要有表头(表的描述信息),描述了有多少列,每一列数叫什么名字、什么类型、能不能为空?

    DataFrame是特殊的RDD(RDD+Schema信息就变成了DataFrame)


    ------------------------------------------------------------
    SparkSQL的第一个入门程序

    首先在pom中添加sparkSQL的依赖

    <!-- 导入spark sql的依赖 -->
    <dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-sql_2.11</artifactId>
    <version>${spark.version}</version>
    </dependency>

    SparkSQL 1.x和2.x的编程API有一些变化,企业中都有使用,所以两种方式都将

    先用1.x的方式:
    SQL方式
    创建一个SQLContext
    1.创建sparkContext,然后再创建SQLContext
    2.先创建RDD,对数据进行整理,然后关联case class,将非结构化数据转换成结构化数据
    3.显示的调用toDF方法将RDD转换成DataFrame
    4.注册临时表
    5.执行SQL(Transformation,lazy)
    6.执行Action
    ----
    1.创建sparkContext,然后再创建SQLContext
    2.先创建RDD,对数据进行整理,然后关联Row,将非结构化数据转换成结构化数据
    3.定义schema
    4.调用sqlContext的createDataFrame方法
    5.注册临时表
    6.执行SQL(Transformation,lazy)
    7.执行Action
    DSL(DatFrame API)

    先用2.x的方式:
    创建一个SparkSession
    val spark = SparkSession.builder()
    .appName("DataSetWordCount")
    .master("local[*]")
    .getOrCreate()


    ----------------------------------------------------

    UDF (user defined function)
    UDF 输入一行,返回一个结果 一对一 ip2Province(123123111) -> 辽宁省
    UDTF 输入一行,返回多行(hive)一对多 spark SQL中没有UDTF,spark中用flatMap即可实现该功能
    UDAF 输入多行,返回一行 aggregate(聚合) count、sum这些是sparkSQL自带的聚合函数,但是复杂的业务,要自己定义

    ----------------------------------------------------

    Dateset是spark1.6以后推出的新的API,也是一个分布式数据集,于RDD相比,保存了跟多的描述信息,概念上等同于关系型数据库中的二维表,基于保存了跟多的描述信息,spark在运行时可以被优化。

    Dateset里面对应的的数据是强类型的,并且可以使用功能更加丰富的lambda表达式,弥补了函数式编程的一些缺点,使用起来更方便

    在scala中,DataFrame其实就是Dateset[Row]

    Dataset的特点:
    1.一系列分区
    2.每个切片上会有对应的函数
    3.依赖关系
    4.kv类型shuffle也会有分区器
    5.如果读取hdfs中的数据会感知最优位置
    6.会优化执行计划
    7.支持更加智能的数据源


    调用Dataset的方法先会生成逻辑计划,然后被spark的优化器进行优化,最终生成物理计划,然后提交到集群中运行!

    ----------------------------------------------------

    Hive On Spark (跟hive没太的关系,就是使用了hive的标准(HQL, 元数据库、UDF、序列化、反序列化机制))

    在公司中使用hive还是非常多的

    Hive原来的计算模型是MR,有点慢(将中间结果写入到HDFS中)


    Hive On Spark 使用RDD(DataFrame),然后运行在spark 集群上


    真正要计算的数据是保存在HDFS中,mysql这个元数据库,保存的是hive表的描述信息,描述了有哪些database、table、以及表有多少列,每一列是什么类型,还要描述表的数据保存在hdfs的什么位置?

    hive跟mysql的区别?

    hive是一个数据仓库(存储数据并分析数据,分析数据仓库中的数据量很大,一般要分析很长的时间)
    mysql是一个关系型数据库(关系型数据的增删改查(低延迟))


    hive的元数据库中保存怎知要计算的数据吗?
    不保存,保存hive仓库的表、字段、等描述信息

    真正要计算的数据保存在哪里了?
    保存在HDFS中了


    hive的元数据库的功能
    建立了一种映射关系,执行HQL时,先到MySQL元数据库中查找描述信息,然后根据描述信息生成任务,然后将任务下发到spark集群中执行

    #spark sql 整合hive,将hive的sql写在一个文件中执行(用-f这个参数)
    /bigdata/spark-2.2.0-bin-hadoop2.7/bin/spark-sql --master spark://node-4:7077,node-5:7077 --driver-class-path /home/xiaoniu/mysql-connector-java-5.1.7-bin.jar -f hive-sqls.sql

    在idea中开发,整合hive
    <!-- spark如果想整合Hive,必须加入hive的支持 -->
    <dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-hive_2.11</artifactId>
    <version>2.2.0</version>
    </dependency>

    //如果想让hive运行在spark上,一定要开启spark对hive的支持
    val spark = SparkSession.builder()
    .appName("HiveOnSpark")
    .master("local[*]")
    .enableHiveSupport()//启用spark对hive的支持(可以兼容hive的语法了)
    .getOrCreate()

  • 相关阅读:
    js事件循环机制event-loop
    javascript编译与执行
    css中rem,em,px的区别和使用场景
    float
    flex布局
    azoux's blog
    1004 成绩排名 PAT Basic Level
    1003 我要通过! PTA Basic Level
    腾讯云防盗链测试
    简单多项式求解
  • 原文地址:https://www.cnblogs.com/cerofang/p/11106083.html
Copyright © 2020-2023  润新知