您好,登錄后才能下訂單哦!
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)
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上面發現已經編譯好的庫,然后導入,經過一系列復雜的操作最后成功解決了這個問題。找對方法,找對工具。
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。