前置條件:
依賴jdk,請下載jdk8並解壓
依賴hadoop,請首先下載hadoop並解壓
step1/hive metastore建議使用mysql進行存儲,
安裝mysql這一步忽略,請自行安裝,如果使用docker,可以使用一句docker run解決。
創建hive用戶密碼和數據庫。
mysql
grant all privileges on *.* to hive@'%' identified by 'hive';
flush privileges ;
step2//下載hive3.1.2版本並解壓配置
#####conf
配置hive-site.xml log4j and hive-env.sh
HIVE_HOME/conf下面操作
cp hive-log4j2.properties.template hive-log4j2.properties
這樣可以后續找到hive.log文件,查看安裝使用過程中可能出現的錯誤,
通過日志解決問題是非常非常重要的。
property.hive.log.dir = /var/log/hive
配置hive-site.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <configuration> <property> <name>hive.exec.scratchdir</name> <value>/tmp/hive/stage/</value> </property> <property> <name>hive.metastore.warehouse.dir</name> <value>/Users/student2020/data/hive/</value> </property> <property> <name>hive.metastore.uris</name> <value>thrift://127.0.0.1:9083</value> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value> </property> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://127.0.0.1:13306/hive?createDatabaseIfNotExist=true&useSSL=false</value> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>hive</value> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>hive</value> </property> <property> <name>hive.server2.thrift.bind.host</name> <value>127.0.0.1</value> </property> <property> <name>hive.server2.thrift.port</name> <value>10000</value> </property> <property> <name>hive.metastore.event.db.notification.api.auth</name> <value>false</value> </property> <property> <name>hive.server2.active.passive.ha.enable</name> <value>true</value> </property> <property> <name>hive.support.concurrency</name> <value>true</value> </property> <property> <name>hive.exec.dynamic.partition.mode</name> <value>nonstrict</value> </property> <property> <name>hive.txn.manager</name> <value>org.apache.hadoop.hive.ql.lockmgr.DbTxnManager</value> </property> <property> <name>hive.compactor.initiator.on</name> <value>true</value> </property> <property> <name>hive.compactor.worker.threads</name> <value>1</value> </property> </configuration>
配置hive-env.sh
配置JAVA_HOME=/PATH/TO/JDK
HADOOP_HOME=/PATH/TO/HADOOP3
step3//使用hive自帶的工具初始化metastore需要的表
##### cd /hive/bin
schematool -dbType mysql -initSchema -verbose
step4//啟動hive metastore and hiveserver2(服務於beeline和jdbc訪問的方式)
###啟動hive metastore
export HIVE_HOME=/Users/student2020/app/hive312/
export PATH=$PATH:$HIVE_HOME/bin
hive --service metastore -hiveconf hive.log.file=metastore.log &
####啟動hive server2
hive --service hiveserver2 &
可以通過 查看 hive.log,檢查可能出現的錯誤,根據錯誤提示查找解決方案。
經過這次練習,可以知道 hive本地運行可以不啟用hdfs服務,但是需要有hadoop的編譯后的包,
需要配置hadoop_home的環境變量,因為hive的查詢要轉為mr,是需要使用hadoop
相關的jar包的。
編緝一個csv文件做數據測試。
create table test_csv (id int,name string,age int) row format delimited fields terminated by ',' stored as textfile;
load data local inpath '/Users/student2020/data/stage/test.csv' into table test_csv;
select * from test_csv;
查詢成功.
測試一下Acid表。3.x新版本的hive不需要對表強制進行分桶即可以使用transcion事務。
CREATE TABLE employee (id int, name string, salary int)
STORED AS ORC TBLPROPERTIES ('transactional' = 'true');
INSERT INTO employee VALUES(
(1, 'Jerry', 5000),
(2,'Jecky',5700)
)
update employee set salary=1000 where id=3;
delete from employ where id=2;
操作成功,如果操作失敗,請去hive.log中查看可能的錯誤。
已知的問題是hive3.1.2.搭配hadoop2.7.x會有更新失敗的問題。