hive--數據倉庫

来源:https://www.cnblogs.com/sdifens/archive/2019/01/21/10297625.html
-Advertisement-
Play Games

1.1.1 hive是什麼? Hive是基於 Hadoop 的一個數據倉庫工具: 1.1.2 hive和Hadoop關係 Hive利用HDFS存儲數據,利用MapReduce查詢數據,聚合函數需要經過MapReduce,非聚合函數直接讀取hdfs塊信息,不通過MapReduce。 1.1.3 hiv ...


1.1.1     hive是什麼?

Hive是基於 Hadoop 的一個數據倉庫工具:

  1. 1.       hive本身不提供數據存儲功能,使用HDFS做數據存儲;
  2. 2.       hive也不分散式計算框架,hive的核心工作就是把sql語句翻譯成MR程式;
  3. 3.       hive也不提供資源調度系統,也是預設由Hadoop當中YARN集群來調度;
  4. 4.       可以將結構化的數據映射為一張資料庫表,並提供 HQL(Hive SQL)查詢功能。

1.1.2     hive和Hadoop關係

Hive利用HDFS存儲數據,利用MapReduce查詢數據,聚合函數需要經過MapReduce,非聚合函數直接讀取hdfs塊信息,不通過MapReduce。

1.1.3     hive特點

  1. 可以將結構化的數據文件映射為一張資料庫表(二維表),並提供類SQL查詢功能
  2. 可以將sql語句轉換為MapReduce任務進行運行。Hive 將用戶的HiveQL 語句通過解釋器轉換為MapReduce 作業提交到Hadoop 集群上,Hadoop 監控作業執行過程,然後返回作業執行結果給用戶。
  3. Hive 在載入數據過程中不會對數據進行任何的修改,只是將數據移動到HDFS 中Hive 設定的目錄下,因此,Hive 不支持對數據的改寫和添加,所有的數據都是在載入的時候確定的。
  4. Hive的適應場景:只適合做海量離線數據的統計分析。
  5. Hive中所有的數據都存儲在 HDFS 中,沒有專門的數據存儲格式(可支持Text,SequenceFile,ParquetFile,RCFILE等)
  6. 只需要在創建表的時候告訴 Hive 數據中的列分隔符和行分隔符,Hive 就可以解析數據。
  7. Hive 中包含以下數據模型:DB、Table,External Table,Partition,Bucket。

1.1.4     hive數據的存儲

db:在hdfs中表現為${hive.metastore.warehouse.dir}目錄下一個文件夾

table:在hdfs中表現所屬db目錄下一個文件夾

external table:與table類似,不過其數據存放位置可以在任意指定路徑

partition:在hdfs中表現為table目錄下的子目錄

bucket:在hdfs中表現為同一個表目錄下根據hash散列之後的多個文件

1.1.5     Hive 體繫結構

 

 1.1.6     hive的架構原理

 

   Driver是核心,Driver可以解析語法,最難的就是解析sql的語法,只要把SQL的語法解析知道怎麼做了,它內部用MapReduce模板程式,它很容易把它組裝起來,比如做一個join操作,最重要的是識別語法,認識你的語法,知道你語法有什麼東西,解析出來會得到一個語法樹,根據一些語法樹,去找一些MapReduce模板程式,把它組裝起來。

  例如:有二個表去join,內部有一個優化機制,有一個預設值,如果小表小於預設值,就採用map—join ,如果小表大於預設值,就採用reduce——join(其中map——join是先把小表載入到記憶體中),組裝時候就是輸入一些參數:比如:你的輸入數據在哪裡,你的表數據的分隔符是什麼,你的文件格式是什麼:然而這些東西是我們建表的時候就指定了,所以這些都知道了,程式就可以正常的跑起來。

  Hive有了Driver之後,還需要藉助Metastore,Metastore裡邊記錄了hive中所建的:庫,表,分區,分桶的信息,描述信息都在Metastore,如果用了MySQL作為hive的Metastore:需要註意的是:你建的表不是直接建在MySQL里,而是把這個表的描述信息放在了MySQL里,而tables表,欄位表是存在HDFS上的hive表上,hive會自動把他的目錄規劃/usr/hive/warehouse/庫文件/庫目錄/表目錄,你的數據就在目錄下

1.1.7     內外表

內部表在刪除表的時候,會刪除元數據和數據;外部表在刪除表的時候,只刪除元數據,不刪除數據        

內部表和外部表使用場景:

  1. 一般情況來說,如果數據只交給hive處理,那麼一般直接使用內部表;
  2. 如果數據需要多個不同的組件進行處理,那麼最好用外部表,一個目錄的數據需要被spark、hbase等其他組件使用,並且hive也要使用,那麼該份數據通過創建一張臨時表為外部表,然後通過寫HQL語句轉換該份數據到hive內部表中

1.1.8     分桶

分桶操作:按照用戶創建表時指定的分桶欄位進行hash散列,跟MapReduce中的HashPartitioner的原理一模一樣。

MapReduce中:按照key的hash值去模除以reductTask的個數;Hive中:按照分桶欄位的hash值去模除以分桶的個數

hive分桶操作的效果:把一個文件按照某個特定的欄位和桶數散列成多個文件好處:

1、方便抽樣;

2、提高join查詢效率  

1.1.9     Hive分區

  做統計的時候少統計,把我們的數據放在多個文件夾裡邊,我們統計時候,可以指定分區,這樣範圍就會小一些,這樣就減少了運行的時間。

1.1.10 Hive 的所有跟數據相關的概念

db: myhive,   table: student     元數據:hivedb

