大数据入门知识总结
大數據入門知識總結
- 一、大數據部門及流程
- 二、數據倉庫
- 1、數據倉庫的基本概念
- 2、數據倉庫的主要特征
- 3、數據倉庫與數據庫區別
- 5、數據倉庫——ETL
 
- 三、Hadoop——HDFS分布式存儲系統
- 1、Hadoop簡介
- 2、HDFS、Yarn、MapReduce
- 3、Hadoop集群搭建
- 4、HDFS的概述
- 5、HDFS的Shell命令
- 6、HDFS的基準測試
 
- 四、Hive
- 1、什么是Hive
- 2、Hive的特點
- 3、Hive架構
- 4、Hive與傳統數據庫對比
- 5、Hive計算引擎
 
- 五、Hive的數據庫和表
- 1、Hive數據庫操作
- 2、Hive數據表操作
- 3、表字段數據類型
- 4、內部表操作
- 5、外部表操作
- 6、復雜類型操作
- 7、內部表和外部表之間的轉換
- 8、Hive表操作-分區表
- 9、Zeppelin框架
- 10、分桶表
- 11、Hive查詢操作
- 12、Hive內置函數:
 
 
 
 
一、大數據部門及流程
1、部門架構
 
 2、大數據處理流程
二、數據倉庫
1、數據倉庫的基本概念
-  數據倉庫(Data Warehouse,DW/DWH)是一個很大的數據存儲集合,出于企業的分析性報告和決策支持目的而創建,對多樣的業務數據進行篩選與整合。它為企業提供一定的BI(商業智能)能力,指導業務流程改進、監視時間、成本、質量以及控制。 
-  數據倉庫的輸入方是各種各樣的數據源,最終的輸出用于企業的數據分析、數據挖掘、數據報表等方向。 
-  數據倉庫面向分析,平時的Mysql數據庫主要面向業務。 
-  數據倉庫是專門用來進行數據分析的,它可以是Mysql、Oracle等數據庫,但是在大數據中常用到的是Hive。 
 
2、數據倉庫的主要特征
數據倉庫是面向主題的、集成的、穩定的和時變的數據集合,用以支持管理決策。
(1)主題性
 不同于傳統數據庫對應于某一個或多個項目,數據倉庫根據使用者實際需求,將不同數據源的數據在一個較高的抽象層次上做整合,所有數據都圍繞某一主題來組織。
 比如對于城市,“天氣濕度分析”就是一個主題。對于淘寶,“用戶點擊行為分析”就是一個主題。
(2)集成性
 數據倉庫中存儲的數據是來源于多個數據源的集成,原始數據來自不同的數據源,存儲方式各不相同。要整合成為最終的數據集合,需要從數據源經過一系列抽取、清洗、轉換的過程。
(3)穩定性
 數據倉庫中保存的數據是一系列歷史快照,不允許被修改。用戶只能通過分析工具進行查詢和分析。這里說明一點,數據倉庫基本上是不許允許用戶進行修改,刪除操作的。大多數的場景是用來查詢分析數據。
(4)時變性
 數據倉庫會定期接收新的集成數據,反應出最新的數據變化。這和穩定特點并不矛盾。
3、數據倉庫與數據庫區別
(1)數據庫
 數據庫是面向交易的處理系統,它是針對具體業務在數據庫聯機的日常操作,通常對記錄進行查詢、修改。用戶較為關心操作的響應時間、數據的安全性、完整性和并發支持的用戶數等問題。傳統的數據庫系統作為數據管理的主要手段,主要用于操作型處理,也被稱為聯機事務處理 OLTP(On-Line Transaction Processing)。
(2)數據倉庫
 數據倉庫一般針對某些主題的歷史數據進行分析,支持管理決策,又被稱為聯機分析處理 OLAP(On-Line Analytical Processing)。首先要明白,數據倉庫的出現,并不是要取代數據庫。
