1.Spark SQL概述

1)Spark SQL是Spark核心功能的一部分,是在2014年4月份Spark1.0版本时发布的。

Spark SQL快速离线数据分析

2)Spark SQL可以直接运行SQL或者HiveQL语句

Spark SQL快速离线数据分析

3)BI工具通过JDBC连接SparkSQL查询数据

Spark SQL快速离线数据分析

4)Spark SQL支持Python、Scala、Java和R语言

Spark SQL快速离线数据分析

5)Spark SQL不仅仅是SQL

Spark SQL快速离线数据分析

6)Spark SQL远远比SQL要强大

Spark SQL快速离线数据分析

7)Spark SQL处理数据架构

Spark SQL快速离线数据分析

8)Spark SQL简介

Spark SQL is a Spark module for structured data processing

Spark SQL快速离线数据分析

9)Spark SQL的愿景

a)Write less code

对不同的数据类型使用统一的接口来读写。

Spark SQL快速离线数据分析

b)Read less data

提升大数据处理速度最有效的方法就是忽略无关的数据。

(1)使用列式存储(columnar formats),比如Parquet、ORC、RCFile

(2)使用分区裁剪(partitioningpruning),比如按天分区,按小时分区等

(3)利用数据文件中附带的统计信息进行剪枝:例如每段数据都带有最大值、最小值和NULL值等统计信息,当某一数据段肯定不包含查询条件的目标数据时,可以直接跳过这段数据。(例如字段age某段最大值为20,但查询条件是>50岁的人时,显然可以直接跳过这段)

(4)将查询源中的各种信息下推至数据源处,从而充分利用数据源自身的优化能力来完成剪枝、过滤条件下推等优化。

c)Let the optimizer do the hard work

Catalyst优化器对SQL语句进行优化,从而得到更有效的执行方案。即使我们在写SQL的时候没有考虑这些优化的细节,Catalyst也可以帮我们做到不错的优化结果。

Spark SQL快速离线数据分析

2.Spark SQL服务架构

Spark SQL快速离线数据分析

3.Spark SQL 与Hive集成(spark-shell)

1)需要配置的项目

a)将hive的配置文件hive-site.xml拷贝到spark conf目录,同时添加metastore的url配置(对应hive安装节点,我的为3节点)。

vi hive-site.xml

<property>

        <name>hive.metastore.uris</name>

        <value>thrift://bigdata-pro03.kfk.com:9083</value>

</property>

修改完后再发送给其他节点

scp hive-site.xml bigdata-pro01.kfk.com:/opt/modules/spark-2.2.0-bin/conf/

scp hive-site.xml bigdata-pro02.kfk.com:/opt/modules/spark-2.2.0-bin/conf/

b)拷贝hive中的mysql jar包到spark的jar目录下,再发送给其他节点

cp hive-0.13.1-bin/lib/mysql-connector-java-5.1.27-bin.jar spark-2.2-bin/jars/

scp mysql-connector-java-5.1.27.jar bigdata-pro01.kfk.com:/opt/modules/spark-2.2.0-bin/jars/

scp mysql-connector-java-5.1.27.jar bigdata-pro02.kfk.com:/opt/modules/spark-2.2.0-bin/jars/

c)检查spark-env.sh 文件中的配置项,没有添加,有则跳过

vi spark-env.sh

HADOOP_CONF_DIR=/opt/modules/hadoop-2.6.0/etc/hadoop

2)启动服务

a)检查mysql是否启动

#查看状态

service mysqld status

#启动

service mysqld start

b)启动hive metastore服务

bin/hive --service metastore

c)启动hive

bin/hive

show databases;

create database kfk;

use kfk;

create table if not exists test(userid string,username string)ROW FORMAT DELIMITED FIELDS TERMINATED BY ' ' STORED AS textfile;

load data local inpath "/opt/datas/kfk.txt" into table test;

本地kfk.txt文件

more /opt/datas/kfk.txt

0001 spark

0002 hive

0003 hbase

0004 hadoop

d)启动spark-shell

bin/spark-shell

spark.sql("select * from kfk.test").show

