大數據技術 - 爲何是SQL

在大數據處理以及分析中 SQL 的普及率很是高,幾乎是每個大數據工程師必須掌握的語言,甚至非數據處理崗位的人也在學習使用 SQL。今天這篇文章就聊聊 SQL 在數據分析中做用以及掌握 SQL 的必要性html

SQL解決了什麼問題

SQL的中文翻譯爲:結構化查詢語言。這裏面有三層含義:首先這是一門編程語言;其次,這是一門查詢語言;最後,這是在結構化數據上作查詢的語言。結構化數據就是數據庫裏的二維表,不瞭解數據庫的讀者能夠把它看作 Excel 裏面的表格。雖然 SQL能夠解決查詢問題,可是 SQL 並不只僅只提供查詢的功能,它還能夠對錶進行增長、更新、刪除等操做。java

SQL 的主要應用場景有兩個:mysql

第一,傳統數據庫的增刪改查。以查詢舉例,App 的某個頁面展現的數據通常存放在傳統數據庫中,經過 SQL 能夠讀取數據庫中的內容用於展現。程序員

第二,大數據統計分析。好比,統計 App 的日活,這時候 SQL 的做用是查詢和計算。大數據場景幾乎不會對錶中的記錄更新和刪除。
sql

SQL的優點

語法簡單數據庫

SQL 的語法相對於其餘編程語言很是簡單,經常使用的關鍵字也就幾個,selectfromwherejoinif 等。沒有像 Java、C++ 等編程語言定義的類、對象、繼承之類的複雜概念。apache

表達能力強

完成一樣的統計功能,SQL 代碼量較少。舉一個大數據統計經常使用的例子 WordCount,以前我寫的使用 MapReduce 寫的代碼大概 40 行。下面咱們用 SQL 寫一下看看多麼簡單,你會發現so easy,若是看不懂能夠暫時忽略,後續有講解。編程

select word, count(1)
from (
  select * from tb lateral view explode(split(words, ' ')) words_tb as word
) tmp
group by word
;

經過如上能夠看到只用了 5 行代碼就完成了 WordCount,SQL 的表達力強,能夠大大減小代碼量。框架

容易理解

咱們很容易將 SQL 代碼映射到二維表中的數據,好比上面例子中的代碼,第一個括號裏面的 select ... from 表明拿到了 tb 這個表的數據並作轉換;第二個 select ... from 至關於基於第一個括號裏生成的數據再進行操做。因此 SQL 不一樣操做的代碼其實就是對應着二維表的不斷變換,相對容易理解。機器學習

誰在用SQL

我以爲將來只要跟數據相關的從業者都應該掌握 SQL,在編程愈來愈普及的背景下,SQL 並非程序員專有技能。那麼目前市場環境中有哪些職位應該掌握 SQL。

  • 大數據 / BI 工程師:能夠說是數據直接提供方,將採集的數據進行合理的組織,建立二維表存儲數據,設計數據倉庫模型,以便分析團隊可以便捷地、快速地獲取到想要的數據。
  • 機器學習及數據挖掘工程師:作挖掘的數據極可能來自數據倉庫,使用 SQL 統計能夠很是方便地瞭解數據、分析數據,與數據團隊之間溝通成本更低。
  • 數據分析師:有很多非程序員出身,可是爲了跟大數據團隊配合也須要使用 SQL 而且須要懂一些大數據處理方便的專業知識。我接觸過很多數據分析師,他們的 SQL 水平良莠不齊, 有的根本不寫 SQL,主要用 R 、Python 或 Excel 進行分析。而有些人可以熟練掌握 SQL 而且也瞭解一大數據處理技術,這樣跟數據團隊配合的會更好。
  • 產品經理和運營:產品和運營會常常進行數據分析,他們分析的數據最多見的來源是 BI 團隊提供的報表,但這種方式很是不靈活。所以對於產品和運營若是能掌握 SQL 自助地分析會大大提高分析效率。我有個朋友在美團作產品經理,他們會使用 SQL 而且可以爲 BI 團隊擋下大部分無用的數據需求。固然如今一些 BI 團隊也會提供各類可視化工具來知足業務方的數據需求,這只是一個折中的方案。建議與數據分析相關崗位的同窗都掌握 SQL ,學習 SQL 並不比熟練 Excel 操做更復雜。

