日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

大数据入门知识总结

發(fā)布時間:2023/12/14 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 大数据入门知识总结 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

大數(shù)據(jù)入門知識總結(jié)

        • 一、大數(shù)據(jù)部門及流程
        • 二、數(shù)據(jù)倉庫
          • 1、數(shù)據(jù)倉庫的基本概念
          • 2、數(shù)據(jù)倉庫的主要特征
          • 3、數(shù)據(jù)倉庫與數(shù)據(jù)庫區(qū)別
          • 5、數(shù)據(jù)倉庫——ETL
        • 三、Hadoop——HDFS分布式存儲系統(tǒng)
          • 1、Hadoop簡介
          • 2、HDFS、Yarn、MapReduce
          • 3、Hadoop集群搭建
          • 4、HDFS的概述
          • 5、HDFS的Shell命令
          • 6、HDFS的基準(zhǔn)測試
        • 四、Hive
          • 1、什么是Hive
          • 2、Hive的特點(diǎn)
          • 3、Hive架構(gòu)
          • 4、Hive與傳統(tǒng)數(shù)據(jù)庫對比
          • 5、Hive計算引擎
        • 五、Hive的數(shù)據(jù)庫和表
          • 1、Hive數(shù)據(jù)庫操作
          • 2、Hive數(shù)據(jù)表操作
          • 3、表字段數(shù)據(jù)類型
          • 4、內(nèi)部表操作
          • 5、外部表操作
          • 6、復(fù)雜類型操作
          • 7、內(nèi)部表和外部表之間的轉(zhuǎn)換
          • 8、Hive表操作-分區(qū)表
          • 9、Zeppelin框架
          • 10、分桶表
          • 11、Hive查詢操作
          • 12、Hive內(nèi)置函數(shù):

一、大數(shù)據(jù)部門及流程

1、部門架構(gòu)

2、大數(shù)據(jù)處理流程

二、數(shù)據(jù)倉庫

1、數(shù)據(jù)倉庫的基本概念
  • 數(shù)據(jù)倉庫(Data Warehouse,DW/DWH)是一個很大的數(shù)據(jù)存儲集合,出于企業(yè)的分析性報告和決策支持目的而創(chuàng)建,對多樣的業(yè)務(wù)數(shù)據(jù)進(jìn)行篩選與整合。它為企業(yè)提供一定的BI(商業(yè)智能)能力,指導(dǎo)業(yè)務(wù)流程改進(jìn)、監(jiān)視時間、成本、質(zhì)量以及控制。

  • 數(shù)據(jù)倉庫的輸入方是各種各樣的數(shù)據(jù)源,最終的輸出用于企業(yè)的數(shù)據(jù)分析、數(shù)據(jù)挖掘、數(shù)據(jù)報表等方向。

  • 數(shù)據(jù)倉庫面向分析,平時的Mysql數(shù)據(jù)庫主要面向業(yè)務(wù)。

  • 數(shù)據(jù)倉庫是專門用來進(jìn)行數(shù)據(jù)分析的,它可以是Mysql、Oracle等數(shù)據(jù)庫,但是在大數(shù)據(jù)中常用到的是Hive

2、數(shù)據(jù)倉庫的主要特征

數(shù)據(jù)倉庫是面向主題的、集成的、穩(wěn)定的和時變的數(shù)據(jù)集合,用以支持管理決策。

(1)主題性
不同于傳統(tǒng)數(shù)據(jù)庫對應(yīng)于某一個或多個項目,數(shù)據(jù)倉庫根據(jù)使用者實(shí)際需求,將不同數(shù)據(jù)源的數(shù)據(jù)在一個較高的抽象層次上做整合,所有數(shù)據(jù)都圍繞某一主題來組織。
比如對于城市,“天氣濕度分析”就是一個主題。對于淘寶,“用戶點(diǎn)擊行為分析”就是一個主題。

(2)集成性
數(shù)據(jù)倉庫中存儲的數(shù)據(jù)是來源于多個數(shù)據(jù)源的集成,原始數(shù)據(jù)來自不同的數(shù)據(jù)源,存儲方式各不相同。要整合成為最終的數(shù)據(jù)集合,需要從數(shù)據(jù)源經(jīng)過一系列抽取、清洗、轉(zhuǎn)換的過程。

(3)穩(wěn)定性
數(shù)據(jù)倉庫中保存的數(shù)據(jù)是一系列歷史快照,不允許被修改。用戶只能通過分析工具進(jìn)行查詢和分析。這里說明一點(diǎn),數(shù)據(jù)倉庫基本上是不許允許用戶進(jìn)行修改,刪除操作的。大多數(shù)的場景是用來查詢分析數(shù)據(jù)。

(4)時變性
數(shù)據(jù)倉庫會定期接收新的集成數(shù)據(jù),反應(yīng)出最新的數(shù)據(jù)變化。這和穩(wěn)定特點(diǎn)并不矛盾。

3、數(shù)據(jù)倉庫與數(shù)據(jù)庫區(qū)別

(1)數(shù)據(jù)庫
數(shù)據(jù)庫是面向交易的處理系統(tǒng),它是針對具體業(yè)務(wù)在數(shù)據(jù)庫聯(lián)機(jī)的日常操作,通常對記錄進(jìn)行查詢、修改。用戶較為關(guān)心操作的響應(yīng)時間、數(shù)據(jù)的安全性、完整性和并發(fā)支持的用戶數(shù)等問題。傳統(tǒng)的數(shù)據(jù)庫系統(tǒng)作為數(shù)據(jù)管理的主要手段,主要用于操作型處理,也被稱為聯(lián)機(jī)事務(wù)處理 OLTP(On-Line Transaction Processing)。