(3)兩者區別
- 數據庫是面向事務的設計,數據倉庫是面向主題設計的。
- 數據庫一般存儲業務數據,數據倉庫存儲的一般是歷史數據。
- 數據庫設計是盡量避免冗余,一般針對某一業務應用進行設計,比如一張簡單的User表,記錄用戶名、密碼等簡單數據即可,符合業務應用,但是不符合分析。數據倉庫在設計是有意引入冗余,依照分析需求,分析維度、分析指標進行設計。
- 數據庫是為捕獲數據而設計,數據倉庫是為分析數據而設計。以銀行業務為例。數據庫是事務系統的數據平臺,客戶在銀行做的每筆交易都會寫入數據庫,被記錄下來,這里,可以簡單地理解為用數據庫記賬。
- 數據倉庫,是在數據庫已經大量存在的情況下,為了進一步挖掘數據資源、為了決策需要而產生的,它決不是所謂的“大型數據庫”。
(4)數據倉庫分層架構
 按照數據流入流出的過程,數據倉庫架構可分為三層——源數據、數據倉庫、數據應用。
 
數據倉庫的數據來源于不同的源數據,并提供多樣的數據應用,數據自下而上流入數據倉庫后向上層開放應用,而數據倉庫只是中間集成化數據管理的一個平臺。
- 源數據層(ODS): 操作性數據(Operational Data Store)
 ,是作為數據庫到數據倉庫的一種過渡,ODS的數據結構一般與數據來源保持一致,而且ODS的數據周期一般比較短。ODS的數據為后一步的數據處理做準備。
- 數據倉庫層(DW):數據倉庫(Data Warehouse),是數據的歸宿,這里保持這所有的從ODS到來的數據,并長期報錯,而且這些數據不會被修改,DW層的數據應該是一致的、準確的、干凈的數據,即對源系統數據進行了清洗(去除了雜質)后的數據。
- 數據應用層(DA):數據應用(Dataapplication),為了特定的應用目的或應用范圍,而從數據倉庫中獨立出來的一部分數據,也可稱為部門數據或主題數據,該數據面向應用。如根據報表、專題分析需求而計算生成的數據。
5、數據倉庫——ETL
ETL(Extract-Transform-Load):數據的抽取、數據的轉換、數據的加載。將雜亂的數據轉換為可以處理分析的數據。ETL是將業務系統的數據經過抽取、清洗、轉換之后加載到數據倉庫的過程,目的是將企業中分散、零亂、標準不統一的數據整合到一起。
ETL是數據倉庫的流水線,也可以認為是數據倉庫的血液,它維系著數據倉庫中數據的新陳代謝,而數據倉庫日常的管理和維護工作的大部分精力就是保持ETL的正常和穩定。
ETL流程:
 
 可用于數據抽取的sql:
(1)可視化ETL平臺——Kettle
 Kettle(PDI)是一款國外開源ETL工具,Java編寫,可在多平臺運行,允許管理來自不同數據庫的數據,并提供了一個圖形化的用戶環境。使用Kettle從眾多數據庫中抽取有用的數據放到數倉中。
 
(2)數據分析工具——Superset
 Superset是一款開源的現代化企業級BI,是一款開源的數據分析可視化工具,支持多種數據源,圖表類型多。用于對數倉中的數據進行分析及圖形化顯示。
基本步驟:
-  連接數倉 
-  編寫sql分析數據 
 
-  圖形化顯示: 
 
三、Hadoop——HDFS分布式存儲系統
1、Hadoop簡介
Hadoop是一個開源框架,它的核心組件有:
- HDFS(分布式文件系統):解決海量數據存儲
- MAPREDUCE(分布式運算編程框架):解決海量數據計算
- YARN(作業調度和集群資源管理的框架):解決資源任務調度
廣義上來說,Hadoop通常是指Hadoop生態圈:
 
 重點框架:Kafka、Spark、Flink、Hive、Hbase、Zookeeper、Yarn、MapReduce、HDFS