+------+--------+

|userid|username|

+------+--------+

|  0001|   spark|

|  0002|    hive|

|  0003|   hbase|

|  0004|  hadoop|

+------+--------+

4.Spark SQL 与Hive集成(spark-sql)

启动spark-sql

bin/spark-sql

#查看数据库

show databases;

default

kfk

#使用数据库

use kfk

#查看表

show tables;

test

#查看表数据

select * from test;

Spark SQL快速离线数据分析

5.Spark SQL之ThriftServer和beeline使用

通过使用beeline可以实现启动一个应用给多个用户同时操作,而不必要启动多个应用,这样更加节省资源。

1)启动ThriftServer

sbin/start-thriftserver.sh

2)启动beeline

[[email protected] spark-2.2.0-bin]$ bin/beeline

Beeline version 1.2.1.spark2 by Apache Hive

beeline> !connect jdbc:hive2://bigdata-pro02.kfk.com:10000

Connecting to jdbc:hive2://bigdata-pro02.kfk.com:10000

Enter username for jdbc:hive2://bigdata-pro02.kfk.com:10000: kfk

Enter password for jdbc:hive2://bigdata-pro02.kfk.com:10000: ***

19/04/18 17:56:52 INFO Utils: Supplied authorities: bigdata-pro02.kfk.com:10000

19/04/18 17:56:52 INFO Utils: Resolved authority: bigdata-pro02.kfk.com:10000

19/04/18 17:56:52 INFO HiveConnection: Will try to open client transport with JDBC Uri: jdbc:hive2://bigdata-pro02.kfk.com:10000

Connected to: Spark SQL (version 2.2.0)

Driver: Hive JDBC (version 1.2.1.spark2)

Transaction isolation: TRANSACTION_REPEATABLE_READ

0: jdbc:hive2://bigdata-pro02.kfk.com:10000> 

#查看数据库

show databases;

+----------------+--+

| database_name  |

+----------------+--+

| default        |

| kfk            |

+----------------+--+

2 rows selected (0.977 seconds)

#查看表数据

select * from kfk.test;

+--------------+----------------+--+

| test.userid  | test.username  |

+--------------+----------------+--+

| 0001         | spark          |

| 0002         | hive           |

| 0003         | hbase          |

| 0004         | hadoop         |

+--------------+----------------+--+

4 rows selected (1.063 seconds)

6.Spark SQL与MySQL集成

启动spark-shell

sbin/spark-shell

:paste

val jdbcDF = spark

  .read

  .format("jdbc")

  .option("url", "jdbc:mysql://bigdata-pro01.kfk.com:3306/test")

  .option("dbtable", "spark1")

  .option("user", "root")

  .option("password", "root")

  .load()

ctr+d

#打印读取数据

jdbcDF.show

+------+--------+

|userid|username|

+------+--------+

|  0001|   spark|

|  0002|    hive|

|  0003|   hbase|

|  0004|  hadoop|

+------+--------+

7.Spark SQL与HBase集成

Spark SQL与HBase集成,其核心就是Spark Sql通过hive外部表来获取HBase的表数据。

1)拷贝HBase的包和hive包到spark 的jars目录下

Spark SQL快速离线数据分析

2)启动Hbase

bin/start-hbase.sh

Spark SQL快速离线数据分析

3)启动Hive

bin/hive

4)启动spark-shell

bin/spark-shell


val df =spark.sql("select * from weblogs limit 10").show

这一步如果报NoClassDefFoundError错误请参考博文: Spark-HBase集成错误之 java.lang.NoClassDefFoundError: org/htrace/Trace 

Spark SQL快速离线数据分析

到这,Spark与HBase的集成就算成功了!

相关文章:

  • 2021-11-16
  • 2021-10-30
  • 2021-08-07
  • 2021-09-08
  • 2021-08-02
  • 2021-09-17
  • 2021-05-29
  • 2021-08-20
猜你喜欢
  • 2021-12-15
  • 2021-06-07
  • 2021-12-16
  • 2021-07-28
  • 2021-11-01
相关资源
相似解决方案