1. 程式人生 > >Hive1.2.2的安裝和配置

Hive1.2.2的安裝和配置

man host 方法 location 可能 啟動 ast option method

Hadoop環境搭建筆記整理(四)——Hive1.2.2的安裝和配置

技術分享圖片 蘇洛爾寂 www.bdqll.top,別看了啥也沒有

一、是什麽和做什麽

1.什麽是Hive?

一個數據倉庫工具

Hive 的數據存儲在 HDFS 中,大部分的查詢由 MapReduce 完成

不可更改和添加數據

Hive 並非為聯機事務處理而設計,Hive 並不提供實時的查詢和基於行級的數據更新操作。Hive 的最佳使用場合是大數據集的批處理作業

上述的描述是從官方的角度。在學習過程中,對hadoop和hive關系的理解就是hadoop作為一個基本平臺包含一些基本功能,hive取其中一個部分,數據從平臺傳入經過hdfs,由hadoop自帶的mapreduce功能調用數據,使得數據進入hive得到處理。

技術分享圖片

2.在偽分布式集群搭好,mysql環境運行不出問題的基礎上安裝hive

二、安裝過程

1.在mysql端配置hive

a.進入mysql命令行,創建hive用戶並賦予所有權限:

mysql -uroot -proot

mysql>set password=password(‘root‘);

mysql>create user ‘hive‘ identified by ‘hive‘;

mysql>grant all on *.* TO ‘hive‘@‘%‘ identified by ‘hive‘ with grant option;

mysql>grant all on *.* TO ‘hive‘@‘localhost‘ identified by ‘hive‘ with grant option;

mysql>flush privileges;

b.使用hive用戶登錄,創建hive數據庫:

mysql -uhive -phive -h hadoop

mysql>create database hive;

mysql>show databases;

技術分享圖片

c.解壓mysql驅動包(先行解壓過hive包之後的操作)

Download Connector/J

解壓該安裝包並把該安裝包復制到/hive-x.x.x/lib目錄中

例如:cp mysql-connector-java-5.1.22-bin.jar /app/hive-1.2.2/lib

2.安裝hive

a.下載地址

Downloads

b.配置文件

(1)使用如下命令打開/etc/profile文件:

sudo vi /etc/profile

設置如下參數:

export HIVE_HOME=/.../hive-1.2.2

export PATH=$PATH:$HIVE_HOME/bin

export CLASSPATH=$CLASSPATH:$HIVE_HOME/bin

使配置文件生效:

source /etc/profile

echo $PATH

(2)

設置hive-env.sh配置文件

進入hive-1.2.2/conf目錄,復制hive-env.sh.templaete為hive-env.sh:

cd /.../hive-1.2.2/conf

cp hive-env.sh.template hive-env.sh

sudo vi hive-env.sh


分別設置HADOOP_HOME和HIVE_CONF_DIR兩個值:

# Set HADOOP_HOME to point to a specific hadoop install directory

export HADOOP_HOME=/.../hadoop-1.2.2

# Hive Configuration Directory can be controlled by:

export HIVE_CONF_DIR=/.../hive-1.2.2/conf

(3)設置hive-site.xml配置文件

復制hive-default.xml.templaete為hive-site.xml

cd /.../hive-1.2.2/conf

cp hive-default.xml.template hive-site.xml

sudo vi hive-site.xml

(4)修改 hive-site.xml

<property>
<name>hive.metastore.warehouse.dir</name>
<value>/.../hive-1.2.2/warehouse</value>
</property>
<property>
<name>hive.exec.scratchdir</name>
<value>/.../hive-1.2.2/scratchdir</value>
</property>
<property>
<name>hive.querylog.location</name>
<value>/.../hive-1.2.2/logs</value>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value> jdbc:mysql://localhost:3306/hivedb?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>*****(根據自己的用戶名填)</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>*****(根據自己的密碼填)</value>
</property>

(5)hive默認為derby數據庫,需要把相關信息調整為mysql數據庫

<property>

<name>hive.metastore.uris</name>

<value>thrift://hadoop:9083</value>(註意修改)

<description>Thrift URI for the remote metastore. ...</description>

</property>

<property>

<name>javax.jdo.option.ConnectionURL</name>

<value>jdbc:mysql://hadoop:3306/hive?=createDatabaseIfNotExist=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(根據自己設置的hive用戶名填寫)</value>

<description>username to use against metastore database</description>

</property>

<property>

<name>javax.jdo.option.ConnectionPassword</name>

<value>hive(根據自己設置的hive密碼填寫)</value>

<description>password to use against metastore database</description>

</property>


(由於hive版本不同可能會有個別配置文件的修改有不一樣的地方)

c.驗證

配置好Hive後,輸入hive命令啟動時會出現許多INFO和WARN信息。

技術分享圖片只要不報錯就沒什麽問題,原因是新的hadoop環境廢棄了某些參數。但是可以修改,網上教程我會貼在後面。

d.啟動

在使用hive之前需要啟動metastore和hiveserver服務,通過如下命令啟用:

hive --service metastore &

hive --service hiveserver2 &(版本在centos6.8-6.9請執行hive --service hiveserver)

技術分享圖片

啟動用通過jps命令可以看到兩個進行運行在後臺

