1. 程式人生 > >事無鉅細 Hive1.2.1 Hiveserver搭建詳解

事無鉅細 Hive1.2.1 Hiveserver搭建詳解

上文介紹了Hadoop2.6.4叢集搭建的詳細步驟。現在我們在此基礎上,搭建Hiveserver。同樣,事無鉅細,難免跑題。

環境需求列表

  • Hive1.2版本開始,依賴Java1.7+0.14-1.1版本依賴Java1.6+。推薦用Java1.8
  • 推薦使用Hadoop2.x 系列。Hive2.0開始不再支援Hadoop1.x系列。0.13版之前的Hive也仍支援Hadoop0.20.x0.23.x系列。
  • 在生產環境下推薦使用LinuxWindows系統。Mac系統僅推薦在試驗環境使用。

下載安裝Hive

下載Hive安裝包

wget http://mirrors.cnnic.cn/apache/hive/hive-1.2.1/apache-hive-1.2.1-bin.tar.gz

解壓到當前使用者目錄下(我的安裝包都下載在使用者的download的目錄下。)

tar -xzvf apache-hive-1.2.1-bin.tar.gz -C ~/

強迫症,改個和Hadoop統一的名字。

mv apache-hive-1.2.1-bin/ hive-1.2.1

設定環境變數

需要配置HIVE_HOMEHIVE_BIN

vim ~/.bashrc

修改內容如下:

export HIVE_HOME=$HOME/hive-1.2.1
export PATH=$PATH:$HOME/bin:$HIVE_HOME/binsour

立即生效

source ~/.bashrc

Metadata Store MySQL安裝

Hive有三種元資料儲存的模式。

  • Embedded mode
  • Local mode
  • Remote mode

很多文章裡都有介紹,但是很少有人具體解釋其區別和原理。OneCoder很不滿意,這裡找到一篇介紹,至少對我來說,算是能看懂他所介紹的。 Metastore Deployment Modes

這裡採用Remote mode。因此我們先要部署MySQL

安裝MySQL5.7.12

下載

wget http://cdn.mysql.com//Downloads/MySQL-5.7/mysql-community-server-5.7.12-1.el6.x86_64.rpm

安裝

sudo rpm -i mysql-community-server-5.7.12-1.el6.x86_64.rpm

發現缺少依賴

mysql-community-common-5.7.12、mysql-community-client-5.7.12和mysql-community-libs-5.7.12

下載依賴:

wget http://repo.mysql.com/yum/mysql-5.7-community/el/6/x86_64/mysql-community-common-5.7.12-1.el6.x86_64.rpm
wget http://repo.mysql.com/yum/mysql-5.7-community/el/6/x86_64/mysql-community-client-5.7.12-1.el6.x86_64.rpm
wget http://repo.mysql.com/yum/mysql-5.7-community/el/6/x86_64/mysql-community-libs-5.7.12-1.el6.x86_64.rpm

賦予可執行許可權

chmod 700 mysql-community-*

安裝依賴

sudo rpm -i mysql-community-libs-5.7.12-1.el6.x86_64.rpm
sudo rpm -i mysql-community-common-5.7.12-1.el6.x86_64.rpm
sudo rpm -i mysql-community-client-5.7.12-1.el6.x86_64.rpm

安裝MySQL

sudo rpm -i mysql-community-server-5.7.12-1.el6.x86_64.rpm

建立自己的MySQL資料目錄,在當前使用者的主目錄下執行

mkdir -p metastore-mysql/data
mkdir -p metastore-mysql/logs

賦予許可權,由於mysql實際是使用mysql使用者啟動服務。而我們的資料目錄改在了dps-hadoop使用者的根目錄下,所以得從根上,給mysql使用者以RX許可權

sudo chmod -R 755 /home/dps-hadoop

修改my.cnf配置檔案

vim /etc/my.cnf

內容如下

[mysqld]
datadir=/home/dps-hadoop/metastore-mysql/data
socket=/home/dps-hadoop/metastore-mysql/data/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
[mysqld_safe]
socket=/home/dps-hadoop/metastore-mysql/data/mysql.sock
log-error=/home/dps-hadoop/mysqllog/mysqld.log
pid-file=/home/dps-hadoop/metastore-mysql/data/mysqld.pid
[mysql]
socket=/home/dps-hadoop/metastore-mysql/data/mysql.sock
[mysqladmin]
socket=/home/dps-hadoop/metastore-mysql/data/mysql.sock
datadir=/home/dps-hadoop/metastore-mysql/data
socket=/home/dps-hadoop/metastore-mysql/data/mysql.sock
log-error=/home/dps-hadoop/mysqllog/mysqld.log

其中log-error對應的路徑需要提前建立,而datadir路徑會自動建立。

關閉Selinux,否則會因為無法建立資料目錄而報錯。

setenforce 0

啟動mysql

sudo service mysqld start

在啟動日誌裡會發現root使用者的臨時密碼: qkkmgd.Np0?N 登入後修改密碼即可。

mysql -u root -p

建立資料庫hive

mysql> create database hive;

建立hive使用者並授權

mysql> grant all on hive.* to [email protected]'%'  identified by '密碼';

配置Hive

Hiveconf目錄下提供了一個配置檔案模版hive-default.xml.template供我們修改。而Hive會預設載入hive-site.xml配置檔案。因此,拷貝一份。

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

同樣,按照了解,我們需要配置metastore的相關資訊,如資料庫連線,驅動,使用者名稱,密碼等。

<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>資料庫密碼</value>
    <description>password to use against metastore database</description>
  </property>
<property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://master:3306/hive?createDatabaseIfNotExist=true&amp;useSSL=false;</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>hive.metastore.uris</name>
    <value>thrift://master:9083</value>
    <description>Thrift URI for the remote metastore. Used by metastore client to connect to remote metastore.</description>
  </property>

這裡,metastore服務的預設埠為9083

還需要配置本地資料倉庫路徑

<property>
    <name>hive.metastore.warehouse.dir</name>
    <value>/home/dps-hadoop/warehouse</value>
    <description>location of default database for the warehouse</description>
  </property>

由於我們需要連線MySQL資料庫,而Hive並沒有提供相應的驅動,所以需要下載MySQL JDBC驅動,並放在Hivelib目錄下。直接進入lib目錄執行

wget http://central.maven.org/maven2/mysql/mysql-connector-java/5.1.38/mysql-connector-java-5.1.38.jar

修改log日誌檔案位置

Hive預設將日誌存放在/tmp/${user.name}下。為了方便維護和檢視,修改日誌檔案位置。

cp conf/hive-log4j.properties.template conf/hive-log4j.properties

修改

hive.log.dir=/home/dps-hadoop/logs/hive

啟動HiveServer服務

啟動MetaStore Service

bin/hive --service metastore &

啟動HiveServer

bin/hive --service hiveserver2 &

檢視日誌一切正常。

驗證Hive客戶端

bin/hive

發現報錯

Exception in thread “main” java.lang.IncompatibleClassChangeError: Found class jline.Terminal, but interface was expected

這是由於jline的版本衝突,在hadooplib帶的版本低。解決辦法,修改hive-env.sh

vim conf/hive-env.sh

新增

export HADOOP_USER_CLASSPATH_FIRST=true

即用hive裡的高版本覆蓋Hadoop裡的低版本。

再次啟動客戶端,一切OK。通過beeline客戶端驗證也ok。至此Hiveserver2部署完成。