(2)數(shù)據(jù)倉庫
數(shù)據(jù)倉庫一般針對某些主題的歷史數(shù)據(jù)進(jìn)行分析,支持管理決策,又被稱為聯(lián)機(jī)分析處理 OLAP(On-Line Analytical Processing)。首先要明白,數(shù)據(jù)倉庫的出現(xiàn),并不是要取代數(shù)據(jù)庫。

(3)兩者區(qū)別

  • 數(shù)據(jù)庫是面向事務(wù)的設(shè)計,數(shù)據(jù)倉庫是面向主題設(shè)計的。
  • 數(shù)據(jù)庫一般存儲業(yè)務(wù)數(shù)據(jù),數(shù)據(jù)倉庫存儲的一般是歷史數(shù)據(jù)。
  • 數(shù)據(jù)庫設(shè)計是盡量避免冗余,一般針對某一業(yè)務(wù)應(yīng)用進(jìn)行設(shè)計,比如一張簡單的User表,記錄用戶名、密碼等簡單數(shù)據(jù)即可,符合業(yè)務(wù)應(yīng)用,但是不符合分析。數(shù)據(jù)倉庫在設(shè)計是有意引入冗余,依照分析需求,分析維度、分析指標(biāo)進(jìn)行設(shè)計。
  • 數(shù)據(jù)庫是為捕獲數(shù)據(jù)而設(shè)計,數(shù)據(jù)倉庫是為分析數(shù)據(jù)而設(shè)計。以銀行業(yè)務(wù)為例。數(shù)據(jù)庫是事務(wù)系統(tǒng)的數(shù)據(jù)平臺,客戶在銀行做的每筆交易都會寫入數(shù)據(jù)庫,被記錄下來,這里,可以簡單地理解為用數(shù)據(jù)庫記賬。
  • 數(shù)據(jù)倉庫,是在數(shù)據(jù)庫已經(jīng)大量存在的情況下,為了進(jìn)一步挖掘數(shù)據(jù)資源、為了決策需要而產(chǎn)生的,它決不是所謂的“大型數(shù)據(jù)庫”。

(4)數(shù)據(jù)倉庫分層架構(gòu)
按照數(shù)據(jù)流入流出的過程,數(shù)據(jù)倉庫架構(gòu)可分為三層——源數(shù)據(jù)、數(shù)據(jù)倉庫、數(shù)據(jù)應(yīng)用。

數(shù)據(jù)倉庫的數(shù)據(jù)來源于不同的源數(shù)據(jù),并提供多樣的數(shù)據(jù)應(yīng)用,數(shù)據(jù)自下而上流入數(shù)據(jù)倉庫后向上層開放應(yīng)用,而數(shù)據(jù)倉庫只是中間集成化數(shù)據(jù)管理的一個平臺。

  • 源數(shù)據(jù)層(ODS): 操作性數(shù)據(jù)(Operational Data Store)
    ,是作為數(shù)據(jù)庫到數(shù)據(jù)倉庫的一種過渡,ODS的數(shù)據(jù)結(jié)構(gòu)一般與數(shù)據(jù)來源保持一致,而且ODS的數(shù)據(jù)周期一般比較短。ODS的數(shù)據(jù)為后一步的數(shù)據(jù)處理做準(zhǔn)備。
  • 數(shù)據(jù)倉庫層(DW):數(shù)據(jù)倉庫(Data Warehouse),是數(shù)據(jù)的歸宿,這里保持這所有的從ODS到來的數(shù)據(jù),并長期報錯,而且這些數(shù)據(jù)不會被修改,DW層的數(shù)據(jù)應(yīng)該是一致的、準(zhǔn)確的、干凈的數(shù)據(jù),即對源系統(tǒng)數(shù)據(jù)進(jìn)行了清洗(去除了雜質(zhì))后的數(shù)據(jù)。
  • 數(shù)據(jù)應(yīng)用層(DA):數(shù)據(jù)應(yīng)用(Dataapplication),為了特定的應(yīng)用目的或應(yīng)用范圍,而從數(shù)據(jù)倉庫中獨(dú)立出來的一部分?jǐn)?shù)據(jù),也可稱為部門數(shù)據(jù)或主題數(shù)據(jù),該數(shù)據(jù)面向應(yīng)用。如根據(jù)報表、專題分析需求而計算生成的數(shù)據(jù)。
5、數(shù)據(jù)倉庫——ETL

ETL(Extract-Transform-Load):數(shù)據(jù)的抽取、數(shù)據(jù)的轉(zhuǎn)換、數(shù)據(jù)的加載。將雜亂的數(shù)據(jù)轉(zhuǎn)換為可以處理分析的數(shù)據(jù)。ETL是將業(yè)務(wù)系統(tǒng)的數(shù)據(jù)經(jīng)過抽取、清洗、轉(zhuǎn)換之后加載到數(shù)據(jù)倉庫的過程,目的是將企業(yè)中分散、零亂、標(biāo)準(zhǔn)不統(tǒng)一的數(shù)據(jù)整合到一起。

ETL是數(shù)據(jù)倉庫的流水線,也可以認(rèn)為是數(shù)據(jù)倉庫的血液,它維系著數(shù)據(jù)倉庫中數(shù)據(jù)的新陳代謝,而數(shù)據(jù)倉庫日常的管理和維護(hù)工作的大部分精力就是保持ETL的正常和穩(wěn)定。

ETL流程:

可用于數(shù)據(jù)抽取的sql:

insert into table1 from select * from table2;

