Hive基本原理及配置Mysql作為Hive的默認數據庫


Hive是什么?

  • Hive是基於Hadoop之上的數據倉庫;
  • Hive是一種可以存儲、查詢、分析存儲在hadoop中的大規模數據
  • Hive定義了簡單的類SQL查詢語言,成為HQL,它允許熟悉SQL的用戶查詢數據
  • 允許熟悉MapReduce開發者的開發自定義的mapper和reducer來處理內建的mapper和reducer無法完成的復雜的分析工作
  • Hive沒有專門的數據格式

 

  • Hive:數據倉庫。
  • Hive:解釋器,編譯器,優化器等。
  • Hive運行時,元數據存儲在關系型數據庫里面。

1. 為什么選擇Hive

  • 基於Hadoop的大數據的計算/擴展能力
  • 支持SQL like查詢語言
  • 統一的元數據管理
  • 簡單編程

 

2.Hive內部是什么

Hive是建立在Hadoop上的數據倉庫基礎架構。它提供了一系列的工具,可以用來進行數據提取轉化加載(ETL),這是一種可以存儲、查詢和分析存儲在Hadoop中的大規模數據的機制。Hive定義了簡單的類SQL查詢語言,稱為QL,它允許熟悉SQL的用戶查詢數據。同時,這個語言也允許熟悉MapReduce開發者的開發自定義的mapper和reducer來處理內建的mapper和reducer無法完成的復雜的分析工作。

本質上講,Hive是一個SQL解析引擎,Hive可以把SQL查詢轉換為MapReduce中的job來運行。Hive有一套映射工具,可以把SQL轉換為MapReduce中的job,可以把SQL中的表、字段轉換為HDFS中的文件(夾)以及文件中的列。這套映射工具稱之為metastore,一般存放在derby、mysql中。

Hive是SQL解析引擎,它將SQL語句轉譯成M/R Job然后在Hadoop執行。

Hive的表其實就是HDFS的目錄/文件,按表名把文件夾分開。如果是分區表,則分區值是子文件夾,可以直接在M/R Job里使用這些數據。

Hive在hdfs中的默認位置是/user/hive/warehouse

 

3. Hive的系統架構

 

 

  • 用戶接口

主要有3個:包括CLI,JDBC/ODBC,WebUI。

CLI,即Shell命令行;

JDBC/ODBC是Hive的Java,與使用傳統數據庫JDBC的方式類似

WebGUI是通過瀏覽器訪問Hive

  •  元數據存儲

通常是存儲在關系數據庫如mysql,derby中。Hive將元數據存儲在數據庫中(metastore),目前只支持mysql,derby。Hive中的元數據包括表的名字,表的列和分區及其屬性,表的屬性(是否為外部表等),表的數據所在目錄等。

  • 解釋器、編譯器、優化器、執行器

完成HQL查詢語句從詞法分析、語法分析、編譯、優化以及查詢計划的生成。生成的查詢計划存儲在HDFS中,並在隨后有MapReduce調用執行。Hive的數據存儲在HDFS中,大部分的查詢由MapReduce完成(包含*的查詢,比如select * from table不會生成MapReduce任務)

  • Hadoop

HDFS進行存儲,利用MapReduce進行計算。

  • HIVE的架構

 

 

Hive的架構:

——編譯器(compiler)將一個Hive QL轉換操作符

——操作符是Hive的最小的處理單元

——每個操作符代表HDFS的一個操作或者一道MapReduce作業

 

Hive的三種模式:

——local模式,此模式連接到一個In-memory的數據塊Derby,一般用於Unit Test.

——單用戶模式,通過網絡連接到一個數據庫中,是最經常使用到的模式

——多用戶模式,或者遠程服務器模式。 用於非Java客戶端訪問元數據庫,在服務器端啟動MetaStoreServer,客戶端利用Thrift協議通過MetaStoreServer訪問元數據庫。

local模式:

 

 

單用戶模式:

 

 

多用戶模式:(遠程服務器模式)

 

 

HIVE的Metastore:

Metastore:hive元數據的集中存放地,metastore默認使用內嵌的derby數據庫作為存儲引擎。

Derby引擎的缺點,一次只能打開一個會話。

使用Mysql作為外置存儲引擎,多用戶同時訪問。

 

4. 配置MySql的metastore

PS:metastore默認使用derby數據庫作為存儲引擎,但是一次只能打開一個會話,修改成Mysql作為外置存儲引擎,進行多用戶同時訪問。

    前提:已經安裝MYSQL

         未安裝mysql,可參考文章:https://www.cnblogs.com/wendyw/p/11389741.html

  • 1.上傳mysql-connector-java-5.1.10.jar到$HIVE_HOME/lib
  • 2.登錄MYSQL,創建數據庫hive
 #mysql -uroot -pitcast

mysql>create database hive;

mysql>GRANT all ON hive.* TO root@'%' IDENTIFIED BY 'itcast';

mysql>flush privileges;

mysql>set global binlog_format='MIXED';

 

  • 3.把mysql的數據庫字符類型改為latin1

修改$HIVE_HOME/conf/hive-site.xml,其中hadoop表示自己當前虛擬機的主機名,用戶名和密碼都是mysql登錄的用戶名、密碼,hive-site.xml配置文件如下:

<property>

<name>javax.jdo.option.ConnectionURL</name>

<value>jdbc:mysql://hadoop:3306/hive?createDatabaseIfNotExist=true</value>

</property>

<property>

<name>javax.jdo.option.ConnectionDriverName</name>

<value>com.mysql.jdbc.Driver</value>

</property>

<property>

<name>javax.jdo.option.ConnectionUserName</name>

<value>root</value>

</property>

<property>

<name>javax.jdo.option.ConnectionPassword</name>

<value>itcast</value>

</property>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM