Spark SQL is a Spark module for structured data processing
对不同的数据类型使用统一的接口来读写。
提升大数据处理速度最有效的方法就是忽略无关的数据。
(1)使用列式存储(columnar formats),比如Parquet、ORC、RCFile
(2)使用分区裁剪(partitioningpruning),比如按天分区,按小时分区等
(3)利用数据文件中附带的统计信息进行剪枝:例如每段数据都带有最大值、最小值和NULL值等统计信息,当某一数据段肯定不包含查询条件的目标数据时,可以直接跳过这段数据。(例如字段age某段最大值为20,但查询条件是>50岁的人时,显然可以直接跳过这段)
(4)将查询源中的各种信息下推至数据源处,从而充分利用数据源自身的优化能力来完成剪枝、过滤条件下推等优化。
Catalyst优化器对SQL语句进行优化,从而得到更有效的执行方案。即使我们在写SQL的时候没有考虑这些优化的细节,Catalyst也可以帮我们做到不错的优化结果。
a)将hive的配置文件hive-site.xml拷贝到spark conf目录,同时添加metastore的url配置(对应hive安装节点,我的为3节点)。
vi hive-site.xml
hive.metastore.uris
thrift://bigdata-pro03.kfk.com:9083
修改完后再发送给其他节点
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
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|
+------+--------+
启动spark-sql
bin/spark-sql
#查看数据库
show databases;
default
kfk
#使用数据库
use kfk
#查看表
show tables;
test
#查看表数据
select * from test;
通过使用beeline可以实现启动一个应用给多个用户同时操作,而不必要启动多个应用,这样更加节省资源。
1)启动ThriftServer
sbin/start-thriftserver.sh
2)启动beeline
[kfk@bigdata-pro02 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)
启动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|
+------+--------+
Spark SQL与HBase集成,其核心就是Spark Sql通过hive外部表来获取HBase的表数据。
1)拷贝HBase的包和hive包到spark 的jars目录下
2)启动Hbase
bin/start-hbase.sh
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与HBase的集成就算成功了!