Hive基本原理及環境搭建


      今天我主要是在折騰這個Hive,早上看了一下書,最開始有點凌亂,后面慢慢地發現,hive其實挺簡單的,以我的理解就是和數據庫有關的東西,那這樣的話對我來說就容易多啦,因為我對sql語法應該是比較熟悉了,而這個是HQL的,其實很多都差不多。先來看一下Hive的基本介紹:

一、Hive基本原理

       hive是基於Hadoop的一個數據倉庫工具,可以將結構化的數據文件映射為一張數據庫表,並提供簡單的sql查詢功能,可以將sql語句轉換為MapReduce任務進行運行。 其優點是學習成本低,可以通過類SQL語句快速實現簡單的MapReduce統計,不必開發專門的MapReduce應用,十分適合數據倉庫的統計分析。

       Hive將元數據存儲在數據庫(RDBMS)中,比如MySQL、Derby中。Hive有三種模式連接到數據,其方式是:單用戶模式,多用戶模式和遠程服務模式。(也就是內嵌模式
、本地模式、遠程模式)。


1.1 Hive體系結構:

Hive體系結構圖:主要分為:用戶接口、Thrift服務器、元數據存儲、解析器、Hadoop



1.2 Hive數據類型

Hive的存儲是建立在Hadoop文件系統之上的,它本身沒有專門的數據存儲格式,其主要包括四類數據模型:
表(Table)
分區(Partition)
桶(Bucket)
外部表(External Table)



Hive的內置數據類型可以分為兩大類:(1)、基礎數據類型;(2)、復雜數據類型。其中,基礎數據類型包括:TINYINT,SMALLINT,INT,BIGINT,BOOLEAN,FLOAT,DOUBLE,STRING,BINARY,TIMESTAMP,DECIMAL,CHAR,VARCHAR,DATE。


1.3Hive的執行流程要點
操作符(Operator)是Hive的最小處理單位;
每個操作符處理代表HDFS操作或MR作業;
編譯器把Hive SQL轉換成一組操作符;
Hive通過ExecMapper和ExecReducer來執行MapReduce任務;
執行MapReduce時有兩種模式:本地模式和分布式模式;

常見的Hive操作符(部分)如下:


1.4 Hive的HQL操作

hive基本的運行操作其實和sql差不多,例如:

select u.name, o.orderid from order o join user u on o.uid = u.uid;

select dealid, count(distinct uid), count(distinct date) from order group by dealid;

簡單Hive表語句:
create table student
(
    name string,
    sex string,
    age int
);



二、Hive基本配置

    1、從apache官網的hadoop找到hive,目前最新版本是2.0.1,我下的就是這個,http://hive.apache.org/downloads.html,

   2、下載mysql驅動,目前是5.1.38的 ,我已經把這需要的兩個整理好一個壓縮包了,可以通過以下鏈接下載:(我后續貼出)

   3、分別解壓到你需要的目錄中,我是放置在/home/admin1/下載/hive-2.0.1中的,把mysql驅動也放到hive的這個lib包中,然后在hive-2.0.1/conf中對以下文件進行配置:

新建一個文件hive-env.sh

把里面的目錄改成你的hadoop放置的目錄就可以了。

export HIVE_HOME=/home/admin1/下載/hive-2.0.1
export PATH=$PATH:$HIVE_HOME/bin
HADOOP_HOME=/home/admin1/下載/hadoop-2.5.2
export HIVE_CONF_DIR=/home/admin1/下載/hive-2.0.1/conf
export HIVE_AUX_JARS_PATH=/home/admin1/下載/hive-2.0.1/lib

還需要新建一個hive-site.xml:

這里我用的是mysql的賬號和密碼來配置的,其他的你也可以參照配置。

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
<property>

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

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

<value>jdbc:mysql://localhost:3306/hive?=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>a</value>

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

</property>
</configuration>

啟動:在/home/admin1/下載/hive-2.0.1中執行:
bin/hive
 若無法初始化,則:
bin/schematool -dbType mysql  -initSchema

在hive2.0以上版本都需要initSchema一下,否則會報錯,我也是因為這個問題折騰了好幾個小時,最后發現很簡單就解決了。


最后說一下的就是在安裝mysql的時候,你可以直接用ubuntu里面的uk軟件下載就可以了,在里面搜索mysql,然后下載mysql的服務器,客戶端和工作平台就可以了,這里不再重復啰嗦了,就是需要在控制台創建一下新用戶:

mysql -uroot

create user 'hive' identify by 'hive';

create database hive;

grant all privileges on *.* to   'hive'@'localhost'   identified by 'hive';

flush privileges

然后可以通過hive賬號進行登陸就可以了,

mysql  -u hive -p 

然后輸入密碼hive就成功登陸,把這個登陸信息配置到hive-site.xml中就可以了。


接下來就可以愉快的進行hive的使用了,創建表等。記得要把hadoop的服務打開哦  ,    sbin/start-all.sh

總結:今天遇到的兩個主要問題就是,1:bin/hive后一直報錯,最后初始化之后就可以了。2、在linux中的sublim-text無法輸入中文,且無法下載gpk解決,無法編譯sublime_imfix.c,后來通過在github上面發現已經編譯好的庫,然后導入,經過一系列復雜的操作最后成功解決了這個問題。找對方法,找對工具。




免責聲明!

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



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