版本:
- 1.x版本系列:hadoop的第二代開源版本,該版本基本已被淘汰
- 2.x版本系列:架構產生重大變化,引入了Yarn平臺等許多新特性,是現在使用的主流版本。
- 3.x版本系列:該版本是最新版本,但是還不太穩定。
Hadoop發行版本分為開源社區版和商業版:
- 開源社區版:指由Apache軟件基金會維護的版本,是官方維護的版本體系,版本豐富,兼容性稍差。
- 商業版:指由第三方商業公司在社區版Hadoop基礎上進行了一些修改、整合以及各個服務組件兼容性測試而發行的版本,比較著名的有cloudera的CDH、TDH等
 
2、HDFS、Yarn、MapReduce
 (1)HDFS模塊:
- NameNode:集群當中的主節點,主要用于管理集群當中的各種數據。
- SecondaryNameNode:主要用于hadoop中元數據信息的輔助管理。
- DataNode:集群當中的從節點,主要用于存儲集群中的各種數據。
(2)數據計算核心模塊——Yarn:
- ResourceManager:接收用戶的計算請求任務,并負責集群的資源分配。
- NodeManager: 負責執行主節點分配的任務。
(3)Hadoop2.x架構模型——MapReduce
 
(3)Hadoop模塊之間的關系
- MapReduce計算需要的數據和產生的結果需要HDFS來進行存儲
- MapReduce的運行需要由Yarn集群來提供資源調度。(MapReduce只是一段代碼,需要Yarn提供資源進行調度)
3、Hadoop集群搭建
(1)HADOOP集群簡介
 HADOOP集群包含:HDFS集群和YARN集群,兩者邏輯上分離,但物理上常在一起。
- HDFS集群:NameNode、DataNode、SecondaryNameNode
- YARN集群: ResourceManager、NodeManager
(2)集群搭建方式
 單機模式(Standalone mode):
- 單機模式, 1個機器上運行HDFS的NameNode和DataNode、YARN的ResourceManger和NodeManager,主要用于學習和調試。
群集模式(Cluster mode):
- 集群模式主要用于生產環境部署。會使用多臺主機組成一個Hadoop集群。這種部署模式下,主節點和從節點會分開部署在不同的機器上。
4、HDFS的概述
(1)概述
-  單機容量往往無法存儲大量數據,大數據需要跨機器存儲。統一管理分布在集群上的文件系統稱為分布式文件系統 。 
-  HDFS(Hadoop Distributed File System)是 Apache Hadoop 項目的一個子項目. Hadoop 非常適于存儲大型數據 (比如 TB 和 PB), 其就是使用 HDFS 作為存儲系統. HDFS 使用多臺計算機存儲文件, 
 并且提供統一的訪問接口, 像是訪問一個普通文件系統一樣使用分布式文件系統。
-  分布式文件系統解決的問題就是大數據存儲。它們是橫跨在多臺計算機上的存儲系統。分布式文件系統在大數據時代有著廣泛的應用前景,它們為存儲和處理超大規模數據提供所需的擴展能力。 
 
 (2)HDFS的特點
 
-  HDFS文件系統可存儲超大文件,時效性稍差。 
-  HDFS具有硬件故障檢測和自動快速恢復功能。 
-  HDFS為數據存儲提供很強的擴展能力。 
-  HDFS存儲一般為一次寫入,多次讀取,只支持追加寫入,不支持隨機修改。 
-  HDFS可在普通廉價的機器上運行。 
(3)HDFS的架構
- HDFS采用Master/Slave架構
- 一個HDFS集群有兩個重要的角色,分別是Namenode和Datanode。
- HDFS的四個基本組件:HDFS Client、NameNode、DataNode和Secondary NameNode。
 
