Hive運行架構及配置部署

jopen 10年前發布 | 14K 次閱讀 Hive 分布式/云計算/大數據

Hive 運行架構

由非死book開源,最初用于解決海量結構化的日志數據統計問題:ETL工具;

   構建于Hadoop的HDFS和MapReduce智商,用于管理和查詢結構化/非結構化數據的數據倉庫;

   設計目的是讓SQL技能良好,但Java技能較弱的分析師可以查詢海量數據:

           使用HQL作為查詢接口;

           使用HDFS作為存儲底層;

           使用MapReduce作為執行層;

   2008年非死book把Hive項目貢獻給Apache;

1、Hive的缺點

       Hive的HQL表達能力有限:有些復雜運算用HQL不易表達;

       Hive效率低:Hive自動生成MR作業,通常不夠智能;HQL調優困難,粒度較粗;可控性差;

2、Hive系統架構

      1) 元數據存儲(Metastore):Hive的數據由兩部分組成:數據文件和元數據;

               元數據存儲,Derby只能用于一個Hive連接,一般存儲在MySQL。

       2)驅動(Driver):編譯器、優化器、執行器;

               用戶通過下面的接口提交Hive給Driver,由Driver進行HQL語句解析,此時從Metastore中獲取表的信息,先生成邏輯計劃,再生成物理計劃,再由Executor生成Job交給Hadoop運行,然后由Driver將結果返回給用戶。

               編譯器(Hive的核心):1,語義解析器(ParseDriver),將查詢字符串轉換成解析樹表達式;2,語法解析器(SemanticAnalyzer),將解析樹轉換成基于語句塊的內部查詢表達式;3,邏輯計劃生成器(Logical Plan Generator),將內部查詢表達式轉換為邏輯計劃,這些計劃由邏輯操作樹組成,操作符是Hive的最小處理單元,每個操作符處理代表一道HDFS操作或者是MR作業;4,查詢計劃生成器(QueryPlan Generator),將邏輯計劃轉化成物理計劃(MR Job)。

               優化器:優化器是一個演化組件,當前它的規則是:列修剪,謂詞下壓。

               執行器:編譯器將操作樹切分成一個Job鏈(DAG),執行器會順序執行其中所有的Job;如果Task鏈不存在依賴關系,可以采用并發執行的方式進行Job的執行。

       3)接口:CLI(Common LineInterface)、HWI(Hive WebInterface)、ThriftServer;

               CLI:為命令行工具,默認服務。bin/hive或bin/hive--service cli;

               HWI:為Web接口,可以用過瀏覽器訪問Hive,默認端口9999,啟動方式為bin/hive --service hwi;

               ThriftServer:通過Thrift對外提供服務,默認端口是10000,啟動方式為bin/hive --service hiveserver;

 

       4)其他服務(bin/hive --service -help):metastore(bin/hive --service metastore)、hiveserver2(bin/hive --service hiveserver2),HiveServer2是HieServer改進版本,它提供給新的ThriftAPI來處理JDBC或者ODBC客戶端,進行Kerberos身份驗證,多個客戶端并發,HS2還提供了新的CLI:BeeLine,是Hive 0.11引入的新的交互式CLI,基于SQLLine,可以作為Hive JDBC Client 端訪問HievServer2,啟動一個beeline就是維護了一個session.

       5)Hadoop:用HDFS進行存儲,用MapReduce進行計算;

               表中的一個Partition對應表下的一個子目錄,每一個Bucket對應一個文件;Hive的默認數據倉庫目錄是/user/hive /warehouse,在hive-site.xml中由hive.metastore.warehouse.dir項定義;

3、Hive的運行過程

       由客戶端提供查詢語句,提交給Hive,Hive再交給Driver處理(1,Compiler先編譯,編譯時要從Metastore中獲取元數據信息,生成邏輯計劃;2,生成物理計劃;3,由Driver進行優化;4,Executor執行時對物理計劃再進行分解成Job,并將這些Job提交給MR的 JobTracker運行,提交Job的同時,還需要提取元數據信息關聯具體的數據,這些元數據信息送到NN),JT拆分成各個Task進行計算,并將結果返回或寫入HDFS。

4、Hive的數據模型

       Database

       Table

       Partition

       Bucket

       File(文件格式:TextFile,RCFile,),

       數據類型,Numeric(Tinyint,Smallint,Bigint,Float,Double,Decimal(Hive 0.13.0可以自定義精度進行擴展)),Date/Time(TIMESTAMP,DATE(0.12.0支持)),String(STRING,VARCHAR(0.12),CHAR(0.13)),Misc(BOLLEAN,BINARY),Complex(ARRAY、 MAP、STRUCT、UNIONTYPE)

 

 



 Hive 0.13的配置與部署

使用版本:Hive 0.13.1

1、Metastore(MySQL作為元數據存儲,安裝于Master1節點,前提是MySQL的訪問權限需要設置好。)

1)解壓

       tar zxf apache-hive-0.13.1-bin.tar.gz

       mv apache-hive-0.13.1-bin /usr/hive013

       vim /etc/profile加入

         export HIVE_HOME=/usr/hive013

         PATH=$HIVE_HOME/bin:$PATH

         source /etc/profile

2)配置hive-env.sh文件(啟動時用到的環境文件)

       HADOOP_HOME=/usr/hadoop-2.2.0   

3)復制hive-default.xml -> hive-site.xml文件(配置文件)

<property>

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

 <!--<value>jdbc:derby:;databaseName=metastore_db;create=true</value>-->

 <value>jdbc:mysql://master1:3306/metastore?=createDatabaseIfNotExist=true</value>

  <description>JDBC connect string for a JDBCmetastore</description>

</property> 

 

<property>

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

 <!--<value>org.apache.derby.jdbc.EmbeddedDriver</value>-->

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

  <description>Driver class name for a JDBCmetastore</description>

</property>

 

<property>

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

  <value>hive</value>

  <description>username to use against metastoredatabase</description>

</property>

<property>

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

  <value>hive</value>

  <description>password to use against metastoredatabase</description>

</property>

4)拷貝jdbc文件到hive的lib中

     下載jdbc的jar文件http://pan.baidu.com/s/1zYi5o

      cp mysql-connector-java-5.1.26-bin.jar$HIVE_HOME/lib/

2、HiveClient,在Slave1上安裝Hive客戶端,同樣設置好HIVE_HOME的環境變量

1)將Hive013從Master1拷貝到Slave1

     scp -r /usr/hive013 root@slave1:/usr/

2)配置Metastore的連接信息

 <property>

  <name>hive.metastore.uris</name>

  <value>thrift://master1:9083</value>

  <description>Thrift URI for the remote metastore.Used by metastore client to connect to remote metastore.</description>

</property>

3)啟動metastore服務

     前臺服務:hive--service metastore  CTRL+C關閉

     后臺服務:nohup hive--service metastore > metastore.log 2>&1 &    jobs查看后臺任務    kill %id關閉后臺任務

4)測試鏈接Metastore

      由于設置好HIVE_HOME環境變量,直接在Shell中輸入hive即可打開HiveCLI

5)拷貝至OPC節點,可以達到多個客戶端訪問metastore

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!