1. 程式人生 > >Hive安裝及與HBase的整合

Hive安裝及與HBase的整合

1 Hive簡介

Hive是一個基於Hadoop的開源資料倉庫工具,用於儲存和處理海量結構化資料。它把海量資料儲存於Hadoop檔案系統,而不是資料庫,但提供了一套類資料庫的資料儲存和處理機制,並採用類SQL語言對這些資料進行自動化管理和處理。我們可以把Hive中海量結構化資料看成一個個的表,而實際上這些資料是分散式儲存在HDFS 中的。Hive經過對語句進行解析和轉換,最終生成一系列基於Hadoop 的MapReduce任務,通過執行這些任務完成資料處理。

使用Hive的命令列介面,感覺很像操作關係資料庫,但是Hive和關係資料庫還是有很大的不同,具體總結如下:

一是儲存檔案的系統不同。Hive使用的是Hadoop的HDFS,關係資料庫則是伺服器本地的檔案系統。

二是計算模型不同。Hive使用MapReduce計算模型,而關係資料庫則是自己設計的計算模型。

三是設計目的不同。關係資料庫都是為實時查詢的業務設計的,而Hive則是為海量資料做資料探勘設計的,實時性很差。實時性的區別導致Hive的應用場景和關係資料庫有很大的不同。

四是擴充套件能力不同。Hive通過整合Hadoop使得很容易擴充套件自己的儲存能力和計算能力,而關係資料庫在這個方面要比資料庫差很多。

Hive的技術架構如下圖所示。


由上圖可知,Hadoop和MapReduce是Hive架構的根基。Hive架構包括如下元件:CLI(command line interface)、JDBC/ODBC、Thrift Server、Web GUI、Metastore和Driver(Complier、Optimizer和Executor),這些元件可分為服務端元件和客戶端元件兩大類。

首先來看服務端元件:

Driver元件包括Complier、Optimizer和Executor,它的作用是將我們寫的HiveQL語句進行解析、編譯優化,生成執行計劃,然後呼叫底層的MapReduce計算框架。

Metastore元件是元資料服務元件,它儲存Hive的元資料,Hive的元資料儲存在關係資料庫裡,支援的關係資料庫有derby和mysql。元資料對於Hive十分重要,因此Hive支援把Metastore服務獨立出來,安裝到遠端的伺服器叢集裡,從而解耦Hive服務和Metastore服務,保證Hive執行的健壯性。

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

再來看看客戶端元件:

CLI即command lineinterface,命令列介面。

JDBC/ODBC 是Thrift的客戶端。

Web GUI是Hive客戶端提供的一種通過網頁的方式訪問Hive的服務。這個介面對應Hive的hwi元件,使用前要啟動hwi服務。

2 Hive內建服務

Hive自帶了許多服務,可在執行時通過service選項來明確指定使用什麼服務,或通過--service help來檢視幫助。下面介紹最常用的一些服務。

(1)CLI:這是Hive的命令列介面,用的比較多。這是預設的服務,直接可以在命令列裡面使用。

(2)hiveserver:這個可以讓Hive以提供Trift服務的伺服器形式來執行,可以允許許多不同語言編寫的客戶端進行通訊。可以通過設定HIVE_PORT環境變數來設定伺服器所監聽的埠號,在預設的情況下,埠為 10000。最新版本(hive1.2.1)用hiveserver2取代了原有的hiveserver。

(3)hwi:它是Hive的Web介面,是hive cli的一個web替換方案。

(4)jar:與Hadoop jar等價的Hive介面,這是執行類路徑中同時包含Hadoop和Hive類的Java應用程式的簡便方式。

(5)Metastore:用於連線元資料庫(如mysql)。在預設情況下,Metastore和Hive服務執行在同一個程序中,埠號為9083。使用這個服務,可以讓Metastore作為一個單獨的程序執行,我們可以通過METASTORE_PORT來指定監聽的埠號。

3 Metastore部署模式

3.1 內嵌模式

內嵌模式使用內嵌的Derby資料庫儲存元資料,只能單使用者操作,一般用於單元測試。其架構圖如下所示。

3.2 本地模式

本地模式與內嵌模式最大的區別在於資料庫由內嵌於hive服務變成獨立部署(一般為mysql資料庫),hive服務使用jdbc訪問元資料,多個服務可以同時訪問。mysql資料庫用於儲存元資料,可安裝在本地或遠端伺服器上,在配置檔案hive-site.xml中指定jdbc URL、驅動、使用者名稱、密碼等屬性。其中屬性hive.metastore.uris的值為空,表示為嵌入模式或本地模式。在本地模式中,每種hive服務(如cli、hiveserver2、hwi)都內建啟動了一個metastore服務,用於連線mysql元資料庫。其架構圖如下所示。