(1)可視化ETL平臺——Kettle
Kettle(PDI)是一款國外開源ETL工具,Java編寫,可在多平臺運(yùn)行,允許管理來自不同數(shù)據(jù)庫的數(shù)據(jù),并提供了一個圖形化的用戶環(huán)境。使用Kettle從眾多數(shù)據(jù)庫中抽取有用的數(shù)據(jù)放到數(shù)倉中。

(2)數(shù)據(jù)分析工具——Superset
Superset是一款開源的現(xiàn)代化企業(yè)級BI,是一款開源的數(shù)據(jù)分析可視化工具,支持多種數(shù)據(jù)源,圖表類型多。用于對數(shù)倉中的數(shù)據(jù)進(jìn)行分析及圖形化顯示。

基本步驟:

  • 連接數(shù)倉

  • 編寫sql分析數(shù)據(jù)

  • 圖形化顯示:

三、Hadoop——HDFS分布式存儲系統(tǒng)

1、Hadoop簡介

Hadoop是一個開源框架,它的核心組件有:

  • HDFS(分布式文件系統(tǒng)):解決海量數(shù)據(jù)存儲
  • MAPREDUCE(分布式運(yùn)算編程框架):解決海量數(shù)據(jù)計算
  • YARN(作業(yè)調(diào)度和集群資源管理的框架):解決資源任務(wù)調(diào)度

廣義上來說,Hadoop通常是指Hadoop生態(tài)圈:

重點(diǎn)框架:Kafka、Spark、Flink、Hive、Hbase、Zookeeper、Yarn、MapReduce、HDFS

版本:

  • 1.x版本系列:hadoop的第二代開源版本,該版本基本已被淘汰
  • 2.x版本系列:架構(gòu)產(chǎn)生重大變化,引入了Yarn平臺等許多新特性,是現(xiàn)在使用的主流版本。
  • 3.x版本系列:該版本是最新版本,但是還不太穩(wěn)定。

Hadoop發(fā)行版本分為開源社區(qū)版和商業(yè)版:

  • 開源社區(qū)版:指由Apache軟件基金會維護(hù)的版本,是官方維護(hù)的版本體系,版本豐富,兼容性稍差。
  • 商業(yè)版:指由第三方商業(yè)公司在社區(qū)版Hadoop基礎(chǔ)上進(jìn)行了一些修改、整合以及各個服務(wù)組件兼容性測試而發(fā)行的版本,比較著名的有cloudera的CDHTDH
2、HDFS、Yarn、MapReduce


(1)HDFS模塊:

  • NameNode:集群當(dāng)中的主節(jié)點(diǎn),主要用于管理集群當(dāng)中的各種數(shù)據(jù)。
  • SecondaryNameNode:主要用于hadoop中元數(shù)據(jù)信息的輔助管理。
  • DataNode:集群當(dāng)中的從節(jié)點(diǎn),主要用于存儲集群中的各種數(shù)據(jù)。

(2)數(shù)據(jù)計算核心模塊——Yarn:

  • ResourceManager:接收用戶的計算請求任務(wù),并負(fù)責(zé)集群的資源分配。
  • NodeManager: 負(fù)責(zé)執(zhí)行主節(jié)點(diǎn)分配的任務(wù)。

(3)Hadoop2.x架構(gòu)模型——MapReduce

(3)Hadoop模塊之間的關(guān)系

  • MapReduce計算需要的數(shù)據(jù)和產(chǎn)生的結(jié)果需要HDFS來進(jìn)行存儲
  • MapReduce的運(yùn)行需要由Yarn集群來提供資源調(diào)度。(MapReduce只是一段代碼,需要Yarn提供資源進(jìn)行調(diào)度)
3、Hadoop集群搭建

(1)HADOOP集群簡介
HADOOP集群包含:HDFS集群和YARN集群,兩者邏輯上分離,但物理上常在一起。

  • HDFS集群:NameNode、DataNode、SecondaryNameNode
  • YARN集群: ResourceManager、NodeManager

(2)集群搭建方式
單機(jī)模式(Standalone mode):

  • 單機(jī)模式, 1個機(jī)器上運(yùn)行HDFS的NameNode和DataNode、YARN的ResourceManger和NodeManager,主要用于學(xué)習(xí)和調(diào)試。

群集模式(Cluster mode):

  • 集群模式主要用于生產(chǎn)環(huán)境部署。會使用多臺主機(jī)組成一個Hadoop集群。這種部署模式下,主節(jié)點(diǎn)和從節(jié)點(diǎn)會分開部署在不同的機(jī)器上。
4、HDFS的概述

(1)概述

  • 單機(jī)容量往往無法存儲大量數(shù)據(jù),大數(shù)據(jù)需要跨機(jī)器存儲。統(tǒng)一管理分布在集群上的文件系統(tǒng)稱為分布式文件系統(tǒng) 。

  • HDFS(Hadoop Distributed File System)是 Apache Hadoop 項目的一個子項目. Hadoop 非常適于存儲大型數(shù)據(jù) (比如 TB 和 PB), 其就是使用 HDFS 作為存儲系統(tǒng). HDFS 使用多臺計算機(jī)存儲文件,
    并且提供統(tǒng)一的訪問接口, 像是訪問一個普通文件系統(tǒng)一樣使用分布式文件系統(tǒng)。

  • 分布式文件系統(tǒng)解決的問題就是大數(shù)據(jù)存儲。它們是橫跨在多臺計算機(jī)上的存儲系統(tǒng)。分布式文件系統(tǒng)在大數(shù)據(jù)時代有著廣泛的應(yīng)用前景,它們?yōu)榇鎯吞幚沓笠?guī)模數(shù)據(jù)提供所需的擴(kuò)展能力。

    (2)HDFS的特點(diǎn)

  • HDFS文件系統(tǒng)可存儲超大文件,時效性稍差。

  • HDFS具有硬件故障檢測和自動快速恢復(fù)功能。

  • HDFS為數(shù)據(jù)存儲提供很強(qiáng)的擴(kuò)展能力。

  • HDFS存儲一般為一次寫入,多次讀取,只支持追加寫入,不支持隨機(jī)修改。

  • HDFS可在普通廉價的機(jī)器上運(yùn)行。