Client:
- 客戶端。
- 文件切分。文件上傳 HDFS 的時候,Client 將文件切分成 一個一個的Block,然后進行存儲。
- 與 NameNode 交互,獲取文件的位置信息。
- 與 DataNode 交互,讀取或者寫入數據。
- Client 提供一些命令來管理 和訪問HDFS,比如啟動或者關閉HDFS。
NameNode:
- master,管理者。
- 管理 HDFS 元數據(文件路徑,文件的大小,文件的名字,文件權限,文件的block切片信息….)。
- 配置副本策略。(為每個數據,進行備份)
- 處理客戶端讀寫請求。
DataNode
- Slave,NameNode 下達命令,DataNode 執行實際的操作。
- 存儲實際的數據塊。(存儲時以block為單位,每個block為128M)
- 執行數據塊的讀/寫操作。
- 定時向namenode匯報block信息。
Secondary NameNode
- 并非 NameNode 的熱備。當NameNode 掛掉的時候,它并不能馬上替換 NameNode 并提供服務。
- 輔助 NameNode,分擔其工作量。
- 在緊急情況下,可輔助恢復 NameNode。
(4)HDFS的副本機制
- HDFS能夠在一個大集群中跨機器地存儲超大文件。它將每個文件存儲成一系列的數據塊——block,除了最后一個block,所有的數據塊都是同樣大小的128M。
- 為了容錯,所有的block都會有副本,每個文件的數據塊大小和副本系數都是可配置的。
 
5、HDFS的Shell命令
Shell命令介紹:
- 安裝好hadoop環境之后,可以執行hdfs相關的shell命令對hdfs文件系統進行操作,比如文件的創建、刪除、修改文件權限等。
- 對HDFS的操作命令類似于Linux的shell對文件的操作,如ls、mkdir、rm等。
Hadoop提供了文件系統的shell命令使用格式如下:
- hadoop fs <args> #既可以操作HDFS,也可以操作本地系統。
- hdfs dfs <args> #只能操作HDFS系統。
(1)ls 顯示文件列表
 格式: hadoop fs -ls URI
hadoop fs -ls / #顯示文件列表
 hadoop fs –ls -R / #遞歸顯示文件列表
(2)mkdir 創建目錄
 格式 : hadoop fs –mkdir [-p] <paths>
hadoop fs -mkdir /dir1 #創建目錄
 hadoop fs -mkdir -p /aaa/bbb/ccc #遞歸創建目錄
(3)put 上傳文件
 格式 : hadoop fs -put <localsrc> ... <dst>
作用 :
 將單個的源文件或者多個源文件srcs從本地文件系統上傳到目標文件系統中。
hadoop fs -put /root/1.txt /dir1 #上傳文件
 hadoop fs –put /root/dir2 / #上傳目錄
(4)get 文件拷貝
 格式 : hadoop fs -get <src> <localdst>
作用:將HDFS文件拷貝到本地文件系統。
 hadoop fs -get /initial-setup-ks.cfg /opt #拷貝文件
(5)mv 移動文件
 格式 :hadoop fs -mv <src> <dst>
作用: 將hdfs上的文件從原路徑src移動到目標路徑dst,該命令不能跨文件系統。
 hadoop fs -mv /dir1/1.txt /dir2 #HDFS中移動文件
(6)rm 刪除文件
 格式: hadoop fs -rm [-r] [-skipTrash] URI [URI 。。。]
作用:
- 刪除參數指定的文件和目錄,參數可以有多個,刪除目錄需要加-r參數。
- 如果指定-skipTrash選項,那么在回收站可用的情況下,該選項將跳過回收站而直接刪除文件;
hadoop fs -rm /initial-setup-ks.cfg #刪除文件
 hadoop fs -rm -r /dir2 #刪除目錄
(7)cp 復制文件
 格式: hadoop fs -cp <src> <dst>
作用: 將文件拷貝到目標路徑中
hadoop fs -cp /dir1/1.txt /dir2 #復制文件
(8)cat查看文件
 格式: hadoop fs -cat <filepath>
作用:將參數所指示的文件內容輸出到控制臺
hadoop fs -cat /dir1/1.txt #查看文件
6、HDFS的基準測試
實際生產環境當中,hadoop的環境搭建完成之后,第一件事情就是進行壓力測試,測試我們的集群的讀取和寫入速度,這些操作被稱為基準測試。
(1)寫入速度測試
 向HDFS文件系統中寫入數據,10個文件,每個文件10MB,文件存放到/benchmarks/TestDFSIO中。
