1. 程式人生 > >Hive架構簡介與安裝

Hive架構簡介與安裝

一.Hive的出現

如何實現對SQL技術比較熟悉的程式設計人員在Hadoop平臺上對海量資料進行分析?如何實現傳統資料格式到Hadoop上的遷徙,如基於傳統關係型資料庫格式和SQl處理技術?如何實現傳統資料庫設計人員在Hadoop平臺上使用其所熟悉的SQL技術展現其才能?如何在分散式環境下采用資料倉庫技術從更多的資料中快速的獲取資料的有效價值?

————Hive應景而生。

作為一種資料倉庫技術,Hive能很好地查詢和管理儲存在分佈環境下的大資料集,它提供了一系列工具,可以用來進行資料提取和轉化載入,這是一種可以儲存、查詢和分析儲存在Hadoop中的大規模資料的機制。Hive定義了簡單的類SQL查詢語言,稱為 HQL,它允許熟悉SQL的使用者查詢資料。同時,這個語言也允許熟悉MapReduce開發者的開發自定義的mapper和reducer來處理內建的mapper和reducer無法完成的複雜的分析工作。

二.hive的優缺點

1.優點

1)操作介面採用類SQL語法,降低了傳統資料庫分析人員使用Hadoop進入大資料時代的障礙。

2)任務提交有高延遲性,適合用來處理相對靜態,對實時性要求不高或離線的海量資料庫集。

3)支援使用者自定義函式,使用者可以根據自己的需求來設計函式。

2.缺點

1)HQL表達能力有限,迭代演算法無法表達

2)基於傳統SQL的技術領域限制,並不適合構建複雜的機器學習演算法。

3)Hive自動生成的mapreduce程式通常不夠智慧化

4)調優比較困難,粒度較粗

三.Hive的架構原理

(1)客戶端元件:

  ①CLI

:command line interface,Hive Shell命令列介面。

  ②Thrift客戶端:上面的架構圖裡沒有寫上Thrift客戶端,但是Hive架構的許多客戶端介面是建立在Thrift客戶端之上,包括JDBC和ODBC介面。

  ③WEBGUI:Hive客戶端提供了一種通過網頁的方式訪問Hive所提供的服務。這個介面對應Hive的hwi元件(hive web interface),使用前要啟動hwi服務。

  (2)服務端元件:

  Driver元件:該元件包括SQL Parser、Physical Plan、Query Optimizer和Executor,它的作用是將我們寫的HiveQL(類SQL)語句進行解析、編譯優化,生成執行計劃,然後呼叫底層的mapreduce計算框架

  ②Metastore元件:元資料服務元件,其中儲存的元資料又稱為作用於Hive和Hadoop之間的抽象介面屬性內容,以metastore內容的形式儲存在資料庫中,用來限定Hive如何進行格式化操作Hadoop中獲取到任何非結構化資料,hive支援的關係資料庫有derby、mysql。元資料對於hive十分重要,因此hive支援把metastore服務獨立出來,安裝到遠端的伺服器叢集裡,從而解耦hive服務和metastore服務,保證hive執行的健壯性

  ③Thrift服務:Thrift是facebook開發的一個軟體框架,它用來進行可擴充套件且跨語言的服務的開發,hive集成了該服務,能讓不同的程式語言呼叫hive的介面。

四.Hive的基本安裝與使用

1.安裝

系統:centos6.5 Hadoop2.7.1

準備:apache-hive-1.2.2-bin.tar.gz

將該tar解壓到/root/apps目錄下,並mv重新命名:

 配置HIVE_HOME。

配置hive-env.sh

 

hive啟動成功。

2.將本地檔案匯入Hive

在本地建立一張student.txt

在Hive中建立一個student表

匯入本地student.txt到student表

五.將metastore配置在mysql中

metastore包括兩部分:服務和後臺資料的儲存。預設情況下,metastore服務和Hive服務執行在同一JVM中,它包含一個內嵌的以本地磁碟作為儲存的Derby資料庫例項。

使用內嵌metastore是Hive入門最簡單的方法。但是每次只有一個內嵌Derby資料庫可以訪問某個磁碟上的書庫檔案,這意味著一次只能為每個metastore開啟一個Hive會話。如果試著啟動第二個會話,在它試圖連線metastore時,會得到以下錯誤資訊:

Failed to start database 'metastore_db' 

如果要支援多會話,需要使用一個獨立的資料庫,因為metastore服務仍然和Hive服務執行在同一個程序中,但連線的確實另一個程序中執行的資料庫,在同一臺機器上或在遠端機器上。

這就是我們要為metastore單獨配置mysql的原因。

 1.安裝mysql

在安裝之前,我們需要將虛擬機器上的mysql刪除,有的話刪除掉 

yum list installed | grep mysql

線上安裝

yum install mysql

yum install mysql-server

 在Hive的lib目錄下匯入mysql-connector-java-5.1.6.jar包

安裝成功後便可使用mysql

service mysqld start

mysql -uroot -p

新安裝的資料庫沒有密碼,我們enter就能進去,然後自行改密碼。

set password=password("your password") 

 然後我們配置hive.site.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
   this work for additional information regarding copyright ownership.
   The ASF licenses this file to You under the Apache License, Version 2.0
   (the "License"); you may not use this file except in compliance with
   the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
--><configuration>
<property>
       <name>hive.exec.scratchdir</name>
       <value>/tmp/hive</value>
       <description>Scratch space for Hive jobs</description>
       </property>
<property>

<property>
       <name>javax.jdo.option.Multithreaded</name>
       <value>true</value>
       <description>Set this to true if multiple threads access metastore through JDO concurrently.</description>
</property>
<property>
       <name>hive.metastore.warehouse.dir</name>
       <value>hdfs://node1:9000/hive/warehouse</value>
       <description>location of default database for the warehouse</description>
</property>

       <name>javax.jdo.option.ConnectionURL</name>
       <value>jdbc:mysql://node1:3306/metastore?createDatabaseIfNotExist=true</value>
       <description>JDBC connect string for a JDBC metastore</description>
</property>
<property>
       <name>javax.jdo.option.ConnectionDriverName</name>
       <value>com.mysql.jdbc.Driver</value>
       <description>Driver class name for a JDBC metastore</description>
</property>

<property>
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>root</value>
        <description>username to use against metastore database</description>
</property>
<property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>############</value>
        <description>password to use against metastore database</description>
</property>
</configuration>

jdbc:mysql://node1:3306/metastore?createDatabaseIfNotExist=true 這一行的作用就是將metastore配置在mysql

然後我們重新開啟mysql,發現多了這麼一個數據庫:

說明配置成功。 

 

 

參考:《Hadoop權威指南》

https://www.cnblogs.com/lyr999736/p/9468012.html

https://www.cnblogs.com/edisonchou/p/4426096.html