(3)HDFS的架構(gòu)

  • HDFS采用Master/Slave架構(gòu)
  • 一個HDFS集群有兩個重要的角色,分別是Namenode和Datanode。
  • HDFS的四個基本組件:HDFS Client、NameNode、DataNode和Secondary NameNode。

Client:

  • 客戶端。
  • 文件切分。文件上傳 HDFS 的時候,Client 將文件切分成 一個一個的Block,然后進(jìn)行存儲。
  • 與 NameNode 交互,獲取文件的位置信息。
  • 與 DataNode 交互,讀取或者寫入數(shù)據(jù)。
  • Client 提供一些命令來管理 和訪問HDFS,比如啟動或者關(guān)閉HDFS。

NameNode:

  • master,管理者。
  • 管理 HDFS 元數(shù)據(jù)(文件路徑,文件的大小,文件的名字,文件權(quán)限,文件的block切片信息….)。
  • 配置副本策略。(為每個數(shù)據(jù),進(jìn)行備份)
  • 處理客戶端讀寫請求。

DataNode

  • Slave,NameNode 下達(dá)命令,DataNode 執(zhí)行實(shí)際的操作。
  • 存儲實(shí)際的數(shù)據(jù)塊。(存儲時以block為單位,每個block為128M)
  • 執(zhí)行數(shù)據(jù)塊的讀/寫操作。
  • 定時向namenode匯報block信息。

Secondary NameNode

  • 并非 NameNode 的熱備。當(dāng)NameNode 掛掉的時候,它并不能馬上替換 NameNode 并提供服務(wù)。
  • 輔助 NameNode,分擔(dān)其工作量。
  • 在緊急情況下,可輔助恢復(fù) NameNode。

(4)HDFS的副本機(jī)制

  • HDFS能夠在一個大集群中跨機(jī)器地存儲超大文件。它將每個文件存儲成一系列的數(shù)據(jù)塊——block,除了最后一個block,所有的數(shù)據(jù)塊都是同樣大小的128M。
  • 為了容錯,所有的block都會有副本,每個文件的數(shù)據(jù)塊大小和副本系數(shù)都是可配置的。
5、HDFS的Shell命令

Shell命令介紹:

  • 安裝好hadoop環(huán)境之后,可以執(zhí)行hdfs相關(guān)的shell命令對hdfs文件系統(tǒng)進(jìn)行操作,比如文件的創(chuàng)建、刪除、修改文件權(quán)限等。
  • 對HDFS的操作命令類似于Linux的shell對文件的操作,如ls、mkdir、rm等。

Hadoop提供了文件系統(tǒng)的shell命令使用格式如下:

  • hadoop fs <args> #既可以操作HDFS,也可以操作本地系統(tǒng)。
  • hdfs dfs <args> #只能操作HDFS系統(tǒng)。

(1)ls 顯示文件列表
格式: hadoop fs -ls URI

hadoop fs -ls / #顯示文件列表
hadoop fs –ls -R / #遞歸顯示文件列表

(2)mkdir 創(chuàng)建目錄
格式 : hadoop fs –mkdir [-p] <paths>

hadoop fs -mkdir /dir1 #創(chuàng)建目錄
hadoop fs -mkdir -p /aaa/bbb/ccc #遞歸創(chuàng)建目錄

(3)put 上傳文件
格式 : hadoop fs -put <localsrc> ... <dst>

作用 :
將單個的源文件或者多個源文件srcs從本地文件系統(tǒng)上傳到目標(biāo)文件系統(tǒng)中。

hadoop fs -put /root/1.txt /dir1 #上傳文件
hadoop fs –put /root/dir2 / #上傳目錄

(4)get 文件拷貝
格式 : hadoop fs -get <src> <localdst>

作用:將HDFS文件拷貝到本地文件系統(tǒng)。
hadoop fs -get /initial-setup-ks.cfg /opt #拷貝文件

(5)mv 移動文件
格式 :hadoop fs -mv <src> <dst>

作用: 將hdfs上的文件從原路徑src移動到目標(biāo)路徑dst,該命令不能跨文件系統(tǒng)。
hadoop fs -mv /dir1/1.txt /dir2 #HDFS中移動文件

(6)rm 刪除文件
格式: hadoop fs -rm [-r] [-skipTrash] URI [URI 。。。]

作用:

  • 刪除參數(shù)指定的文件和目錄,參數(shù)可以有多個,刪除目錄需要加-r參數(shù)。
  • 如果指定-skipTrash選項,那么在回收站可用的情況下,該選項將跳過回收站而直接刪除文件;

hadoop fs -rm /initial-setup-ks.cfg #刪除文件
hadoop fs -rm -r /dir2 #刪除目錄

(7)cp 復(fù)制文件
格式: hadoop fs -cp <src> <dst>

作用: 將文件拷貝到目標(biāo)路徑中

hadoop fs -cp /dir1/1.txt /dir2 #復(fù)制文件