3.3 遠端模式

遠端模式將原內嵌於hive服務中的metastore服務獨立出來單獨執行,hive服務通過thrift訪問metastore,這種模式可以控制到資料庫的連線等。其中,metastore伺服器需要通過hive-site.xml配置jdbc URL、驅動、使用者名稱、密碼等屬性,hiveserver2伺服器和cli客戶端需要通過hive-site.xml配置hive.metastore.uris屬性,用於指定metastore服務地址(如thrift://localhost:9083),metastore伺服器通過./hive --service metastore開啟metastore服務,hiveserver2伺服器通過./hive --service hiveserver2開啟hiveserver服務,客戶端通過./hive shell 或./beeline進行連線。其架構圖如下所示。


遠端模式下可以按如下部署規劃:

(1)元資料伺服器:部署metastore服務和mysql資料庫。

(2)hiveserver伺服器:用於部署hiveserver2服務,可通過thrift訪問metastore。

(3)客戶伺服器:部署hive客戶端,可以基於cli、beeline或直接使用thrift訪問hiveserver2。

4 Hive本地模式的安裝

作業系統為ubuntu14.04,需要安裝並啟動Hadoop及HBase。

4.1 安裝MySQL

// 切換root使用者

$ su root

// 檢查mysql是否安裝

# netstat -tap | grep mysql

// 線上安裝mysql

# apt-get install mysql-server mysql-client

// 啟動mysql

# start mysql

// 設定開機自啟動

# /etc/init.d/mysql start

// 設定root使用者密碼

# mysqladmin -u root password 'root'

// 使用客戶端登入mysql

$ mysql -u root -p

// 建立hive使用者,密碼為hive

> create user 'hive' identified by 'hive';

// 建立資料庫hivemeta,用於存放hive元資料

> create database hivemeta;

// 將hivemeta資料庫的所有許可權賦予hive使用者,並允許遠端訪問

> grant all privileges on hivemeta.* to 'hive'@'%' identified by 'hive';

> flush privileges;

// 可檢視使用者hive的許可權情況

> use mysql;

> select host, user, password from user;

4.2 安裝Hive

// 解壓安裝包

$ tar -xvf hive-1.1.0-cdh5.7.1.tar.gz

// 進入hive的配置目錄

$ cd hive-1.1.0-cdh5.7.1/conf/

// 修改hive-env.sh檔案

$ cp hive-env.sh.template hive-env.sh

$ vim hive-env.sh

HADOOP_HOME=/home/developer/app/hadoop-2.6.0-cdh5.7.1

// 建立hive-site.xml檔案並配置

$ vimhive-site.xml

<configuration>
  <!-- 指定HDFS中的hive倉庫地址 -->
  <property>
    <name>hive.metastore.warehouse.dir</name>
    <value>/hive/warehouse</value>
  </property>
  <!-- 該屬性為空表示嵌入模式或本地模式,否則為遠端模式 -->
  <property>
    <name>hive.metastore.uris</name>
    <value></value>
  </property>
  <!-- 指定mysql的連線 -->
  <property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://localhost:3306/hivemeta?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>hive</value>
  </property>
  <!-- 指定密碼 -->
  <property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>hive</value>
  </property>
</configuration>

// 修改hive-log4j.properties指定日誌輸出路徑

$ cp hive-log4j.properties.template hive-log4j.properties

$ vim hive-log4j.properties

hive.root.logger=info,DRFA

hive.log.dir=/home/developer/app/hive-1.1.0-cdh5.7.1/logs

// 在http://www.mysql.com/products/connector/下載JDBC Driver for MySQL並複製到hive的lib目錄中

$ cp mysql-connector-java-5.1.39-bin.jar/home/developer/app/hive-1.1.0-cdh5.7.1/lib/

4.3 配置環境變數

$ cd ~

$ vim.bashrc

export HIVE_HOME=/home/developer/app/hive-1.1.0-cdh5.7.1

export PATH=$PATH:$HIVE_HOME/bin

$ source.bashrc

4.4 使用Hive Cli

// 啟動hive的cli服務

$ hive

// 測試

> show databases;


4.5 使用Beeline

// 後臺啟動hiveserver2

$nohup hive --service hiveserver2 &

注:beeline依賴hiveserver2提供的thirft服務,必須啟動,其預設埠為10000

// 使用beeline

$beeline

// 連線hive

> !connectjdbc:hive2://localhost:10000

注:需要通過hadoop使用者登入,否則沒有hdfs操作許可權

// 測試

> show databases;

4.6 功能測試

// 啟動hive的cli服務

$ hive

// 建立表

> create table user(id string,name string,age string) row format delimited fields terminated by '\t';

// 檢視測試資料

$ cat data.txt


// 將本地資料匯入hive

> load data local inpath '/home/developer/data.txt' overwrite into table user;

// 檢視匯入的資料

> select * from user;


// 檢視資料條數

> select count(*) from user;

5 Hive整合HBase原理

Hive與HBase整合的實現是利用兩者本身對外的API介面互相通訊來完成的,其具體工作交由Hive的lib目錄中的hive-hbase-handler-*.jar工具類來實現,通訊原理如下圖所示。


Hive整合HBase後的使用場景:

(一)通過Hive把資料載入到HBase中,資料來源可以是檔案也可以是Hive中的表。

(二)通過整合,讓HBase支援JOIN、GROUP等SQL查詢語法。

(三)通過整合,不僅可完成HBase的資料實時查詢,也可以使用Hive查詢HBase中的資料完成複雜的資料分析。

6 Hive整合HBase配置

6.1 Hive對映HBase表

// 如果hbase是叢集,需要修改hive-site.xml檔案配置

$ vim hive-site.xml

<property>
  <name>hbase.zookeeper.quorum</name>
  <value>node1,node2,node3</value>
</property>

// 將hbase lib目錄下的所有檔案複製到hive lib目錄中

$ cd app/hive-1.1.0-cdh5.7.1/

$ cp ~/app/hbase-1.2.0-cdh5.7.1/lib/* lib/

// 在hive中建立對映表

$ hive shell

> create table hive_hbase_test(key int,value string) stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' with serdeproperties("hbase.columns.mapping"=":key,cf1:val") tblproperties("hbase.table.name"="hive_hbase_test");

備註:在hive中建立表hive_hbase_test,這個表包括兩個欄位(int型的key和string型的value),對映為hbase中的表hive_hbase_test,key對應hbase的rowkey,value對應hbase的cf1:val列。


// 在hbase中檢視是否存在對映表

$ hbase shell

> list

6.2 整合後功能測試

// 建立測試資料

$ vim poke.txt

1      zhangsan

2      lisi

3      wangwu


// 在hive中建立一個poke表並載入測試資料

> create table poke(key int,valuestring) row format delimited fields terminated by '\t';

> load data local inpath'/home/developer/poke.txt' overwrite into table poke;

> select * from poke;


// 將hive的poke表中的資料載入到hive_hbase_test表

> insert overwrite table hive_hbase_test select * from poke;

> select * from hive_hbase_test;


// 檢視hbase的hive_hbase_test表中是否有同樣的資料

> scan 'hive_hbase_test'


需要說明以下幾點:

(一)Hive對映表的欄位是HBase表字段的子集。整合之後的Hive表不能被修改。

(二)Hive中的對映表不能直接插入資料,所以需要通過將資料載入到另一張poke表,然後通過查詢poke表將資料載入到對映表。

(三)上述示例是通過建立內部表的方式將Hive表對映到HBase表,HBase表會自動建立,而且Hive表被刪除後HBase表也會自動刪除。

(四)如果HBase表已有資料,可以通過建立Hive外部表的方式將Hive表對映到HBase表,通過HQLHive表實現對HBase表的資料分析。Hive表刪除將不會對HBase表造成影響。建立外部表的方法如下:

> create external table hive_hbase_test(key int,value string)stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' with serdeproperties("hbase.columns.mapping"=":key,cf1:val") tblproperties("hbase.table.name"="hive_hbase_test");

相關推薦

Hive安裝HBase整合

1 Hive簡介 Hive是一個基於Hadoop的開源資料倉庫工具,用於儲存和處理海量結構化資料。它把海量資料儲存於Hadoop檔案系統,而不是資料庫,但提供了一套類資料庫的資料儲存和處理機制,並採用類SQL語言對這些資料進行自動化管理和處理。我們可以把Hive中海量結構化

mycat安裝springboot整合

1. mycat下載http://dl.mycat.io/1.6-RELEASE/2.解壓,配置環境變數,path=D:\software\Mycat-server-1.6-RELEASE-20161028204710-win\mycat\bin[mycat安裝地址]3.修改

Hadoop HiveHbase整合+thrift

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Kafka的安裝Spring Boot的整合

安裝JDK 下載jdk-8u202-ea-bin-b03-linux-x64-07_nov_2018.tar.gz 解壓 配置 $ vi /etc/profile,在最後加入下面兩行   export JAVA_HOME=/usr/local/bigdata/jdk

elasticsearch安裝springboot2.x整合

  關於elasticsearch是什麼、elasticsearch的原理及elasticsearch能幹什麼,就不多說了,主要記錄下自己的一個使用過程。   1、安裝   elasticsearch是用java編寫的,所以它的執行離不開jdk,jdk的安裝這裡不再囉嗦,我使用的是虛擬機器是centos7

Hive 1.x升級hive2.1.1全過程HBase的互通

1. 問題背景 在構建的大資料平臺上(相關元件版本Hadoop 2.8, hive 1.2.2, hbase 1.2.6) 利用hive-hbase-handler.jar實現hive和hbase的資料互通時,在hive中輸入命令後總是報錯, 先是Cannot find c

kafka安裝配置logstash整合

1、kafka安裝 下載   wget http://mirror.bit.edu.cn/apache/kafka/0.8.2.2/kafka_2.9.1-0.8.2.2.tgz 配置zookeeper     vim bin/zookeeper-server-start.

HiveHBase整合(例項)

  例項1 1.先在Hbase中建立表(三列族): create 'ceshi7', {NAME=>'TIME',VERSIONS=>1,BLOCKCACHE=>true,BLOOMFILTER=>'ROW',COMPRESSION=>'SNA

Redis原理實戰安裝配置LAMP整合

Redis介紹 在大使用者量場景下,WEB系統如果每次都從資料庫裡獲取資料庫,將嚴重影響使用者體驗,為了提高使用者體驗,我們可以將使用者資料儲存在快取中。 常用的快取工具有:memcache和redis。 Redis是一個開源的使用ANSI C語言編寫、支援網路、可基於記憶

【伊利丹】Hadoop-2.5.0-CDH5.2.0/HiveHbase整合實驗

<value>file:///home/kkzhangtao/hive-0.13.1-cdh5.2.0/lib/hive-hbase-handler-0.8.0.jar,file:///home/kkzhangtao/hive-0.13.1-cdh5.2.0/lib/hbase-common-0.

hivehbase整合

Hive整合HBase原理Hive與HBase整合的實現是利用兩者本身對外的API介面互相通訊來完成的,其具體工作交由Hive的lib目錄中的hive-hbase-handler-*.jar工具類來實現,通訊原理如下圖所示。Hive整合HBase後的使用場景:(一)通過Hiv

grafana安裝使用zabbix整合

開發十年,就只剩下這套架構體系了! >>>   

Hive(一)---- Hive安裝配置

joins hist query mysqld onf pass chmod 客戶 主機 Hive安裝及配置 下載hive安裝包 此處以hive-0.13.1-cdh5.3.6版本的為例,包名為:hive-0.13.1-cdh5.3.6.tar.gz 解壓Hive到安裝目錄

Kafka的安裝Spring Boot的集成

gin 消費者 ole 輸入 beginning bin tis sed 解壓 安裝JDK 下載jdk-8u202-ea-bin-b03-linux-x64-07_nov_2018.tar.gz 解壓 配置 $ vi /etc/profile,在最後加入下面兩行   

Hive安裝使用簡介

Hive簡介: 1、Hive在hadoop生態圈中屬於資料倉庫的角色。他能夠管理hadoop中的資料,同時可以查詢hadoop中的資料。 2、Hive其本質來講,是一個SQL解析引擎。Hive可以把SQL查詢轉換為MapReduce中的Job來執行(將HQL轉化成MR程式

fastdfs安裝nginx整合

完全參考部落格:https://blog.csdn.net/m0_37797991/article/details/73385161。有些自己遇到坑的地方記錄一下。 1.安裝依賴: yum install git gcc gcc-c++ make automake autoconf li

JDK安裝環境變數配置(親測有效)

裝JDK 選擇安裝目錄 安裝過程中會出現兩次 安裝提示 。第一次是安裝 jdk ,第二次是安裝 jre 。建議兩個都安裝在同一個java資料夾中的不同資料夾中。(不能都安裝在java資料夾的根目錄下,jdk和jre安裝在同一資料夾會出錯)。 我的安裝目錄如下: 第一步

hadoop學習筆記-hive安裝操作

軟體下載: Mysql: Hive: 安裝環境: OS:Oracle redhad 5.6 x86 64bit Hadoop: hadoop-0.20.2 Mysql:mysql-5.5.24 Hive:hive-0.8.1 1.       安裝mysql -

hive安裝mysql配置

一、Hive安裝 1.解壓hive,移動到指定目錄下 配置環境變數 export HIVE_HOME=/usr/local/hive export PATH=$PATH:$HIVE_HOME/bin 2.在hive/conf目錄下 cp hive-en

Hive安裝啟動異常解決

前期準備 1、關於Hive的安裝包和文件可以從這裡獲取: 2、Hive依賴於Hadoop,關於Hadoop的安裝可以檢視這裡: 3、安裝mysql 由於Hive需要在資料庫中儲存元資料資訊,所以安裝hive之前需要先安裝mysql。h