• Spark SQL整合Hive


    Spark SQL官方释义

    Spark SQL is Apache Spark's module 
    for working with structured data.

    一、使用Spark SQL访问Hive需要将$HIVE_HOME/conf下的hive-site.xml拷贝到$SPARK_HOME/conf下,如果集群没有安装hive那么就在$SPARK_HOME/conf 下创建一个hive-site.xml,再配置一下可以访问metadata即可

    二、启动spark访问hive 
    1、HDFS必须保证启动了 
    2、如果报错说找不到mysql驱动,那么在启动spark时通过–jars指定mysql驱动

    3、启动命令

    ./spark-shell --master local[2]

    4、列出hive的表

    scala> spark.sql("show tables").show
    +--------+-------------------+-----------+
    |database|          tableName|isTemporary|
    +--------+-------------------+-----------+
    | default|                emp|      false|
    | default|testhivedrivertable|      false|
    +--------+-------------------+-----------+

    5、查看emp表内容

    scala> spark.sql("select * from emp").show
    +-----+------+---------+----+----------+-------+------+------+
    |empno| ename|      job| mgr|  hiredate|    sal|  comm|deptno|
    +-----+------+---------+----+----------+-------+------+------+
    | 7369| SMITH|    CLERK|7902|1980-12-17|  800.0|  null|    20|
    | 7499| ALLEN| SALESMAN|7698| 1981-2-20| 1600.0| 300.0|    30|
    | 7521|  WARD| SALESMAN|7698| 1981-2-22| 1250.0| 500.0|    30|
    | 7566| JONES|  MANAGER|7839|  1981-4-2| 2975.0|  null|    20|
    | 7654|MARTIN| SALESMAN|7698| 1981-9-28| 1250.0|1400.0|    30|
    | 7698| BLAKE|  MANAGER|7839|  1981-5-1| 2850.0|  null|    30|
    | 7782| CLARK|  MANAGER|7839|  1981-6-9| 2450.0|  null|    10|
    | 7788| SCOTT|  ANALYST|7566| 1987-4-19| 3000.0|  null|    20|
    | 7839|  KING|PRESIDENT|null|1981-11-17| 5000.0|  null|    10|
    | 7844|TURNER| SALESMAN|7698|  1981-9-8| 1500.0|   0.0|    30|
    | 7876| ADAMS|    CLERK|7788| 1987-5-23| 1100.0|  null|    20|
    | 7900| JAMES|    CLERK|7698| 1981-12-3|  950.0|  null|    30|
    | 7902|  FORD|  ANALYST|7566| 1981-12-3| 3000.0|  null|    20|
    | 7934|MILLER|    CLERK|7782| 1982-1-23| 1300.0|  null|    10|
    | 8888|  HIVE|  PROGRAM|7839| 1988-1-23|10300.0|  null|  null|
    | 9999| Spark|    Clerk|9999| 1988-2-23|10993.0|  20.0|  null|
    +-----+------+---------+----+----------+-------+------+------+

    6、下面方式同样可以查看表内容

    scala> spark.table("emp").show

    7、启动Spark SQL来访问

     ./spark-sql --master local[2]

    查看所有表

    spark-sql (default)> show tables;
    17/11/21 16:40:18 INFO SparkSqlParser: Parsing command: show tables
    17/11/21 16:40:25 INFO HiveMetaStore: 0: get_database: default
    17/11/21 16:40:25 INFO audit: ugi=root  ip=unknown-ip-addr      cmd=get_database: default
    17/11/21 16:40:25 INFO HiveMetaStore: 0: get_database: default
    17/11/21 16:40:25 INFO audit: ugi=root  ip=unknown-ip-addr      cmd=get_database: default
    17/11/21 16:40:25 INFO HiveMetaStore: 0: get_tables: db=default pat=*
    17/11/21 16:40:25 INFO audit: ugi=root  ip=unknown-ip-addr      cmd=get_tables: db=default pat=*
    17/11/21 16:40:28 INFO CodeGenerator: Code generated in 679.481418 ms
    database        tableName       isTemporary
    default dept    false
    default emp     false
    default testhivedrivertable     false
    Time taken: 10.403 seconds, Fetched 3 row(s)
    17/11/21 16:40:28 INFO CliDriver: Time taken: 10.403 seconds, Fetched 3 row(s)

    三、join操作

    spark-sql (default)> select a.ename,a.sal,b.deptno,b.dname from emp a join dept b on a.deptno=b.deptno;
    ename   sal     deptno  dname
    SMITH   800.0   20      眼科
    SMITH   800.0   20      病案科室
    JONES   2975.0  20      眼科
    JONES   2975.0  20      病案科室
    CLARK   2450.0  10      肿瘤科
    SCOTT   3000.0  20      眼科
    SCOTT   3000.0  20      病案科室
    KING    5000.0  10      肿瘤科
    ADAMS   1100.0  20      眼科
    ADAMS   1100.0  20      病案科室
    FORD    3000.0  20      眼科
    FORD    3000.0  20      病案科室
    MILLER  1300.0  10      肿瘤科
    Time taken: 14.438 seconds, Fetched 13 row(s)

    我们把两张表放到memory里面去,因为spark-sql支持cache操作

    spark-sql (default)> cache table emp;
    spark-sql (default)> cache table dept;

    这里写图片描述

    此时我们再来进行join操作

    spark-sql (default)> select a.ename,a.sal,b.deptno,b.dname from emp a join dept b on a.deptno=b.deptno;
    ename   sal     deptno  dname
    SMITH   800.0   20      眼科
    SMITH   800.0   20      病案科室
    JONES   2975.0  20      眼科
    JONES   2975.0  20      病案科室
    CLARK   2450.0  10      肿瘤科
    SCOTT   3000.0  20      眼科
    SCOTT   3000.0  20      病案科室
    KING    5000.0  10      肿瘤科
    ADAMS   1100.0  20      眼科
    ADAMS   1100.0  20      病案科室
    FORD    3000.0  20      眼科
    FORD    3000.0  20      病案科室
    MILLER  1300.0  10      肿瘤科
    Time taken: 1.081 seconds, Fetched 13 row(s)

    对比两次的Time taken会发现做了cache后速度提高了很多,如果你的数据量大就越明显。

    取消cache

    uncache table emp;
  • 相关阅读:
    php 邮件发送开发前期配置
    抛弃传统的curl,使用Guzzle
    TP5.1 分页(带参数传递)
    tp5.1 模型 where多条件查询 like 查询
    xpath 和 jsonpath 解析
    python分布式爬虫框架 --- scrapy-redis
    python爬虫框架——scrapy
    python爬虫 --- urllib
    mysql事务和锁
    mysql数据储存
  • 原文地址:https://www.cnblogs.com/kxgdby/p/7956645.html
Copyright © 2020-2023  润新知