(8)cat查看文件
格式: hadoop fs -cat <filepath>

作用:將參數(shù)所指示的文件內(nèi)容輸出到控制臺

hadoop fs -cat /dir1/1.txt #查看文件

6、HDFS的基準(zhǔn)測試

實(shí)際生產(chǎn)環(huán)境當(dāng)中,hadoop的環(huán)境搭建完成之后,第一件事情就是進(jìn)行壓力測試,測試我們的集群的讀取和寫入速度,這些操作被稱為基準(zhǔn)測試。

(1)寫入速度測試
向HDFS文件系統(tǒng)中寫入數(shù)據(jù),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文件系統(tǒng)中讀入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)清除測試數(shù)據(jù)

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是一個構(gòu)建在Hadoop上的數(shù)據(jù)倉庫框架。最初,Hive是由Facebook開發(fā),后來移交由Apache軟件基金會開發(fā),并作為一個Apache開源項目。
  • Hive是基于Hadoop的一個數(shù)據(jù)倉庫工具,可以將結(jié)構(gòu)化的數(shù)據(jù)文件映射為一張數(shù)據(jù)庫表,并提供類SQL查詢功能。
2、Hive的特點(diǎn)
  • Hive最大的特點(diǎn)是通過類SQL來分析大數(shù)據(jù),這樣使得分析數(shù)據(jù)更容易。
  • 數(shù)據(jù)是存儲在HDFS上的,Hive本身并不提供數(shù)據(jù)的存儲功能,它可以使已經(jīng)存儲的數(shù)據(jù)結(jié)構(gòu)化。
  • Hive是將數(shù)據(jù)映射成數(shù)據(jù)庫和一張張的表,庫和表的元數(shù)據(jù)信息一般存在關(guān)系型數(shù)據(jù)庫上(比如MySQL)。
  • 數(shù)據(jù)存儲方面:它能夠存儲很大的數(shù)據(jù)集,可以直接訪問存儲在Apache HDFS或其他數(shù)據(jù)存儲系統(tǒng)(如Apache HBase)中的文件。
  • 數(shù)據(jù)處理方面:Hive語句不適用于實(shí)時計算的場景,它適用于離線分析。
  • Hive支持MapReduce、Spark、Tez這兩種分布式計算引擎
  • 數(shù)據(jù)的存儲格式有多種,比如數(shù)據(jù)源是二進(jìn)制格式,普通文本格式等;
3、Hive架構(gòu)


(1)客戶端(寫SQL語句):

  • Client CLI(hive shell 命令行),JDBC/ODBC(java訪問hive),WEBUI(瀏覽器訪問hive)。

(2)元數(shù)據(jù)Metastore:

  • 本質(zhì)上只是用來存儲hive中有哪些數(shù)據(jù)庫,哪些表,表的字段,表所屬數(shù)據(jù)庫,分區(qū),表的數(shù)據(jù)所在目錄等,元數(shù)據(jù)默認(rèn)存儲在自帶的derby數(shù)據(jù)庫中,推薦使用MySQL存儲Metastore。

(3)驅(qū)動器Driver(解析和優(yōu)化SQL)

  • 解析器(SQLParser): 將SQL字符轉(zhuǎn)換成抽象語法樹AST,這一步一般使用都是第三方工具庫完成,比如antlr,對AST進(jìn)行語法分析,比如表是否存在,字段是否存在,SQL語句是否有誤。
  • 編譯器(Physical Plan):將AST編譯生成邏輯執(zhí)行計劃。
  • 優(yōu)化器(Query Optimizer):對邏輯執(zhí)行計劃進(jìn)行優(yōu)化。
  • 執(zhí)行器(Execution):把邏輯執(zhí)行計劃轉(zhuǎn)換成可以運(yùn)行的物理計劃,對于Hive來說,就是MR/Spark。

(4)存儲和執(zhí)行:

  • 存儲原數(shù)據(jù)和結(jié)果數(shù)據(jù),Hive使用HDFS/Hbase進(jìn)行存儲。
  • 使用計算引擎MapReduce等來執(zhí)行SQL。
4、Hive與傳統(tǒng)數(shù)據(jù)庫對比


注意:

hive具有sql數(shù)據(jù)庫的外表,但應(yīng)用場景完全不同,hive只適合用來做批量數(shù)據(jù)統(tǒng)計分析。

5、Hive計算引擎

(1)MapReduce

  • 它將計算分為兩個階段,分別為 Map 和 Reduce。對于應(yīng)用來說,需要想方設(shè)法將應(yīng)用拆分成多個map、reduce的作業(yè),以完成一個完整的算法。
  • MapReduce整個計算過程會不斷重復(fù)地往磁盤里讀寫中間結(jié)果,導(dǎo)致計算速度比較慢,效率比較低。


    (2)Tez
    Tez把Map/Reduce過程拆分成若干個子過程,同時可以把多個Map/Reduce任務(wù)組合成一個較大的DAG任務(wù),減少了Map/Reduce之間的文件存儲。

    (3)Spark
  • Apache Spark 是一個快速的, 多用途的集群計算系統(tǒng), 相對于 Hadoop MapReduce 將中間結(jié)果保存在磁盤中, Spark 使用了內(nèi)存保存中間結(jié)果, 能在數(shù)據(jù)尚未寫入硬盤時在內(nèi)存中進(jìn)行運(yùn)算,同時Spark提供SQL 支持。
  • Spark 實(shí)現(xiàn)了一種叫做 RDDs 的 DAG 執(zhí)行引擎, 其數(shù)據(jù)緩存在內(nèi)存中可以進(jìn)行迭代處理。