hadoop jar /export/server/hadoop-2.7.5/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.7.5.jar TestDFSIO -write -nrFiles 10 -fileSize 10MB
(2)讀取速度測試
 在HDFS文件系統中讀入10個文件,每個文件10M
hadoop jar /export/server/hadoop-2.7.5/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.7.5.jar TestDFSIO -read -nrFiles 10 -fileSize 10MB
(3)清除測試數據
hadoop jar /export/server/hadoop-2.7.5/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.7.5.jar TestDFSIO -clean
四、Hive
1、什么是Hive
- Hive是一個構建在Hadoop上的數據倉庫框架。最初,Hive是由Facebook開發,后來移交由Apache軟件基金會開發,并作為一個Apache開源項目。
- Hive是基于Hadoop的一個數據倉庫工具,可以將結構化的數據文件映射為一張數據庫表,并提供類SQL查詢功能。
2、Hive的特點
- Hive最大的特點是通過類SQL來分析大數據,這樣使得分析數據更容易。
- 數據是存儲在HDFS上的,Hive本身并不提供數據的存儲功能,它可以使已經存儲的數據結構化。
- Hive是將數據映射成數據庫和一張張的表,庫和表的元數據信息一般存在關系型數據庫上(比如MySQL)。
- 數據存儲方面:它能夠存儲很大的數據集,可以直接訪問存儲在Apache HDFS或其他數據存儲系統(如Apache HBase)中的文件。
- 數據處理方面:Hive語句不適用于實時計算的場景,它適用于離線分析。
- Hive支持MapReduce、Spark、Tez這兩種分布式計算引擎;
- 數據的存儲格式有多種,比如數據源是二進制格式,普通文本格式等;
3、Hive架構
 (1)客戶端(寫SQL語句):
- Client CLI(hive shell 命令行),JDBC/ODBC(java訪問hive),WEBUI(瀏覽器訪問hive)。
(2)元數據Metastore:
- 本質上只是用來存儲hive中有哪些數據庫,哪些表,表的字段,表所屬數據庫,分區,表的數據所在目錄等,元數據默認存儲在自帶的derby數據庫中,推薦使用MySQL存儲Metastore。
(3)驅動器Driver(解析和優化SQL)
- 解析器(SQLParser): 將SQL字符轉換成抽象語法樹AST,這一步一般使用都是第三方工具庫完成,比如antlr,對AST進行語法分析,比如表是否存在,字段是否存在,SQL語句是否有誤。
- 編譯器(Physical Plan):將AST編譯生成邏輯執行計劃。
- 優化器(Query Optimizer):對邏輯執行計劃進行優化。
- 執行器(Execution):把邏輯執行計劃轉換成可以運行的物理計劃,對于Hive來說,就是MR/Spark。
(4)存儲和執行:
- 存儲原數據和結果數據,Hive使用HDFS/Hbase進行存儲。
- 使用計算引擎MapReduce等來執行SQL。
4、Hive與傳統數據庫對比
 注意:
hive具有sql數據庫的外表,但應用場景完全不同,hive只適合用來做批量數據統計分析。
5、Hive計算引擎
(1)MapReduce
- 它將計算分為兩個階段,分別為 Map 和 Reduce。對于應用來說,需要想方設法將應用拆分成多個map、reduce的作業,以完成一個完整的算法。
- MapReduce整個計算過程會不斷重復地往磁盤里讀寫中間結果,導致計算速度比較慢,效率比較低。
 
 
 (2)Tez
 Tez把Map/Reduce過程拆分成若干個子過程,同時可以把多個Map/Reduce任務組合成一個較大的DAG任務,減少了Map/Reduce之間的文件存儲。
 
 (3)Spark
