天天看點

Hive 基本環境部署

一、Hive 運作模式

與 

Hadoop

 類似,

Hive

 也有 3 種運作模式:

1. 内嵌模式

将中繼資料儲存在本地内嵌的 Derby 

資料庫 中,這是使用  hive

 最簡單的方式。但是這種方式缺點也比較明顯,因為一個内嵌的 Derby 資料庫每次隻能通路一個資料檔案,這也就意味着它不支援多會話連接配接。

2. 本地模式

這種模式是将中繼資料儲存在本地獨立的資料庫中(一般是 

MySQL

),這用就可以支援多會話和多使用者連接配接了。

3. 遠端模式

此模式應用于 Hive 用戶端較多的情況。把 

mysql  資料庫獨立出來,将中繼資料儲存在遠端獨立的 MySQL 服務中,避免了在每個用戶端都安裝 MySQL 服務進而造成備援浪費的情況。

二、下載下傳安裝 Hive

http://hive.apache.org/downloads.html

三、配置系統環境變量

修改 /etc/profile 檔案,使用 sudo vim /etc/profile 來修改:

# Hive environment
export HIVE_HOME=/usr/local/hadoop/hive
export PATH=$HIVE_HOME/bin:$HIVE_HOME/conf:$PATH      

四、内嵌模式

(1)修改 Hive 配置檔案

$HIVE_HOME/conf 對應的是 Hive 的配置檔案路徑,類似于之前學習的

Hbase

, 該路徑下的 hive-site.xml 是 Hive 工程的配置檔案。預設情況下,該檔案并不存在,我們需要拷貝它的模版來實作:

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

hive-site.xml 的主要配置有:

  • hive.metastore.warehouse.dir

    該參數指定了 Hive 的資料存儲目錄,預設位置在 HDFS 上面的 /user/hive/warehouse 路徑下。

  • hive.exec.scratchdir

    該參數指定了 Hive 的資料臨時檔案目錄,預設位置為 HDFS 上面的 /tmp/hive 路徑下。

同時我們還要修改 Hive 目錄下 /conf/hive-env.sh 檔案(請根據自己的實際路徑修改),該檔案預設也不存在,同樣是拷貝它的模版來修改:

export HADOOP_HEAPSIZE=1024

# Set HADOOP_HOME to point to a specific hadoop install directory
HADOOP_HOME=/usr/local/hadoop

# Hive Configuration Directory can be controlled by:
export HIVE_CONF_DIR=/usr/local/hadoop/hive/conf

# Folder containing extra ibraries required for hive compilation/execution can be controlled by:
export HIVE_AUX_JARS_PATH=/usr/local/hadoop/hive/lib      

(2)建立必要目錄

前面我們看到 hive-site.xml 檔案中有兩個重要的路徑,切換到 

hadoop

 使用者下檢視 HDFS 是否有這些路徑:

$ hadoop dfs -ls /      

沒有發現上面提到的路徑,是以我們需要自己建立這些目錄,并且給它們賦予使用者寫(W)權限。

$ hadoop dfs -mkdir /user/hive/warehouse
$ hadoop dfs -mkdir /tmp/hive
$ hadoop dfs -chmod 777 /user/hive/warehouse
$ hadoop dfs -chmod 777 /tmp/hive      

如果你遇到 no such file or directory 類似的錯誤,就一步一步建立目錄,例如:

$ hadoop dfs -mkdir /tmp
$ hadoop dfs -mkdir /tmp/hive      

檢查是否建立成功 hadoop dfs -ls / 以及 hadoop dfs -ls /user/hive/ :

(3)修改 io.tmpdir 路徑

同時,要修改 hive-site.xml 中所有包含 ${system:

Java

.io.tmpdir} 字段的 value 即路徑(vim下 / 表示搜尋,後面跟你的關鍵詞,比如搜尋 hello,則為 /hello , 再回車即可),你可以自己建立一個目錄來替換它,例如 /home/hive/iotmp . 同樣注意修改寫權限。如果不修改這個,你很可能會出現如下錯誤

(4)

 初始化

:/schematool -initSchema -dbType derby

運作 Hive

./hive

前面我們已經提到過,内嵌模式使用預設配置和 Derby 資料庫,是以無需其它特别修改,先 ./start-all.sh 啟動 Hadoop, 然後直接運作 hive:

報錯

Hive 基本環境部署

解決方法:

 create table test_table(id INT, username string);

show tables;

五、遠端模式

1.配置

vim hive-site.xml      
<?xml version="1.0"?><configuration>
	          <property>		<name>javax.jdo.option.ConnectionURL</name><value>jdbc:mysql://{ip:port}/{databases}</value>       </property><property><name>javax.jdo.option.ConnectionDriveName</name><value>com.mysql.jdbc.Driver</value></property><property><name>javax.jdo.option.ConnectionUserName</name><value>{username}</value></property><property><name>javax.jdo.option.ConnectionPassword</name><value>{password}</value></property><property><name>hive.metastore.warehouse.dir</name><value>/hive/warehouse</value>                     </property></configuration>      