五、Hive的數(shù)據(jù)庫和表

Hive數(shù)倉和傳統(tǒng)關(guān)系型數(shù)據(jù)庫類似,管理數(shù)倉數(shù)據(jù)也是通過該數(shù)據(jù)庫和表。

1、Hive數(shù)據(jù)庫操作

(1)創(chuàng)建數(shù)據(jù)庫-默認(rèn)方式

create database if not exists myhive; show databases; #查看所有數(shù)據(jù)庫

注意:
hive的數(shù)據(jù)庫置默認(rèn)存放在/user/hive/warehouse目錄。

(2)創(chuàng)建數(shù)據(jù)庫-指定存儲路徑

create database myhive2 location '/myhive2’; show databases; #查看所有數(shù)據(jù)庫

注意:
location :用來指定數(shù)據(jù)庫的存放目錄

(3)查看數(shù)據(jù)庫詳細(xì)信息

desc database myhive;

(4)刪除數(shù)據(jù)庫
刪除一個空數(shù)據(jù)庫,如果數(shù)據(jù)庫下面有數(shù)據(jù)表,那么就會報錯:

drop database myhive;

強(qiáng)制刪除數(shù)據(jù)庫,包含數(shù)據(jù)庫下面的表一起刪除:

drop database myhive2 cascade;
2、Hive數(shù)據(jù)表操作

創(chuàng)建數(shù)據(jù)庫表語法:

  • CREATE TABLE 創(chuàng)建一個指定名字的表。如果相同名字的表已經(jīng)存在,則拋出異常;用戶可以用 IF NOT EXISTS
    選項來忽略這個異常。
  • EXTERNAL關(guān)鍵字可以讓用戶創(chuàng)建一個外部表,在建表的同時指定一個指向?qū)嶋H數(shù)據(jù)的路徑(LOCATION),Hive
    創(chuàng)建內(nèi)部表時,會將數(shù)據(jù)移動到數(shù)據(jù)倉庫指向的路徑;若創(chuàng)建外部表,僅記錄數(shù)據(jù)所在的路徑,不對數(shù)據(jù)的位置做任何改變。在刪除表的時候,內(nèi)部表的元數(shù)據(jù)和數(shù)據(jù)會被一起刪除,而外部表只刪除元數(shù)據(jù),不刪除數(shù)據(jù)。
  • LIKE允許用戶復(fù)制現(xiàn)有的表結(jié)構(gòu),但是不復(fù)制數(shù)據(jù)。
  • ROW FORMAT DELIMITED 可用來指定行分隔符。
  • STORED AS SEQUENCEFILE|TEXTFILE|RCFILE
    來指定該表數(shù)據(jù)的存儲格式,hive中,表的默認(rèn)存儲格式為TextFile。
  • CLUSTERED BY對于每一個表(table)進(jìn)行分桶(MapReuce中的分區(qū)),桶是更為細(xì)粒度的數(shù)據(jù)范圍劃分。Hive也是針對某一列進(jìn)行桶的組織。Hive采用對列值哈希,然后除以桶的個數(shù)求余的方式?jīng)Q定該條記錄存放在哪個桶當(dāng)中。
  • LOCATION: 指定表在HDFS上的存儲位置。

一般建表后綴添加:

clustered by (cust_id) into 2 buckets --分桶 開啟事務(wù),必須進(jìn)行分桶 stored as orc --存儲方式 tblproperties ('transactional'='true'); --開啟事務(wù)
3、表字段數(shù)據(jù)類型


4、內(nèi)部表操作

未被external修飾的是內(nèi)部表(managed table管理表),內(nèi)部表數(shù)據(jù)存儲位置由hive.metastore.warehouse.dir參數(shù)決定(默認(rèn):/user/hive/warehouse),刪除內(nèi)部表會直接刪除元數(shù)據(jù)(metadata)及存儲數(shù)據(jù),因此內(nèi)部表不適合和其他工具共享數(shù)據(jù)。

(1)建表:

create database myhive; use myhive; create table stu(id int,name string); select * from stu;

注意:
創(chuàng)建表之后,Hive會在對應(yīng)的數(shù)據(jù)庫文件夾下創(chuàng)建對應(yīng)的表目錄。

(2)創(chuàng)建表并指定字段之間的分隔符:

(3)根據(jù)查詢結(jié)果創(chuàng)建表:

create table stu3 as select * from stu2;

(4)根據(jù)已經(jīng)存在的表結(jié)構(gòu)創(chuàng)建表:

create table stu4 like stu2;

(5)查詢表的類型:

desc stu; #查看表結(jié)構(gòu)基本信息 desc formatted stu; #查看表結(jié)構(gòu)詳細(xì)信息

(6)刪除表:

drop table stu2;

注意:
查看數(shù)據(jù)庫和HDFS,發(fā)現(xiàn)刪除內(nèi)部表之后,所有的內(nèi)容全部刪除。

(5)Hive內(nèi)部表操作-數(shù)據(jù)添加:
方式1-直接插入數(shù)據(jù):

use mytest; #選擇數(shù)據(jù)庫 create table stu(id int,name string); #創(chuàng)建表#向表中插入數(shù)據(jù) insert into stu values(1,'zhangsan’); insert into stu values(2,'lisi');select * from stu; #查詢數(shù)據(jù)

注意:
該方式每次插入都會在表目錄中生成對應(yīng)的數(shù)據(jù)文件,每insert一次都會生成一個文件(insert的內(nèi)容),不推薦使用。

方式2-load數(shù)據(jù)加載:
Load命令用于將外部數(shù)據(jù)加載到Hive表中。