- Apache Spark 是一個快速的, 多用途的集群計算系統, 相對于 Hadoop MapReduce 將中間結果保存在磁盤中, Spark 使用了內存保存中間結果, 能在數據尚未寫入硬盤時在內存中進行運算,同時Spark提供SQL 支持。
- Spark 實現了一種叫做 RDDs 的 DAG 執行引擎, 其數據緩存在內存中可以進行迭代處理。
 
五、Hive的數據庫和表
Hive數倉和傳統關系型數據庫類似,管理數倉數據也是通過該數據庫和表。
 
1、Hive數據庫操作
(1)創建數據庫-默認方式
create database if not exists myhive; show databases; #查看所有數據庫注意:
 hive的數據庫置默認存放在/user/hive/warehouse目錄。
(2)創建數據庫-指定存儲路徑
create database myhive2 location '/myhive2’; show databases; #查看所有數據庫注意:
 location :用來指定數據庫的存放目錄
(3)查看數據庫詳細信息
desc database myhive;(4)刪除數據庫
 刪除一個空數據庫,如果數據庫下面有數據表,那么就會報錯:
強制刪除數據庫,包含數據庫下面的表一起刪除:
drop database myhive2 cascade;2、Hive數據表操作
創建數據庫表語法:
 
- CREATE TABLE 創建一個指定名字的表。如果相同名字的表已經存在,則拋出異常;用戶可以用 IF NOT EXISTS
 選項來忽略這個異常。
- EXTERNAL關鍵字可以讓用戶創建一個外部表,在建表的同時指定一個指向實際數據的路徑(LOCATION),Hive
 創建內部表時,會將數據移動到數據倉庫指向的路徑;若創建外部表,僅記錄數據所在的路徑,不對數據的位置做任何改變。在刪除表的時候,內部表的元數據和數據會被一起刪除,而外部表只刪除元數據,不刪除數據。
- LIKE允許用戶復制現有的表結構,但是不復制數據。
- ROW FORMAT DELIMITED 可用來指定行分隔符。
- STORED AS SEQUENCEFILE|TEXTFILE|RCFILE
 來指定該表數據的存儲格式,hive中,表的默認存儲格式為TextFile。
- CLUSTERED BY對于每一個表(table)進行分桶(MapReuce中的分區),桶是更為細粒度的數據范圍劃分。Hive也是針對某一列進行桶的組織。Hive采用對列值哈希,然后除以桶的個數求余的方式決定該條記錄存放在哪個桶當中。
- LOCATION: 指定表在HDFS上的存儲位置。
一般建表后綴添加:
clustered by (cust_id) into 2 buckets --分桶 開啟事務,必須進行分桶 stored as orc --存儲方式 tblproperties ('transactional'='true'); --開啟事務3、表字段數據類型
 
4、內部表操作
未被external修飾的是內部表(managed table管理表),內部表數據存儲位置由hive.metastore.warehouse.dir參數決定(默認:/user/hive/warehouse),刪除內部表會直接刪除元數據(metadata)及存儲數據,因此內部表不適合和其他工具共享數據。
(1)建表:
create database myhive; use myhive; create table stu(id int,name string); select * from stu;注意:
 創建表之后,Hive會在對應的數據庫文件夾下創建對應的表目錄。
(2)創建表并指定字段之間的分隔符:
 
 (3)根據查詢結果創建表:
(4)根據已經存在的表結構創建表:
create table stu4 like stu2;(5)查詢表的類型:
desc stu; #查看表結構基本信息 desc formatted stu; #查看表結構詳細信息(6)刪除表:
drop table stu2;注意:
 查看數據庫和HDFS,發現刪除內部表之后,所有的內容全部刪除。
(5)Hive內部表操作-數據添加:
 方式1-直接插入數據:
注意:
 該方式每次插入都會在表目錄中生成對應的數據文件,每insert一次都會生成一個文件(insert的內容),不推薦使用。
 
 方式2-load數據加載:
 Load命令用于將外部數據加載到Hive表中。
 
 示例——本地加載:
