Hadoo系列之Hive安裝和使用(三)

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章