hive下載地址:http://www.apache.org/dyn/closer.cgi/hive/
hive的安裝
tar -zxvf apache-hive-3.1.2-bin.tar.gz #解壓
mv hive #修改文件名
chown -R hadoop:hadoop hive #修改文件權限
mkdir -p hive/warehouse #創建元數據存儲文件夾
chmod a+rwx -hive/warehouse #修改文件權限
配置hive環境變量
export HIVE_HOME=/usr/local/soft/hive
export PATH=$PATH:$HIVE_HOME/bin
啓動hive,要在hadoop用戶下執行啓動命令:hive
使用Derby數據庫的方式
配置hive-site.xml,若無此文件,可以新建一個,此處配置的是本地模式的hive
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/usr/local/soft/hive/warehouse</value>
<description>location of default database for the warehouse</description>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:derby:;databaseName=/usr/local/soft/hive/metastore_db;create=true</value>
<description>JDBC connect string for a JDBC metastore</description>
</property>
</configuration>
使用MySQL數據庫的方式
安裝mysql參考:https://blog.csdn.net/shiqijiamengjie/article/details/52192398
mysql -uroot -p #登錄mysql數據庫
insert into mysql.user (Host,User,Password) values ("localhost","hive",password (" hive")); 2創建hive用戶
若上面的創建hive用戶語句出現錯誤,請參考問題3,改用下面的語句創建hive用戶
create user 'hive'@'%' identified by 'hive'; //第一個hive是用戶名,'%'表示所有ip都可訪問,第二個hive是密碼
create database hive; # 創建hive數據庫
grant all on hive.* to hive@'%' identified by 'hive'; #賦予權限
grant all on hive.* to hive@'localhost' identified by 'hive';
flush privileges; #刷新
exit #退出mysql
mysql -u hive -p hive #驗證hive用戶
show databases;
配置hive-site.xml文件
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/usr/local/soft/hive/warehouse</value>
<description>location of default database for the warehouse</description>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/hive?createDatebaseIfNotExist=true</value>
<description>JDBC connect string for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<description>Driver class name for a JDBC metastore</description>
</property>
<!--數據庫的用戶名-->
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hive</value>
<description>Username to use against metastore database</description>
</property>
<!--數據庫的密-->
<property>
<name>javax.jdo.option.ConnectionPassword </name>
<value>hive</value>
</property>
<property>
<name>datanucleus.schema.autoCreateAll</name>
<value>true</value>
</property>
</configuration>
將jdbc驅動(mysql-connector-java-x.x.x-bin.jar)放在hive/lib下面
將hive/lib/jline-2.12.jar 放到hadoop/share/hadoop/yarn/lib下面
mkdir -p tmp #在hive下面創建臨時文件夾
chmod a+rwx tmp #修改文件權限
測試
啓動hadoop,執行hive命令,輸入show databases;進行測試
問題和解決方法:
1、bash: hive: command not found
解決:hive環境變量沒有生效,請檢查hive環境變量配置,或重新啓動hive環境變量配置
2、Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)V
解決(參考文章:http://www.bubuko.com/infodetail-3286965.html)
從報錯信息來看:
一,java.lang.NoSuchMethodError
原因:1.系統找不到相關jar包
2.同一類型的 jar 包有不同版本存在,系統無法決定使用哪一個
二,com.google.common.base.Preconditions.checkArgument
根據百度可知,該類來自於guava.jar
三,查看該jar包在hadoop和hive中的版本信息
hadoop-3.2.1(路徑:hadoop\share\hadoop\common\lib)中該jar包爲 guava-27.0-jre.jar
hive-2.3.6(路徑:hive/lib)中該jar包爲guava-14.0.1.jar
四,解決方案
刪除hive中低版本的guava-14.0.1.jar包,將hadoop中的guava-27.0-jre.jar複製到hive的lib目錄下即可。
五,成功運行hive
3、問題:創建hive用戶時,出現錯誤ERROR 1364 (HY000): Field 'ssl_cipher' doesn't have a default value
原因:創建用戶後沒有賦予權限的原因
解決方法(參考文章https://www.cnblogs.com/m97i/p/10700657.html):
mysql5.1之後的版本,插入用戶表的語句爲
create user 'hive'@'%' identified by 'hive'; //第一個hive是用戶名,'%'表示所有ip都可訪問,第二個hive是密碼
grant usage on *.* to 'hive'@'%' with grant option; #賦予權限
grant select,insert,update,delete,create,drop on *.* to 'hive'@'%' with grant option; //給了hive賬號 所有數據庫中所有表的增刪查改和建表刪表的權限
flush privileges; //刷新,使操作成功
4、當刪除創建的用戶後,重新創建,報錯:ERROR 1396 (HY000): Operation CREATE USER failed for 'hive'@'%'
原因:刪除用戶不徹底
解決方法(參考文章https://blog.csdn.net/u011575570/article/details/51438841):
select user from user; #查看用戶是否還存在
若沒有此用戶,刪除之後,有無刷新權限;若無,則刷新權限
flush privileges; #刷新權限
再次執行創建用戶的命令,若還是不行,則再刪除一次用戶,並刷新權限
drop user 'hive'@'%'; #刪除用戶
flush privileges;
執行創建用戶命令,成功了。
5、navicat如果連接mysql不成功,則需要關閉服務器防火牆
6、問題:在hive下執行show databases;時,報錯
FAILED: SemanticException org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient
解決方法:
1)hive --service metastore &
2)然後Ctrl+C
3)再hive,進去
參考文章(https://blog.csdn.net/qq_35078688/article/details/86137440)
在執行hive --service metastore &命令的時候,報錯:MetaException(message:Version information not found in metastore. )
解決方法:
在hive-site.xml中配置
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
</property>
參考文章(https://blog.csdn.net/zhangyingchengqi/article/details/97645353)
在執行hive --service metastore &命令的時候,若單純的只有下面的日誌,則不用管,可以繼續下面的操作
7、執行create database if not exists hive;命令時,報錯Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException(message:Got exception: org.apache.hadoop.security.AccessControlException Permission denied: user=root, access=WRITE, inode="/":hadoop:supergroup:drwxr-xr-x
解決方法:
在hadoop的hdfs-site.xml中添加配置,並重啓hadoop
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
參考文章(https://my.oschina.net/whitejavadog/blog/896645)