Hive的元數據指的是 myhive 和 student等等的庫和表的相關的各種定義信息,該元數據都是存儲在mysql中的:

  1. myhive是hive中的一個資料庫的概念,其實就是HDFS上的一個文件夾,跟mysql沒有多大的關係;
  2. myhive是hive中的一個資料庫,那麼就會在元資料庫hivedb當中的DBS表中存儲一個記錄,這一條記錄就是myhive這個hive中數據的相關描述信息。
  3. hive中創建一個庫,就相當於是在hivedb中DBS(資料庫)中插入一張表, 並且在HDFS上建立相應的目錄—主目錄;
  4. hive中創建一個表,就相當於在hivedb中TBLS(資料庫中的表)表中插入一條記錄,並且在HDFS上項目的庫目錄下創建一個子目錄;
  5. 一個hive數據倉庫就依賴於一個RDBMS(關係資料庫管理系統)中的一個資料庫,一個資料庫實例對應於一個Hive數據倉庫;
  6. 存儲於該hive數據倉庫中的所有數據的描述信息,都統統存儲在元資料庫hivedb中。
  7. Hive元數據 :描述和管理這些block信息的數據,由namenode管理,一定指跟 hivedb相關,跟mysql相關;
  8. Hive源數據-- block塊: HDFS上的對應表的目錄下的文件HDFS上的數據和元數據。

1.1.11 源數據與元數據

myhive 和  hivedb的區別:

  1. myhive是hive中的資料庫: 用來存儲真實數據—源數據;
  2. hivedb是mysql中的資料庫: 用來多個類似myhive庫的真實數據的描述數據—元數據;

1.1.12 Hive基本命令整理

創建表:CREATE TABLE pokes (foo INT, bar STRING);
        Creates a table called pokes with two columns, the first being an integer and the other a string

創建一個新表,結構與其他一樣
hive> create table new_table like records;

創建分區表:
hive> create table logs(ts bigint,line string) partitioned by (dt String,country String);

載入分區表數據:
hive> load data local inpath '/home/hadoop/input/hive/partitions/file1' into table logs partition (dt='2001-01-01',country='GB');

展示表中有多少分區:
hive> show partitions logs;

展示所有表:
hive> SHOW TABLES;
        lists all the tables
hive> SHOW TABLES '.*s';

lists all the table that end with 's'. The pattern matching follows Java regular
expressions. Check out this link for documentation

顯示表的結構信息
hive> DESCRIBE invites;
        shows the list of columns

更新表的名稱:
hive> ALTER TABLE source RENAME TO target;

添加新一列
hive> ALTER TABLE invites ADD COLUMNS (new_col2 INT COMMENT 'a comment');
刪除表:
hive> DROP TABLE records;
刪除表中數據,但要保持表的結構定義
hive> dfs -rmr /user/hive/warehouse/records;

從本地文件載入數據:
hive> LOAD DATA LOCAL INPATH '/home/hadoop/input/ncdc/micro-tab/sample.txt' OVERWRITE INTO TABLE records;

顯示所有函數:
hive> show functions;

查看函數用法:
hive> describe function substr;

查看數組、map、結構
hive> select col1[0],col2['b'],col3.c from complex;

其他同oracle相同

1.1.13 hive環境搭建

hive的元數據是存放在mysql中的,首先需要安裝mysql資料庫;然後修改hive配置文件,主要是資料庫用戶、密碼、hadoop文件存放的路徑等等。--請看mysql的環境搭建


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 上一節大致瞭解TCP/IP協議棧是個啥東西,依舊是霧裡看花的狀態,有很多時候學一門新知識時,開頭總是很急躁,無從下手,剛學會一點兒,卻發現連點皮毛都不算,成就感太低,所以任何時候學習最重要的是要在合適的時間掌握應該掌握的知識,循序漸進方能進步。 先簡單回顧一下,TCP/IP協議棧: 如果為每一層加上 ...
  • 一 簡介 Ansible是一款極其簡單的自動化運維工具, 基於Python開發, 集合了眾多運維工具(puppet, cfengine, chef, func, fabric)的優點。 實現了批量系統配置, 批量程式部署, 批量運行命令等功能。 Ansible是基於模塊工作的, 本身沒有批量部署的能 ...
  • 一. 背景 今天在MongoDB 4.0.4版本下,在還原恢複數據庫時報錯。 主要錯誤為: Failed: restore error: error applying oplog: applyOps: not authorized on admin to execute command { appl ...
  • 安裝完mysql之後,登陸以後,不管運行任何命令,總是提示這個:mac mysql error You must reset your password using ALTER USER statement before executing this statement. step 1: set p ...
  • 正文 另一篇博文總結了關於SQL TRACE工具的使用方式,但是產生的trace文件格式閱讀起來並不是十分友好,為了更好的分析trace文件,Oracle也自帶了一個格式化工具 tkprof 。 tkprof 工具用於處理原始的trace文件,合併彙總trace文件當中一些項目值,然後進行格式化,這 ...
  • 一.介紹 首先說一下,我們寫項目一般都會建一個資料庫,那資料庫裡面是不是存了好多張表啊,不可能把所有的數據都放到一張表裡面,肯定要分表來存數據,這樣節省空間,數據的組織結構更清晰,解耦和程度更高,但是這些表本質上是不是還是一個整體啊,是一個項目所有的數據,那既然分表存了,就要涉及到多個表連接查詢了, ...
  • 問題一般格式為: 1366 Incorrect string value: '' for column 1300 Invalid utf8 character string: '' 向mysql插入中文(東亞字元)出現問題一般是有欄位不是utf8的問題。 向mysql插入腦殘文/火星文/特殊字元出現 ...
  • 資料庫連表查詢中的nvarchar類型欄位,tb_Users.Certificates is not null條件,is not null 會導致查詢速度慢很多(因為和“=”號條件遍歷方式不一樣)。 替換為 “LEN(tb_Users.Certificates) >0”,利用 Users.Certi ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...