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;

注意:spark-core里面的cache是lazy的,而Spark SQL中的cache是eager的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值