示例——本地加載:

#創(chuàng)建表,同時指定文件的分隔符 create table if not exists stu2(id int ,name string) row format delimited fields terminated by '\t’ ;#向表加載數(shù)據(jù) load data local inpath '/export/data/hivedatas/stu.txt' into table stu2;

示例——HDFS加載:

#創(chuàng)建表,同時指定文件的分隔符 create table if not exists stu3(id int ,name string) row format delimited fields terminated by '\t’ ;#向表加載數(shù)據(jù) 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內(nèi)部表特點(diǎn):

  • hive內(nèi)部表信息存儲默認(rèn)的文件路徑是在/user/hive/warehouse/databasename.db/tablename/目錄。
  • hive內(nèi)部表在進(jìn)行drop操作時,其表中的數(shù)據(jù)以及表的元數(shù)據(jù)信息均會被刪除。
  • 內(nèi)部表一般可以用來做中間表或者臨時表。

(7)元數(shù)據(jù):

  • Hive是建立在hadoop之上的數(shù)據(jù)倉庫,存在hive里的數(shù)據(jù)實(shí)際上就是存在HDFS上,都是以文件的形式存在。
  • Hive元數(shù)據(jù)用用來記錄數(shù)據(jù)庫和表的特征信息,比如數(shù)據(jù)庫的名字、存儲路徑、表的名字、字段信息,表文件存儲路徑等等。
  • 一般Hive的元數(shù)據(jù)是都保存在Mysql數(shù)據(jù)庫中。
5、外部表操作
  • 在創(chuàng)建表的時候可以指定external關(guān)鍵字創(chuàng)建外部表,外部表對應(yīng)的文件存儲在location指定的hdfs目錄下,向該目錄添加新文件的同時,該表也會讀取到該文件(當(dāng)然文件格式必須跟表定義的一致)。
  • 外部表因為是指定其他的hdfs路徑的數(shù)據(jù)加載到表當(dāng)中來,所以hive表會認(rèn)為自己不完全獨(dú)占這份數(shù)據(jù),所以刪除hive外部表的時候,數(shù)據(jù)仍然存放在hdfs當(dāng)中,不會刪掉。

(1)數(shù)據(jù)裝載命令load:
Load命令用于將外部數(shù)據(jù)加載到Hive表中。

  • load data:表示加載數(shù)據(jù)。
  • local:表示從本地加載數(shù)據(jù)到hive表;否則從HDFS加載數(shù)據(jù)到hive表。
  • inpath:表示加載數(shù)據(jù)的路徑。
  • overwrite:表示覆蓋表中已有數(shù)據(jù),否則表示追加。
  • into table:表示加載到哪張表。
  • student:表示具體的表。
  • partition:表示上傳到指定分區(qū)

創(chuàng)建老師與學(xué)生表外部表,并向表中加載數(shù)據(jù):
源數(shù)據(jù):

創(chuàng)建老師表:

創(chuàng)建學(xué)生表:

從本地文件系統(tǒng)向表中加載數(shù)據(jù):

加載數(shù)據(jù)并覆蓋已有數(shù)據(jù):

(2)從hdfs文件系統(tǒng)向表中加載數(shù)據(jù):
其實(shí)就是一個移動文件的操作

#需要提前將數(shù)據(jù)上傳到hdfs文件系統(tǒng) hadoop fs -mkdir -p /hivedatas cd /export/data/hivedatas hadoop fs -put teacher.csv /hivedatas/ load data inpath '/hivedatas/teacher.csv' into table teacher;

注意:
如果刪掉teacher表,hdfs的數(shù)據(jù)仍然存在,并且重新創(chuàng)建表之后,表中就直接存在數(shù)據(jù)了,因為我們的student表使用的是外部表,drop table之后,表當(dāng)中的數(shù)據(jù)依然保留在hdfs中。

6、復(fù)雜類型操作

(1)Array類型
Array是數(shù)組類型,Array中存放相同類型的數(shù)據(jù)。
源數(shù)據(jù):
說明:name與locations之間制表符分隔,locations中元素之間逗號分隔。

建表語句:

導(dǎo)入數(shù)據(jù)(從本地導(dǎo)入,同樣支持從HDFS導(dǎo)入):

常用查詢:

(2)map類型
map就是描述key-value數(shù)據(jù)。
源數(shù)據(jù):
說明:字段與字段分隔符: “,”;需要map字段之間的分隔符:“#”;map內(nèi)部k-v分隔符:“:”

建表語句:

導(dǎo)入數(shù)據(jù):

常用查詢:

(3)struct類型
源數(shù)據(jù):
說明:字段之間#分割,第二個字段之間冒號分割

建表語句:

導(dǎo)入數(shù)據(jù):

常用查詢:

7、內(nèi)部表和外部表之間的轉(zhuǎn)換

查詢表的類型

desc formatted student;#查看是內(nèi)部表還是外部表

修改外部表student為外內(nèi)部表:

alter table student set tblproperties('EXTERNAL'='FALSE');

修改內(nèi)部表student為哇外部表:

alter table student set tblproperties('EXTERNAL'='TRUE');

注意:
(‘EXTERNAL’=‘TRUE’)和(‘EXTERNAL’=‘FALSE’)為固定寫法,區(qū)分大小寫!

8、Hive表操作-分區(qū)表
  • 在大數(shù)據(jù)中,最常用的一種思想就是分治,分區(qū)表實(shí)際就是對應(yīng)hdfs文件系統(tǒng)上的的獨(dú)立的文件夾,該文件夾下是 該分區(qū)所有數(shù)據(jù)文件。
  • 分區(qū)可以理解為分類,通過分類把不同類型的數(shù)據(jù)放到不同的目錄下。
  • Hive中可以創(chuàng)建一級分區(qū)表,也可以創(chuàng)建多級分區(qū)表。