大數據中的 SQL

目前比較火的大數據框架好比 MapReduce(Hive)、Spark、Flink 都支持 SQL。在大數據中 SQL 應用主要分兩種:一種是週期性的統計任務,另外一種是分析任務。前者對實時性要求不高,通常用 Hive 或者 Spark 批處理任務去完成。對於後者偏重分析,須要快速的洞察數據得出結論,這種任務可使用 Hive 來完成,若是須要更高的實時性,交互性要求可使用 Kylin 等多維分析框架。

以上即是大數據處理和分析中 SQL 扮演的角色以及地位。SQL 應用是創建在數據庫之上,對於大數據目前應用比較普遍的是 Hive, Hive 的安裝簡述以下。

安裝Hive 

安裝 Hive 須要基於 Hadoop,Hadoop 的安裝在「大數據技術 - 學習之路(一)」中已經介紹過,本次 Hive 的安裝也是基於以前的環境進行。Hadoop 2.x.y 版本對應 Hive 也是 2.x.y 版本,咱們能夠下載 apache-hive-2.3.4-bin.tar.gz 文件進行安裝。Hive 的安裝相對簡單,能夠對照官網進行,主要步驟以下:

解壓apache-hive-2.3.4-bin.tar.gz

tar -zxvf apache-hive-2.3.4-bin.tar.gz
mv apache-hive-2.3.4-bin hive-2.3.4

配置 HIVE_HOME 環境變量

vi /etc/profile
#增長並修改如下內容
HIVE_HOME=/work/software/hive-2.3.4
export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HIVE_HOME/bin:$PATH
source /etc/profile

在 HDFS 建立Hive數據庫的路徑(修改數據庫默認路徑: hive.metastore.warehouse.dir)

hadoop fs -mkdir       /tmp
hadoop fs -mkdir       /user/hive/warehouse
hadoop fs -chmod g+w   /tmp
hadoop fs -chmod g+w   /user/hive/warehouse

初始化 meta 數據庫

# Hive 將表的元數據信息(表名、列名及數據類型等)存儲在關係型數據庫中,目前支持 mysql 和 derby,本身學習使用能夠用 derby,生產環境建議用 mysql
schematool -dbType derby -initSchema
# 執行成功後會看到在 hive-2.3.4 目錄下有個 metastore_db 目錄,存放元數據信息

若是不進行該操做可能會報如下錯誤

FAILED: SemanticException org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient

啓動 Hive 客戶端,直接運行 hive 命令便可

[root@hadoop0 hadoop-2.9.2]# hive
which: no hbase in (/work/software/jdk1.8.0_151/bin:/work/software/hadoop-2.9.2/bin:/work/software/hive-2.3.4/bin:/work/software/jdk1.8.0_151/bin:/work/software/hadoop-2.9.2/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/work/software/hive-2.3.4/lib/log4j-slf4j-impl-2.6.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/work/software/hadoop-2.9.2/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]

Logging initialized using configuration in jar:file:/work/software/hive-2.3.4/lib/hive-common-2.3.4.jar!/hive-log4j2.properties Async: true
Hive-on-MR is deprecated in Hive 2 and may not be available in the future versions. Consider using a different execution engine (i.e. spark, tez) or using Hive 1.X releases.
hive> 

因爲元數據目錄在 hive-2.3.4 目錄下的 metastore_db 目錄,所以後續啓動 hive 客戶端都要在 hive-2.3.4 目錄下

驗證 hive 

hive> show databases;
OK
default
Time taken: 9.366 seconds, Fetched: 1 row(s)

 

說明咱們能夠正常使用 hive 了

總結

這篇文章主要介紹了數據統計與分析過程當中 SQL 所扮演的角色,以及在目前大數據技術支持 SQL 的數據框架,最後簡單介紹了 Hive 的安裝。後續咱們會繼續介紹 SQL 的語法以及背後的大數據數據技術。

若有疑問請掃描右上方二維碼直接與我交流

相關文章
相關標籤/搜索