前置条件:
依赖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会有更新失败的问题。