(1)創(chuàng)建一級分區(qū)表:

數(shù)據(jù)加載:

(2)創(chuàng)建多級分區(qū)表:

數(shù)據(jù)加載:

多分區(qū)聯(lián)合查詢使用union all來實(shí)現(xiàn):

查看分區(qū):

添加一個分區(qū):

同時添加多個分區(qū):

刪除分區(qū):

注意:
添加分區(qū)之后就可以在hdfs文件系統(tǒng)當(dāng)中看到表下面多了一個文件夾。

9、Zeppelin框架

Apache Zeppelin是一款基于Web交互式框架,支持多種語言,如Scala,SparkSQL, Markdown ,SQL,Shell和Python等。Zeppelin提供了數(shù)據(jù)分析、數(shù)據(jù)可視化等功能。

我們可以使用Zeppelin來連接到Spark SQL的Thrift Server,這樣我們可以以更直觀的方式來查看Hive中的數(shù)據(jù)。而且Zeppelin也可以以圖表的方式展示數(shù)據(jù)。

10、分桶表
  • 分桶就是將數(shù)據(jù)劃分到不同的文件,其實(shí)就是MapReduce的分區(qū)。

  • 將數(shù)據(jù)按照指定的字段進(jìn)行分成多個桶中去,說白了就是將數(shù)據(jù)按照字段進(jìn)行劃分,可以將數(shù)據(jù)按照字段劃分到多個文件當(dāng)中去。

11、Hive查詢操作


(1)Hive查詢操作-聚合函數(shù):
SparkSQL中提供的聚合函數(shù)可以用來統(tǒng)計、求和、求最值等等。

  • COUNT:統(tǒng)計行數(shù)量
  • SUM:獲取單個列的合計值
  • AVG:計算某個列的平均值
  • MAX:計算列的最大值
  • MIN:計算列的最小值

    (2)比較運(yùn)算符:

    like:
  • % 代表零個或多個字符(任意個字符)。
  • _ 代表一個字符。

    (3)邏輯運(yùn)算符:

    (4)Hive查詢操作-分組查詢:
    分組關(guān)鍵字是GROUP BY,該語句通常會和聚合函數(shù)一起使用,按照一個或者多個列隊結(jié)果進(jìn)行分組,然后對每個組執(zhí)行聚合操作。注意使用group by分組之后,select后面的字段只能是分組字段和聚合函數(shù)。

(5)Hive查詢操作-Having語句:
HAVING語句通常與GROUP BY語句聯(lián)合使用,用來過濾由GROUP BY語句返回的記錄集。HAVING語句的存在彌補(bǔ)了WHERE關(guān)鍵字不能與聚合函數(shù)聯(lián)合使用的不足。

(6)Hive查詢操作-排序:
排序關(guān)鍵字是order by ,用于根據(jù)指定的列對結(jié)果集進(jìn)行排序。在排序時,我們可以指定排序順序,asc為升序(默認(rèn)),desc為降序。

(7)Hive查詢操作-limit語句:
limit子句用于限制查詢結(jié)果返回的數(shù)量。

#查詢3條數(shù)據(jù) select * from student limit 3;

(8)Hive查詢操作-多表查詢:
內(nèi)連接查詢

隱式內(nèi)連接: select * from A,B where 條件; 顯示內(nèi)連接:select * from A inner join B on 條件;

外連接查詢

左外連接:left outer join select * from A left outer join B on 條件; 右外連接:right outer join select * from A right outer join B on 條件;

(9)Hive查詢操作-子查詢:
查詢允許把一個查詢嵌套在另一個查詢當(dāng)中,其實(shí)就是select的嵌套
將查詢結(jié)果當(dāng)成一個值。

#查詢成績最高學(xué)生的sid select sid from score where sscore = (select max(sscore) from score);

將查詢結(jié)果當(dāng)成一張表

select sid from score a, (select max(sscore) max_score from score) bwhere a.sscore = b.max_score;
12、Hive內(nèi)置函數(shù):

在SparkSQL中提供了很多的內(nèi)置函數(shù)(內(nèi)嵌函數(shù)),包括聚合函數(shù)、數(shù)學(xué)函數(shù),字符串函數(shù)、轉(zhuǎn)換函數(shù),日期函數(shù),條件函數(shù),表生成函數(shù)等等。

(1)數(shù)學(xué)函數(shù):

(2)字符串函數(shù):

(3)日期函數(shù):

(4)條件判斷函數(shù):

(5)行轉(zhuǎn)列操作:
行轉(zhuǎn)列是指多行數(shù)據(jù)轉(zhuǎn)換為一個列的字段。

Hive行轉(zhuǎn)列用到的函數(shù):

  • concat_ws(sep, str1,str2) --以分隔符拼接每個字符串
  • collect_set(col) --將某字段的值進(jìn)行去重匯總,產(chǎn)生array類型字段


    (6)Hive內(nèi)置函數(shù)-開窗函數(shù):

row_number,rank,dense_rank:
這三個函數(shù)用于數(shù)據(jù)排名,也可以用于分組排名。


sum,avg,min,max:

sum用于實(shí)現(xiàn)分組內(nèi)所有和連續(xù)累積的統(tǒng)計,sum,avg,min,max的用法和sum的用法相似。

總結(jié)

以上是生活随笔為你收集整理的大数据入门知识总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。