zoukankan      html  css  js  c++  java
  • 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;
  • 相关阅读:
    Visual Studio 调试系列3 断点
    mysql客户端(Navicat)远程登录操作遇到问题1142
    php Socket通信
    centos crontab(定时任务) 使用
    nginx中配置pathinfo模式示例
    IE9总是弹出“ICBC Anti-Phishing class” 加载项是否要启用还是不启用的提示
    windows 2008 R2 断电重启进入修复模式
    unserialize() [function.unserialize]: Error at offset
    解决子级用css float浮动 而父级div没高度不能自适应高度
    php追加编译GD库
  • 原文地址:https://www.cnblogs.com/kxgdby/p/7956645.html
Copyright © 2011-2022 走看看