初始化

./schematool -dbType mysql -initSchema

2.啟動metastore 

./hive --service metastore &      

預設端口 9083

在debug模式下開啟metastore :

執行hive --service metastore -hiveconf hive.root.logger=DEBUG,console

3.啟動HiveServer2

預設端口:10000

./hive --service hiveserver2 &      

4.啟動用戶端

./hive -- service cli      

5.啟動shell 或是 beeline

./beeline -u jdbc:hive2://app:10000/default      

六.配置spark為預設引擎

hive使用spark有嚴格的版本限制, Hive根pom.xml的<spark.version>定義了使用它建構/測試的Spark的版本

版本不對會報如下錯誤:

FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.spark.SparkTask

第一種方法

1.要将Spark依賴項添加到Hive

在Hive 2.2.0之前,将spark-assembly jar連結到HIVE_HOME / lib

2.配置Hive執行引擎使用Spark:

Hive-site.xml配置

<property>

    <name>hive.execution.engine</name>

    <value>

Spark

</value>

</property>

  • 第二種方法
  • 配置hive-site.xml

<property><name>spark.home</name><value>/root/spark-without-hive</value></property>

七、Java用戶端

1.預設使用者名和密碼為空

2.預設端口10000,如果連不上須關閉防火牆

vim /etc/sysconfig/iptables

-A INPUT -p tcp -m state --state NEW -m tcp --dport 10000 -j ACCEPT

service iptables restart

錯誤

org.apache.hive.service.cli.HiveSQLException: Failed to open new session: java.lang.RuntimeException: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.authorize.AuthorizationException): User: root is not allowed to impersonate anonymous

at org.apache.hive.jdbc.Utils.verifySuccess(Utils.java:264)

at org.apache.hive.jdbc.Utils.verifySuccess(Utils.java:255)

at org.apache.hive.jdbc.HiveConnection.openSession(HiveConnection.java:593)

at org.apache.hive.jdbc.HiveConnection.<init>(HiveConnection.java:172)

at org.apache.hive.jdbc.HiveDriver.connect(HiveDriver.java:107)

at java.sql.DriverManager.getConnection(Unknown Source)

at com.car.test.HiveJdbcCli.getConn(HiveJdbcCli.java:156)

at com.car.test.HiveJdbcCli.main(HiveJdbcCli.java:35)

  • 修改hadoop 配置檔案 etc/hadoop/core-site.xml,加入如下配置項
  • <property>
        <name>hadoop.proxyuser.root.hosts</name>
        <value>*</value>
    </property>
    <property>
        <name>hadoop.proxyuser.root.groups</name>
        <value>*</value>
    </property>      
  • 重新開機hadoop
  • 測試:./beeline -u 'jdbc:hive2://localhost:10000/userdb' -n username(替換為上述的使用者名部分)

java.sql.SQLException: org.apache.thrift.transport.TTransportException: SASL authentication not complete

at org.apache.hive.jdbc.HiveStatement.closeClientOperation(HiveStatement.java:211)

at org.apache.hive.jdbc.HiveStatement.close(HiveStatement.java:228)

at com.car.test.HiveJdbcCli.main(HiveJdbcCli.java:74)

Caused by: org.apache.thrift.transport.TTransportException: SASL authentication not complete

解決辦法:

This is because the thrift server is expecting to authenticate via SASL when you open your transport connection. Hive Server 2 defaults to using SASL - unfortunately, 

PHP

 lacks a version of TSaslClientTransport (which is used as a wrapper around another TTransport object) which handles the SASL negotiation when you open your transport connection.

The easiest solution for now is to set the following property in your hive-site.xml

<property><name>hive.server2.authentication</name><value>NOSASL</value></property>      

Hive安裝方法二

以下操作在hdpsrc3 節點上操作

一,下載下傳安裝包

1,下載下傳hive http://mirrors.hust.edu.cn/apache/   得到apache-hive-1.1.0.tar.gz  ,放到該目錄下 /home/hdpsrc/

2,下載下傳mysql   http://dev.mysql.com/downloads/mysql/5.5.html#downloads   得到

mysql-client-5.5.39-2.linux2.6.x86_64.rpm

mysql-devel-5.5.39-2.linux2.6.x86_64.rpm

mysql-server-5.5.39-2.linux2.6.x86_64.rpm

mysql-shared-5.5.39-2.linux2.6.x86_64.rpm

mysql-shared-compat-5.5.39-2.linux2.6.x86_64.rpm

拷貝到該目錄下  /home/hdpsrc/Desktop/mysql/

二,安裝mysql

1,解除安裝系統自帶的mysql相關安裝包,僅解除安裝 mysql 開頭的包

rpm -qa|grep MySQL

sudo rpm -e --nodeps mysql-libs-5.1.71-1.el6.x86_64

2,安裝

cd /home/hdpsrc/Desktop/mysql/

sudo rpm -ivh mysql-*

sudo cp /usr/share/mysql/my-large.cnf /etc/my.cnf

