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;