示例——HDFS加載:
#創建表,同時指定文件的分隔符 create table if not exists stu3(id int ,name string) row format delimited fields terminated by '\t’ ;#向表加載數據 hadoop fs -mkdir -p /hivedatas cd /export/data/hivedatas hadoop fs –put stu.txt /hivedatas/ load data inpath '/hivedatas/stu.txt' into table stu3;(6)Hive內部表特點:
- hive內部表信息存儲默認的文件路徑是在/user/hive/warehouse/databasename.db/tablename/目錄。
- hive內部表在進行drop操作時,其表中的數據以及表的元數據信息均會被刪除。
- 內部表一般可以用來做中間表或者臨時表。
(7)元數據:
- Hive是建立在hadoop之上的數據倉庫,存在hive里的數據實際上就是存在HDFS上,都是以文件的形式存在。
- Hive元數據用用來記錄數據庫和表的特征信息,比如數據庫的名字、存儲路徑、表的名字、字段信息,表文件存儲路徑等等。
- 一般Hive的元數據是都保存在Mysql數據庫中。
5、外部表操作
- 在創建表的時候可以指定external關鍵字創建外部表,外部表對應的文件存儲在location指定的hdfs目錄下,向該目錄添加新文件的同時,該表也會讀取到該文件(當然文件格式必須跟表定義的一致)。
- 外部表因為是指定其他的hdfs路徑的數據加載到表當中來,所以hive表會認為自己不完全獨占這份數據,所以刪除hive外部表的時候,數據仍然存放在hdfs當中,不會刪掉。
(1)數據裝載命令load:
 Load命令用于將外部數據加載到Hive表中。
 
- load data:表示加載數據。
- local:表示從本地加載數據到hive表;否則從HDFS加載數據到hive表。
- inpath:表示加載數據的路徑。
- overwrite:表示覆蓋表中已有數據,否則表示追加。
- into table:表示加載到哪張表。
- student:表示具體的表。
- partition:表示上傳到指定分區
創建老師與學生表外部表,并向表中加載數據:
 源數據:
 
 創建老師表:
 
 創建學生表:
 
 從本地文件系統向表中加載數據:
 
 加載數據并覆蓋已有數據:
 
 (2)從hdfs文件系統向表中加載數據:
 其實就是一個移動文件的操作
注意:
 如果刪掉teacher表,hdfs的數據仍然存在,并且重新創建表之后,表中就直接存在數據了,因為我們的student表使用的是外部表,drop table之后,表當中的數據依然保留在hdfs中。
6、復雜類型操作
(1)Array類型
 Array是數組類型,Array中存放相同類型的數據。
 源數據:
 說明:name與locations之間制表符分隔,locations中元素之間逗號分隔。
 
 建表語句:
 
導入數據(從本地導入,同樣支持從HDFS導入):
 
常用查詢:
 
(2)map類型
 map就是描述key-value數據。
 源數據:
 說明:字段與字段分隔符: “,”;需要map字段之間的分隔符:“#”;map內部k-v分隔符:“:”
 
 建表語句:
 
 導入數據:
 
 常用查詢:
 
 (3)struct類型
 源數據:
 說明:字段之間#分割,第二個字段之間冒號分割
 
 建表語句:
 
 導入數據:
 
 常用查詢:
 
7、內部表和外部表之間的轉換
查詢表的類型
desc formatted student;#查看是內部表還是外部表修改外部表student為外內部表:
alter table student set tblproperties('EXTERNAL'='FALSE');修改內部表student為哇外部表:
alter table student set tblproperties('EXTERNAL'='TRUE');注意:
 (‘EXTERNAL’=‘TRUE’)和(‘EXTERNAL’=‘FALSE’)為固定寫法,區分大小寫!
8、Hive表操作-分區表
- 在大數據中,最常用的一種思想就是分治,分區表實際就是對應hdfs文件系統上的的獨立的文件夾,該文件夾下是 該分區所有數據文件。
- 分區可以理解為分類,通過分類把不同類型的數據放到不同的目錄下。
- Hive中可以創建一級分區表,也可以創建多級分區表。
(1)創建一級分區表:
 
 數據加載:
 
 (2)創建多級分區表:
 
 數據加載:
 
 多分區聯合查詢使用union all來實現:
 
 查看分區:
 
 添加一個分區:
 
 同時添加多個分區:
 
 刪除分區:
 