3,啟動設定mysql

啟動mysql服務

sudo service mysql start

設定為開機自啟動

sudo chkconfig mysql on

設定root使用者登入密碼

sudo /usr/bin/mysqladmin -u root password 'wu123'

登入mysql  以root使用者身份登入

mysql -uroot -pwu123

建立hive使用者,資料庫等

insert into mysql.user(Host,User,Password) values("localhost","hive",password("hive"));

create database hive;

grant all on hive.* to hive@'%'  identified by 'hive';

grant all on hive.* to hive@'localhost'  identified by 'hive';

flush privileges;

退出mysql

exit

驗證hive使用者

mysql -uhive -phive

show databases;

看到如下回報資訊,則說明建立成功

mysql> show databases;

+--------------------+

| Database           |

| information_schema |

| hive               |

| test               |

3 rows in set (0.00 sec)

退出mysql

三,安裝hive

1,解壓安裝包

cd  ~

tar -zxvf apache-hive-1.1.0-bin.tar.gz

2,建立軟連接配接

ln -s apache-hive-1.1.0-bin hive

3,添加環境變量

vi  .bash_profile

導入下面的環境變量

export HIVE_HOME=/home/hdpsrc/hive

export PATH=$PATH:$HIVE_HOME/bin

使其有效

source .bash_profile

4,修改hive-site.xml

主要修改以下參數

<property>

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

  <value>jdbc:mysql://localhost:3306/hive </value>

</property>

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

  <value>com.mysql.jdbc.Driver </value>

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

  <value>hive </value>

  <name>hive.hwi.listen.port </name>

  <value>9999 </value>

  <description>This is the port the Hive Web Interface will listen on </descript ion>

  <name>datanucleus.autoCreateSchema </name>

  <value>true</value>

  <name>datanucleus.fixedDatastore </name>

  <value>false</value>

 <property>

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

   <value>hive</value>

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

 </property>

   <name>hive.exec.local.scratchdir</name>

   <value>/home/hdpsrc/hive/iotmp</value>

   <description>Local scratch space for Hive jobs</description>

   <name>hive.downloaded.resources.dir</name>

   <description>Temporary local directory for added resources in the remote file system.</description>

   <name>hive.querylog.location</name>

   <description>Location of Hive run time structured log file</description>

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

編輯hive-site.xml

5,拷貝mysql-connector-java-5.1.6-bin.jar 到hive 的lib下面

mv /home/hdpsrc/Desktop/mysql-connector-java-5.1.6-bin.jar /home/hdpsrc/hive/lib/

6,把jline-2.12.jar拷貝到hadoop相應的目錄下,替代jline-0.9.94.jar,否則啟動會報錯

cp /home/hdpsrc/hive/lib/jline-2.12.jar /home/hdpsrc/hadoop-2.6.0/share/hadoop/yarn/lib/

mv /home/hdpsrc/hadoop-2.6.0/share/hadoop/yarn/lib/jline-0.9.94.jar /home/hdpsrc/hadoop-2.6.0/share/hadoop/yarn/lib/jline-0.9.94.jar.bak /

7,穿件hive臨時檔案夾

mkdir /home/hdpsrc/hive/iotmp

四,啟動測試hive

啟動hadoop後,執行hive指令

測試輸入 show database;

hive> show databases;

OK

default

Time taken: 0.907 seconds, Fetched: 1 row(s)

遇到問題總結希望可以幫助遇到此類問題的人。

建議先建中繼資料庫,設定編碼latin1。否則建好中繼資料相關可能會出問題,如drop table 卡死, create table too long等等

hive對utf-8支援不好。設定完編碼latin1,發現table 字段描述無法顯示中文。修改中繼資料庫表的字元

(1)修改表字段注解和表注解

alter table COLUMNS_V2 modify column COMMENT varchar(256) character set utf8

alter table TABLE_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8

(2) 修改分區字段注解:

alter table PARTITION_PARAMS  modify column PARAM_VALUE varchar(4000) character set utf8 ;

alter table PARTITION_KEYS  modify column PKEY_COMMENT varchar(4000) character set utf8;

(3)修改索引注解:

alter table INDEX_PARAMS  modify column PARAM_VALUE  varchar(4000) character set utf8;

連接配接中繼資料設定

dbc:mysql://192.168.209.1:3306/metastore_hive_db?createDatabaseIfNotExist=true&amp;characterEncoding=UTF-8

對于已經建好的表,不起作用。 最好安裝的時候就修改編碼格式。

中繼資料mysql遠端模式配置

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

               <value>thrift://192.168.223.129:9083</value>

               <description>運作hive的主機位址及端口(特别重要ip不要弄錯)</description>

啟動中繼資料

bin/hive --service metastore &

到此hive已經安裝完成

參考文檔:http://www.mamicode.com/info-detail-516526.html

http://blog.csdn.net/blueheart20/article/details/38460541

備注:

1,遇到的問題:http://www.mamicode.com/info-detail-516526.html