Spark SQL快速離線數據分析

 


1.Spark SQL概述

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

http://ke.dajiangtai.com/content/6918/1.png

2)Spark SQL能夠直接運行SQL或者HiveQL語句

http://ke.dajiangtai.com/content/6918/2.png

3)BI工具經過JDBC鏈接SparkSQL查詢數據

http://ke.dajiangtai.com/content/6918/3.png

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

http://ke.dajiangtai.com/content/6918/4.png

5)Spark SQL不單單是SQL

http://ke.dajiangtai.com/content/6918/5.png

6)Spark SQL遠遠比SQL要強大

http://ke.dajiangtai.com/content/6918/6.png

7)Spark SQL處理數據架構

http://ke.dajiangtai.com/content/6918/7.png

8)Spark SQL簡介

Spark SQL is a Spark module for structured data processinghtml

http://ke.dajiangtai.com/content/6918/8.png

9)Spark SQL的願景

a)Write less code

對不一樣的數據類型使用統一的接口來讀寫。java

http://ke.dajiangtai.com/content/6918/9.png

b)Read less data

提高大數據處理速度最有效的方法就是忽略無關的數據。mysql

(1)使用列式存儲(columnar formats),好比Parquet、ORC、RCFileweb

(2)使用分區裁剪(partitioningpruning),好比按天分區,按小時分區等sql

(3)利用數據文件中附帶的統計信息進行剪枝:例如每段數據都帶有最大值、最小值和NULL值等統計信息,當某一數據段確定不包含查詢條件的目標數據時,能夠直接跳過這段數據。(例如字段age某段最大值爲20,但查詢條件是>50歲的人時,顯然能夠直接跳過這段)shell

(4)將查詢源中的各類信息下推至數據源處,從而充分利用數據源自身的優化能力來完成剪枝、過濾條件下推等優化。數據庫

c)Let the optimizer do the hard work

Catalyst優化器對SQL語句進行優化,從而獲得更有效的執行方案。即便咱們在寫SQL的時候沒有考慮這些優化的細節,Catalyst也能夠幫咱們作到不錯的優化結果。架構

http://ke.dajiangtai.com/content/6918/10.png

2.Spark SQL服務架構

http://ke.dajiangtai.com/content/6918/11.png

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

1)須要配置的項目

a)將hive的配置文件hive-site.xml拷貝到spark conf目錄,同時添加metastore的url配置(對應hive安裝節點,個人爲3節點)。app

vi hive-site.xml
<property>
        <name>hive.metastore.uris</name>
        <value>thrift://bigdata-pro03.kfk.com:9083</value>
</property>

 

修改完後再發送給其餘節點less

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;

 

5.Spark SQL之ThriftServer和beeline使用

經過使用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)

 

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目錄下

http://ke.dajiangtai.com/content/6918/12.png

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的集成就算成功了!


以上就是博主爲你們介紹的這一板塊的主要內容,這都是博主本身的學習過程,但願能給你們帶來必定的指導做用,有用的還望你們點個支持,若是對你沒用也望包涵,有錯誤煩請指出。若有期待可關注博主以第一時間獲取更新哦,謝謝!同時也歡迎轉載,但必須在博文明顯位置標註原文地址,解釋權歸博主全部!

相關文章
相關標籤/搜索