技術分享圖片

e.操作驗證

登錄hive,在hive創建表並查看該表,命令如下:

hive

hive>create table test(a string, b int);

hive>show tables;

hive>desc test;

技術分享圖片

登錄mysql,在TBLS表中查看新增test表:

mysql -uhive -phive

mysql>use hive;

mysql>select TBL_ID, CREATE_TIME, DB_ID, OWNER, TBL_NAME,TBL_TYPE from TBLS;

技術分享圖片


三、註意事項和bug

a.執行hive命令出現INFO和WARN

$HADOOP_HOME/etc/hadoop/log4j.properties中將log4j.logger.org.apache.hadoop.conf.Configuration.deprecation打開。如下:


1. # Uncomment the following line to turn off configuration deprecation warnings.

2. log4j.logger.org.apache.hadoop.conf.Configuration.deprecation=WARN

無需重啟Hadoop,只需要重新啟動hive就會發現這些INFO都不見了。但是WARN還是會在。

Warn的解決方法: 加入配置項

(1)創建配置文件,直接copy默認配置文件再修改即可,用戶自定義配置會覆蓋默認配置
cp $HIVE_HOME/conf/hive-default.xml.template $HIVE_HOME/conf/hive-site.xml
cp $HIVE_HOME/conf/hive-env.sh.template $HIVE_HOME/conf/hive-env.sh
cp $HIVE_HOME/conf/hive-exec-log4j.properties.template $HIVE_HOME/conf/hive-exec-log4j.properties
cp $HIVE_HOME/conf/hive-log4j.properties.template $HIVE_HOME/conf/hive-log4j.properties

(2)修改 hive-log4j.properties
mkdir $HIVE_HOME/logs
vi $HIVE_HOME/conf/hive-log4j.properties
hive.log.dir=/opt/hive-1.2.1/logs

b.在hive啟動時遇到如下錯誤

[grid@Hadoop4 hadoop-2.7.2]$ hive

which: no HBase in(/home/grid/hadoop-2.7.2/bin:/usr/jdk1.8.0_91/bin:/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/grid/bin:/usr/local/apache-maven-3.3.9/bin:/home/grid/apache-ant-1.9.7/bin:/home/grid/apache-maven-3.3.9/bin:/home/grid/pig-0.16.0/bin:/home/grid/apache-hive-2.1.0-bin/bin)

SLF4J: Class path contains multiple SLF4Jbindings.

SLF4J: Found binding in[jar:file:/home/grid/apache-hive-2.1.0-bin/lib/log4j-slf4j-impl-2.4.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]

SLF4J: Found binding in[jar:file:/home/grid/hadoop-2.7.2/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]

SLF4J: SeeSLF4J Error Codes for an explanation.

SLF4J: Actual binding is of type[org.apache.logging.slf4j.Log4jLoggerFactory]

Logging initialized using configuration injar:file:/home/grid/apache-hive-2.1.0-bin/lib/hive-common-2.1.0.jar!/hive-log4j2.propertiesAsync: true

Exception in thread "main" Java.lang.IllegalArgumentException:java.net.URISyntaxException: Relative path in absolute URI:${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D


解決方法:
在hive-site.xml中添加

<property>

<name>system:java.io.tmpdir</name>

<value>/home/grid/apache-hive-2.1.0-bin/tmpdir</value>

</property>

<property>

<name>system:user.name</name>

<value>hive</value>

</property>

c.執行 hive --service hiveserver 命令報錯

Exception in thread "main" java.lang.ClassNotFoundException: org.apache.hadoop.hive.service.HiveServer
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:274)
at org.apache.hadoop.util.RunJar.main(RunJar.java:205)

解決辦法: hive --service hiveserver2 使用hiveserver2

(我說過我們使用的環境是centos7,網上會有其他版本的資料,這個問題的主因是語句更新的問題)

d.use hive報錯

如圖

技術分享圖片

查自己數據庫的表格,輸入正確的名字

e.啟動hive時,出現CommandNeedRetryException異常

技術分享圖片

Exception in thread "main" java.lang.NoClassDefFoundError:org/apache/hadoop/hive/ql/CommandNeedRetryException

at java.lang.Class.forName0(Native Method)

at java.lang.Class.forName(Class.java:270)

at org.apache.hadoop.util.RunJar.main(RunJar.java:149)

Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.hive.ql.CommandNeedRetryException

at java.net.URLClassLoader$1.run(URLClassLoader.java:366)

at java.net.URLClassLoader$1.run(URLClassLoader.java:355)

at java.security.AccessController.doPrivileged(Native Method)

at java.net.URLClassLoader.findClass(URLClassLoader.java:354)

at java.lang.ClassLoader.loadClass(ClassLoader.java:425)

at java.lang.ClassLoader.loadClass(ClassLoader.java:358)

由於以前使用hadoop時,修改hadoop-env.sh的HADOOP_CLASSPATH配置項,由以前的:

export HADOOP_CLASSPATH=/app/hadoop-x.x.x/myclass

修改為:

export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:/app/hadoop-x.x.x/myclass

五、思考

hive在具體實踐當中是什麽角色?

轉載:https://zhuanlan.zhihu.com/p/27719499

Hive1.2.2的安裝和配置