Hive

来源:http://www.cnblogs.com/Smileing/archive/2017/07/21/7219560.html
-Advertisement-
Play Games

Hive Hive是基於Hadoop的一個數據倉庫工具,可以將結構化的數據文件映射為一張資料庫表,並提供類SQL查詢功能。 1.1為什麼使用Hive 為什麼要使用Hive 操作介面採用類SQL語法,提供快速開發的能力。 避免了去寫MapReduce,減少開發人員的學習成本。擴展功能很方便。 1.2 ...


Hive

Hive是基於Hadoop的一個數據倉庫工具,可以將結構化的數據文件映射為一張資料庫表,並提供類SQL查詢功能。

1.1為什麼使用Hive

 為什麼要使用Hive

操作介面採用類SQL語法,提供快速開發的能力。

避免了去寫MapReduce,減少開發人員的學習成本。擴展功能很方便。

1.2 Hive的特點

可擴展:Hive可以自由的擴展集群的規模,一般情況下不需要重啟服務。

延展性:Hive支持用戶自定義函數,用戶可以根據自己的需求來實現自己的函數。

 容錯:良好的容錯性,節點出現問題SQL仍可完成執行。

1.3各組件的功能

  • 用戶介面主要由三個:CLI、JDBC/ODBC和WebGUI。其中,CLIshell命令行;JDBC/ODBCHiveJAVA實現,與傳統資料庫JDBC類似;WebGUI是通過瀏覽器訪問Hive
  • 元數據存儲:Hive 將元數據存儲在資料庫中。Hive 中的元數據包括表的名字,表的列和分區及其屬性,表的屬性(是否為外部表等),表的數據所在目錄等
  • 解釋器、編譯器、優化器完成 HQL 查詢語句從詞法分析、語法分析、編譯、優化以及查詢計劃的生成。生成的查詢計劃存儲在 HDFS 中,併在隨後有 MapReduce 調用執行

1.4 HiveHadoop關係 

Hive利用HDFS存儲數據,利用MapReduce查詢數據

 

1.5 hive與傳統資料庫對比

hive具有sql資料庫的外表但應用場景完全不同hive只適合用來做批量數據統計分析

 

1.查詢語言。由於 SQL 被廣泛的應用在數據倉庫中,因此,專門針對 Hive 的特性設計了類 SQL 的查詢語言 HQL。熟悉 SQL 開發的開發者可以很方便的使用 Hive 進行開發。
2.數據存儲位置。Hive是建立在Hadoop之上的,所有Hive的數據都是存儲在HDFS中的。而資料庫則可以將數據保存在塊設備或者本地文件系統中。
3.數據格式。Hive 中沒有定義專門的數據格式,數據格式可以由用戶指定,用戶定義數據格式需要指定三個屬性:列分隔符(通常為空格、”\t”、”\x001″)、行分隔符(”\n”)以及讀取文件數據的方法(Hive 中預設有三個文件格式 TextFile,SequenceFile 以及 RCFile)。由於在載入數據的過程中,不需要從用戶數據格式到 Hive 定義的數據格式的轉換,因此,Hive 在載入的過程中不會對數據本身進行任何修改,而只是將數據內容複製或者移動到相應的 HDFS 目錄中。而在資料庫中,不同的資料庫有不同的存儲引擎,定義了自己的數據格式。所有數據都會按照一定的組織存儲,因此,資料庫載入數據的過程會比較耗時。
4.數據更新。由於 Hive 是針對數據倉庫應用設計的,而數據倉庫的內容是讀多寫少的。因此,Hive 中不支持對數據的改寫和添加,所有的數據都是在載入的時候中確定好的。而資料庫中的數據通常是需要經常進行修改的,因此可以使用 INSERT INTO ...  VALUES 添加數據,使用 UPDATE ... SET 修改數據。
5.索引。之前已經說過,Hive 在載入數據的過程中不會對數據進行任何處理,甚至不會對數據進行掃描,因此也沒有對數據中的某些 Key 建立索引。Hive 要訪問數據中滿足條件的特定值時,需要暴力掃描整個數據,因此訪問延遲較高。由於 MapReduce 的引入, Hive 可以並行訪問數據,因此即使沒有索引,對於大數據量的訪問,Hive 仍然可以體現出優勢。資料庫中,通常會針對一個或者幾個列建立索引,因此對於少量的特定條件的數據的訪問,資料庫可以有很高的效率,較低的延遲。由於數據的訪問延遲較高,決定了 Hive 不適合線上數據查詢。
6.執行。Hive 中大多數查詢的執行是通過 Hadoop 提供的 MapReduce 來實現的,而資料庫通常有自己的執行引擎。
7.執行延遲。之前提到,Hive 在查詢數據的時候,由於沒有索引,需要掃描整個表,因此延遲較高。另外一個導致 Hive 執行延遲高的因素是 MapReduce 框架。由於 MapReduce 本身具有較高的延遲,因此在利用 MapReduce 執行 Hive 查詢時,也會有較高的延遲。相對的,資料庫的執行延遲較低。當然,這個低是有條件的,即數據規模較小,當數據規模大到超過資料庫的處理能力的時候,Hive 的並行計算顯然能體現出優勢。
8.可擴展性。由於 Hive 是建立在 Hadoop 之上的,因此 Hive 的可擴展性是和 Hadoop 的可擴展性是一致的(世界上最大的 Hadoop 集群在 Yahoo!,2009年的規模在 4000 台節點左右)。而資料庫由於 ACID 語義的嚴格限制,擴展行非常有限。目前最先進的並行資料庫 Oracle 在理論上的擴展能力也只有 100 台左右。
9.數據規模。由於 Hive 建立在集群上並可以利用 MapReduce 進行並行計算,因此可以支持很大規模的數據;對應的,資料庫可以支持的數據規模較小。

 

