zoukankan      html  css  js  c++  java
  • Spark SQL快速离线数据分析


    1.Spark SQL概述

    1)Spark SQL是Spark核心功能的一部分,是在2014年4月份Spark1.0版本时发布的。

    http://ke.dajiangtai.com/content/6918/1.png

    2)Spark SQL可以直接运行SQL或者HiveQL语句

    http://ke.dajiangtai.com/content/6918/2.png

    3)BI工具通过JDBC连接SparkSQL查询数据

    http://ke.dajiangtai.com/content/6918/3.png

    4)Spark SQL支持Python、Scala、Java和R语言

    http://ke.dajiangtai.com/content/6918/4.png

    5)Spark SQL不仅仅是SQL

    http://ke.dajiangtai.com/content/6918/5.png

    6)Spark SQL远远比SQL要强大

    http://ke.dajiangtai.com/content/6918/6.png

    7)Spark SQL处理数据架构

    http://ke.dajiangtai.com/content/6918/7.png

    8)Spark SQL简介

    Spark SQL is a Spark module for structured data processing

    http://ke.dajiangtai.com/content/6918/8.png

    9)Spark SQL的愿景

    a)Write less code

    对不同的数据类型使用统一的接口来读写。

    http://ke.dajiangtai.com/content/6918/9.png

    b)Read less data

    提升大数据处理速度最有效的方法就是忽略无关的数据。

    (1)使用列式存储(columnar formats),比如Parquet、ORC、RCFile

    (2)使用分区裁剪(partitioningpruning),比如按天分区,按小时分区等

    (3)利用数据文件中附带的统计信息进行剪枝:例如每段数据都带有最大值、最小值和NULL值等统计信息,当某一数据段肯定不包含查询条件的目标数据时,可以直接跳过这段数据。(例如字段age某段最大值为20,但查询条件是>50岁的人时,显然可以直接跳过这段)

    (4)将查询源中的各种信息下推至数据源处,从而充分利用数据源自身的优化能力来完成剪枝、过滤条件下推等优化。

    c)Let the optimizer do the hard work

    Catalyst优化器对SQL语句进行优化,从而得到更有效的执行方案。即使我们在写SQL的时候没有考虑这些优化的细节,Catalyst也可以帮我们做到不错的优化结果。

    http://ke.dajiangtai.com/content/6918/10.png

    2.Spark SQL服务架构

    http://ke.dajiangtai.com/content/6918/11.png

    3.Spark SQL 与Hive集成(spark-shell)

    1)需要配置的项目

    a)将hive的配置文件hive-site.xml拷贝到spark conf目录,同时添加metastore的url配置(对应hive安装节点,我的为3节点)。

    vi hive-site.xml
    <property>
            <name>hive.metastore.uris</name>
            <value>thrift://bigdata-pro03.kfk.com:9083</value>
    </property>

    修改完后再发送给其他节点

    scp hive-site.xml bigdata-pro01.kfk.com:/opt/modules/spark-2.2.0-bin/conf/
    scp hive-site.xml bigdata-pro02.kfk.com:/opt/modules/spark-2.2.0-bin/conf/

    b)拷贝hive中的mysql jar包到spark的jar目录下,再发送给其他节点

    cp hive-0.13.1-bin/lib/mysql-connector-java-5.1.27-bin.jar spark-2.2-bin/jars/
    scp mysql-connector-java-5.1.27.jar bigdata-pro01.kfk.com:/opt/modules/spark-2.2.0-bin/jars/
    scp mysql-connector-java-5.1.27.jar bigdata-pro02.kfk.com:/opt/modules/spark-2.2.0-bin/jars/

    c)检查spark-env.sh 文件中的配置项,没有添加,有则跳过

    vi spark-env.sh
    HADOOP_CONF_DIR=/opt/modules/hadoop-2.6.0/etc/hadoop

    2)启动服务

    a)检查mysql是否启动

    #查看状态
    service mysqld status
    
    #启动
    service mysqld start

    b)启动hive metastore服务

    bin/hive --service metastore

    c)启动hive

    bin/hive
    show databases;
    create database kfk;
    use kfk;
    create table if not exists test(userid string,username string)ROW FORMAT DELIMITED FIELDS TERMINATED BY ' ' STORED AS textfile;
    load data local inpath "/opt/datas/kfk.txt" into table test;

    本地kfk.txt文件

    more /opt/datas/kfk.txt
    0001 spark
    0002 hive
    0003 hbase
    0004 hadoop

    d)启动spark-shell

    bin/spark-shell
    spark.sql("select * from kfk.test").show
    +------+--------+
    |userid|username|
    +------+--------+
    |  0001|   spark|
    |  0002|    hive|
    |  0003|   hbase|
    |  0004|  hadoop|
    +------+--------+

    4.Spark SQL 与Hive集成(spark-sql)

    启动spark-sql

    bin/spark-sql
    
    #查看数据库
    show databases;
    default
    kfk
    
    #使用数据库
    use kfk
    
    #查看表
    show tables;
    test
    
    #查看表数据
    select * from test;

    5.Spark SQL之ThriftServer和beeline使用

    通过使用beeline可以实现启动一个应用给多个用户同时操作,而不必要启动多个应用,这样更加节省资源。

    1)启动ThriftServer

    sbin/start-thriftserver.sh

    2)启动beeline

    [kfk@bigdata-pro02 spark-2.2.0-bin]$ bin/beeline
    Beeline version 1.2.1.spark2 by Apache Hive
    beeline> !connect jdbc:hive2://bigdata-pro02.kfk.com:10000
    Connecting to jdbc:hive2://bigdata-pro02.kfk.com:10000
    Enter username for jdbc:hive2://bigdata-pro02.kfk.com:10000: kfk
    Enter password for jdbc:hive2://bigdata-pro02.kfk.com:10000: ***
    19/04/18 17:56:52 INFO Utils: Supplied authorities: bigdata-pro02.kfk.com:10000
    19/04/18 17:56:52 INFO Utils: Resolved authority: bigdata-pro02.kfk.com:10000
    19/04/18 17:56:52 INFO HiveConnection: Will try to open client transport with JDBC Uri: jdbc:hive2://bigdata-pro02.kfk.com:10000
    Connected to: Spark SQL (version 2.2.0)
    Driver: Hive JDBC (version 1.2.1.spark2)
    Transaction isolation: TRANSACTION_REPEATABLE_READ
    0: jdbc:hive2://bigdata-pro02.kfk.com:10000> 
    
    #查看数据库
    show databases;
    +----------------+--+
    | database_name  |
    +----------------+--+
    | default        |
    | kfk            |
    +----------------+--+
    2 rows selected (0.977 seconds)
    
    #查看表数据
    select * from kfk.test;
    +--------------+----------------+--+
    | test.userid  | test.username  |
    +--------------+----------------+--+
    | 0001         | spark          |
    | 0002         | hive           |
    | 0003         | hbase          |
    | 0004         | hadoop         |
    +--------------+----------------+--+
    4 rows selected (1.063 seconds)

    6.Spark SQL与MySQL集成

    启动spark-shell

    sbin/spark-shell
    :paste
    val jdbcDF = spark
      .read
      .format("jdbc")
      .option("url", "jdbc:mysql://bigdata-pro01.kfk.com:3306/test")
      .option("dbtable", "spark1")
      .option("user", "root")
      .option("password", "root")
      .load()
    ctr+d
    
    #打印读取数据
    jdbcDF.show
    +------+--------+
    |userid|username|
    +------+--------+
    |  0001|   spark|
    |  0002|    hive|
    |  0003|   hbase|
    |  0004|  hadoop|
    +------+--------+

    7.Spark SQL与HBase集成

    Spark SQL与HBase集成,其核心就是Spark Sql通过hive外部表来获取HBase的表数据。

    1)拷贝HBase的包和hive包到spark 的jars目录下

    http://ke.dajiangtai.com/content/6918/12.png

    2)启动Hbase

    bin/start-hbase.sh

    3)启动Hive

    bin/hive

    4)启动spark-shell

    bin/spark-shell
    val df =spark.sql("select * from weblogs limit 10").show

    这一步如果报NoClassDefFoundError错误请参考博文:Spark-HBase集成错误之 java.lang.NoClassDefFoundError: org/htrace/Trace

    到这,Spark与HBase的集成就算成功了!


    以上就是博主为大家介绍的这一板块的主要内容,这都是博主自己的学习过程,希望能给大家带来一定的指导作用,有用的还望大家点个支持,如果对你没用也望包涵,有错误烦请指出。如有期待可关注博主以第一时间获取更新哦,谢谢!同时也欢迎转载,但必须在博文明显位置标注原文地址,解释权归博主所有!

  • 相关阅读:
    hdu 4947
    hdu 4946
    hdu 4944
    hdu 4942
    hdu 4941
    PAT 【L2-011 玩转二叉树】
    PAT【L2-006 树的遍历】
    XYNUOJ 【2070: 重建二叉树】
    XYNUOJ 【1367: 二叉链表存储的二叉树】
    XYNUOJ 2390【二叉树遍历2】
  • 原文地址:https://www.cnblogs.com/zimo-jing/p/10785102.html
Copyright © 2011-2022 走看看