注意:
 添加分區之后就可以在hdfs文件系統當中看到表下面多了一個文件夾。
9、Zeppelin框架
Apache Zeppelin是一款基于Web交互式框架,支持多種語言,如Scala,SparkSQL, Markdown ,SQL,Shell和Python等。Zeppelin提供了數據分析、數據可視化等功能。
 
 我們可以使用Zeppelin來連接到Spark SQL的Thrift Server,這樣我們可以以更直觀的方式來查看Hive中的數據。而且Zeppelin也可以以圖表的方式展示數據。
10、分桶表
-  分桶就是將數據劃分到不同的文件,其實就是MapReduce的分區。 
-  將數據按照指定的字段進行分成多個桶中去,說白了就是將數據按照字段進行劃分,可以將數據按照字段劃分到多個文件當中去。 
11、Hive查詢操作
 (1)Hive查詢操作-聚合函數:
 SparkSQL中提供的聚合函數可以用來統計、求和、求最值等等。
- COUNT:統計行數量
- SUM:獲取單個列的合計值
- AVG:計算某個列的平均值
- MAX:計算列的最大值
- MIN:計算列的最小值
 
 (2)比較運算符:
 
 like:
- % 代表零個或多個字符(任意個字符)。
- _ 代表一個字符。
 
 (3)邏輯運算符:
 
 (4)Hive查詢操作-分組查詢:
 分組關鍵字是GROUP BY,該語句通常會和聚合函數一起使用,按照一個或者多個列隊結果進行分組,然后對每個組執行聚合操作。注意使用group by分組之后,select后面的字段只能是分組字段和聚合函數。
 
(5)Hive查詢操作-Having語句:
 HAVING語句通常與GROUP BY語句聯合使用,用來過濾由GROUP BY語句返回的記錄集。HAVING語句的存在彌補了WHERE關鍵字不能與聚合函數聯合使用的不足。
 
(6)Hive查詢操作-排序:
 排序關鍵字是order by ,用于根據指定的列對結果集進行排序。在排序時,我們可以指定排序順序,asc為升序(默認),desc為降序。
 
 (7)Hive查詢操作-limit語句:
 limit子句用于限制查詢結果返回的數量。
(8)Hive查詢操作-多表查詢:
 內連接查詢
外連接查詢
左外連接:left outer join select * from A left outer join B on 條件; 右外連接:right outer join select * from A right outer join B on 條件;(9)Hive查詢操作-子查詢:
 查詢允許把一個查詢嵌套在另一個查詢當中,其實就是select的嵌套
 將查詢結果當成一個值。
將查詢結果當成一張表
select sid from score a, (select max(sscore) max_score from score) bwhere a.sscore = b.max_score;12、Hive內置函數:
在SparkSQL中提供了很多的內置函數(內嵌函數),包括聚合函數、數學函數,字符串函數、轉換函數,日期函數,條件函數,表生成函數等等。
 
(1)數學函數:
 
(2)字符串函數:
 
 (3)日期函數:
 
 (4)條件判斷函數:
 
 (5)行轉列操作:
 行轉列是指多行數據轉換為一個列的字段。
Hive行轉列用到的函數:
- concat_ws(sep, str1,str2) --以分隔符拼接每個字符串
- collect_set(col) --將某字段的值進行去重匯總,產生array類型字段
 
 
 (6)Hive內置函數-開窗函數:
row_number,rank,dense_rank:
 這三個函數用于數據排名,也可以用于分組排名。
 
 
 sum,avg,min,max:
sum用于實現分組內所有和連續累積的統計,sum,avg,min,max的用法和sum的用法相似。
 
總結
 
                            
                        - 上一篇: 大数据学习入门资料
- 下一篇: Quartus17.0 + ModelS