1.6 Hive的數據存儲

1Hive中所有的數據都存儲在 HDFS 沒有專門的數據存儲格式(可支持TextSequenceFileParquetFileRCFILE等)

2只需要在創建表的時候告訴 Hive 數據中的列分隔符和行分隔符,Hive 就可以解析數據。

3Hive 中包含以下數據模型:DBTableExternal TablePartitionBucket

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

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

² external table外部表, table類似,不過其數據存放位置可以在任意指定路徑

普通表: 刪除表後, hdfs上的文件都刪了

External外部表刪除後, hdfs上的文件沒有刪除, 只是把文件刪除了

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

² bucket, hdfs中表現為同一個表目錄下根據hash散列之後的多個文件, 會根據不同的文件把數據放到不同的文件中 

1.7hive的配置

 

1 解壓Hive,到/usr/local目錄,將解壓後的目錄名mv為hive
2 設定環境變數HADOOP_HOME,HIVE_HOME,將bin目錄加入到PATH中
vim /etc/profile
export HADOOP_HOME=/usr/local/hadoop
export HIVE_HOME=/usr/local/hive
export PATH=$PATH:/usr/local/hadoop/bin:/usr/local/hadoop/sbin
export PATH=$PATH:$HIVE_HOME/bin
3 cd /usr/local/hive/conf
cp hive-default.xml.template hive-site.xml
修改hive.metastore.schema.verification,設定為false
創建/usr/local/hive/tmp目錄,替換${system:java.io.tmpdir}為該目錄
替換${system:user.name}為root
4 再hive路徑下
schematool -initSchema -dbType derby
( metastore_db已創建,當在次有毛病時,刪了重新這一步,會在當前目錄下簡歷metastore_db的資料庫。
註意!!!下次執行hive時應該還在同一目錄,預設到當前目錄下尋找metastore。
遇到問題,把metastore_db刪掉,重新執行命令,實際工作環境中,經常使用mysql作為metastore的數據)

5 啟動hive(前提是Hadoop和集群啟動了!!!!start-dfs.sh !!start-yarn.sh)
直接 hive
hive> create table wordcount(line string);
hive>show tables;
hive>desc wordcount ;
表存在dfs -ls /usr/hive/;
實驗wordcount!!!
load data inpath '/wcinput' overwrite into table doc;
select * from doc;
select split(line, ' ') from doc;
select explode(split(line, ' ')) from doc;
select word, count(1) as count from (select explode(split(line, ' ')) as word from doc) w group by word;
select word, count(1) as count from (select explode(split(line, ' ')) as word from doc) w group by word order by word;
create table word_counts as select word, count(1) as count from (select explode(split(line, ' ')) as word from doc) w group by word order by word;


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

-Advertisement-
Play Games
更多相關文章
  • 本文記錄在MySQL使用過程中,新掌握的一些知識點,和問題解決方案 ...
  • 剛剛學習了資料庫,並且安裝了MySQL,正當高興之餘,發現我的MySQL出現了閃退的顯現。上網搜了好久的解決方案。最後解決了這個問題,也舒心了。 問題從這裡開始: 接著我打開MySQL,尋思能不能用,結果閃退了。 接著我去服務端,檢查它有沒有開啟,試著開啟,發現也不行。 網上有結果說要刪除Windo ...
  • indexedDB資料庫的基本概念:在HTML5中,新增一種被稱為“indexedDB”的資料庫,該資料庫是一種存儲在客戶端本地的NoSQL資料庫。 顯示效果: ...
  • 一、資料庫的基本概念 資料庫: 以一定方式儲存在一起、能為多個用戶共用、具有儘可能小的冗餘度的特點、是與應用程式彼此獨立的數據集合。 DBMS(DataBase Management System,資料庫管理系統)和資料庫。平時談到“資料庫”可能有兩種含義:MSSQLServer、Oracle等某種 ...
  • 高飛狗這幾天特別鬱悶,不知該如何通過TCP/IP協議連接SQL Server資料庫。好在功夫不負有心人,經過幾天的刻苦研究,終於得到了答案。 高飛狗呼叫UDP1434埠,"叮鈴鈴,叮鈴鈴…" UDP1434埠:您好,我是SQL Server Browser,我的名字是黛絲,請問有什麼可以幫您的嗎 ...
  • 1. hbase簡介 1.1. 什麼是hbase HBASE是一個高可靠性、高性能、面向列、可伸縮的分散式存儲系統,利用HBASE技術可在廉價PC Server上搭建起大規模結構化存儲集群。 HBASE的目標是存儲並處理大型的數據,更具體來說是僅需使用普通的硬體配置,就能夠處理由成千上萬的行和列所組 ...
  • 本文出處:http://www.cnblogs.com/wy123/p/7218316.html (保留出處並非什麼原創作品權利,本人拙作還遠遠達不到,僅僅是為了鏈接到原文,因為後續對可能存在的一些錯誤進行修正或補充,無他) 資料庫中的事物是具有原子性(Atomicity),一致性(Consiste ...
  • 在一個完整的大數據處理系統中,除了hdfs+mapreduce+hive組成分析系統的核心之外,還需要數據採集、結果數據導出、任務調度等不可或缺的輔助系統,而這些輔助工具在hadoop生態體系中都有便捷的開源框架。 1 日誌採集框架Flume Flume是一個分散式、可靠、和高可用的海量日誌採集、聚 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...