本教程採用了兩種方案
一種是hive-1.21版本,hadoop版本為hadoop2.6.5
還有一種是主要講基於hadoop3.x hive的搭建
先來第一種
一、本地方式(內嵌derby)
步驟
這種儲存方式需要在本地執行一個mysql伺服器,並作如下配置
解壓
修改安裝包內conf資料夾下的hive-default.xml.template,並重新命名為hite-site.xml
<configuration> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:derby:;databaseName=metastore_db;create=true</value> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>org.apache.derby.jdbc.EmbeddedDriver</value> </property> <property> <name>hive.metastore.local</name> <value>true</value> </property> <property> <name>hive.metastore.warehouse.dir</name> <value>/user/hive/warehouse</value> </property> </configuration>
將hive/lib目錄下的jline jar包拷貝到hadoop的yarn lib下,並將原jar包刪除或改名令其失效。否則會報版本不匹配的錯誤 問題
使用derby儲存方式時,執行hive會在當前目錄生成一個derby檔案和一個metastore_db目錄。這種儲存方式的弊端是在同一個目錄下同時只能有一個hive客戶端能使用資料庫,多個使用者登入時會報錯。(這是由於derby資料庫的侷限性造成的)
二、Local模式(mysql)
這種儲存方式需要在本地執行一個mysql伺服器,並作如下配置
步驟
安裝一個mysql資料庫
yum install mysql-server -y
拷貝mysql驅動包到$HIVE_HOME\lib目錄下
修改hive-site.xml
<configuration> <property> <name>hive.metastore.warehouse.dir</name> <value>/user/hive_remote/warehouse</value> </property> <property> <name>hive.metastore.local</name> <value>true</value> </property> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://localhost/hive_meta?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>123</value> </property> </configuration>
啟動sql服務
service mysqld start
設定開機啟動
chkconfig mysqld on
修改root使用者許可權
(1)登入mysql
mysql -uroot
(2)修改許可權
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123' WITH GRANT OPTION;
(3)重新整理
flush privileges;
建立hive_meta資料庫
create database hive_meta;
新增使用者並修改許可權
(1)建立hive使用者和密碼
CREATE USER 'hive'@'%' IDENTIFIED BY '123';
(2)賦予許可權
grant all privileges on hive_meta.* to hive@"%" identified by '123';
flush privileges;
刪除多餘許可權
1.進入mysql資料庫
use mysql;
2.檢視使用者
select host,user,password from user;
3. 刪除多餘會對許可權造成影響的資料
delete from user where password = '';
將hive/lib目錄下的jline jar包拷貝到hadoop的yarn lib下
配置HIVE_HOME,hive啟動
三、遠端(remote)模式
當有多個客戶端使用hive時,若使用各自本地的hive和mysql,會導致各端後設資料不一致,不易於管理,可能會出現各種問題。在一個基於本地mysql資料庫的hive作為服務端,啟動一個metastore服務,其他客戶端通過thrift協議連線metastore使用服務端hive,從而使用同一份mysql內的後設資料。
步驟
在一個搭建好基於mysql的hive的節點啟動metastore服務作為服務端
hive --service metastore
在客戶端解壓安裝包並修改hive-site.xml
<configuration> <property> <name>hive.metastore.warehouse.dir</name> <value>/user/hive/warehouse</value> </property> <property> <name>hive.metastore.local</name> <value>false</value> </property> <property> <name>hive.metastore.uris</name> <value>thrift://192.168.23.134:9083</value> </property> </configuration>
注:metastore的啟動會一直啟動在前臺,可利用如下方法解決
hive --service metastore
將日誌列印到meta.log 錯誤日誌(2)重定向到正常日誌(1)
&表示後臺執行
這種方式服務端只提供後設資料,客戶端執行自己的hiv
再來第二種
本篇主要描述hive3.x與歷史版本搭建的不同之處。本地模式用的較少就不復贅述,直接從local模式開始,遠端模式與歷史版本無異,本篇也不再贅述。
一、local模式
1.修改hive-site.xml
<configuration> <property> <name>hive.metastore.warehouse.dir</name> <value>/user/hive_remote/warehouse</value> </property> <property> <name>hive.exec.scratchdir</name> <value>/tmp/hive</value> <description>HDFS root scratch dir for Hive jobs which gets created with write all (733) permission. For each connecting user, an HDFS scratch dir: ${hive.exec.scratchdir}/<username> is created, with ${hive.scratch.dir.permission}.</description> </property> <property> <name>hive.exec.local.scratchdir</name> <value>/opt/software/hive/temp/root</value> </property> <property> <name>hive.downloaded.resources.dir</name> <value>/opt/software/hive/temp/${hive.session.id}_resources</value> </property> <property> <name>hive.server2.logging.operation.log.location</name> <value>/opt/software/hive/temp/root/operation_logs</value> </property> <property> <name>hive.querylog.location</name> <value>/opt/software/hive/temp/root</value> </property> <property> <name>hive.metastore.local</name> <value>true</value> </property> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://localhost/hive_meta?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>123</value> </property> </configuration>
2.修改hive-env.sh
export HADOOP_HOME=/opt/software/hadoop export HIVE_CONF_DIR=/opt/software/hive/conf export HIVE_AUX_JARS_PATH=/opt/software/hive/lib
3.將hadoop/share/hadoop/common/lib 下的 guava-xx.jar 複製到hive/lib 下 將hive 的guava-xx.jar刪除
4.大功告成了,趕快試試吧!
文章首發公眾號:Java架構師聯盟,每日更新技術好文