Spark SQL整合Hive

Spark SQL官方释义mysql

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

 

1、使用Spark SQL访问Hive须要将$HIVE_HOME/conf下的hive-site.xml拷贝到$SPARK_HOME/conf下,若是集群没有安装hive那么就在$SPARK_HOME/conf 下建立一个hive-site.xml,再配置一下能够访问metadata便可sql

2、启动spark访问hive 
一、HDFS必须保证启动了 
二、若是报错说找不到mysql驱动,那么在启动spark时经过–jars指定mysql驱动shell

三、启动命令ui

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

 

四、列出hive的表lua

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

 

五、查看emp表内容spa

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| +-----+------+---------+----+----------+-------+------+------+

 

 

六、下面方式一样能够查看表内容scala

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

 

七、启动Spark SQL来访问code

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

 

查看全部表server

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)

 

3、join操做xml

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;
相关文章
相关标签/搜索