Hive2.3.0之入門級安裝教程

前言

  • Hadoop:2.7.7
  • Hive:2.3.0
  • MySQL:5.7.10
  • JDK:1.8.0_221
  • mysql-connector-java:5.1.38

下載地址

Apache軟件歸檔分發目錄

Apache Hive


1. Hive安裝部署

部署Hive的前提是保證Hadoop集羣(或者standalone本地模式)已經安裝並配置正確

1)解壓Hive到指定路徑下

tar -xzvf apache-hive-2.3.0-bin.tar.gz -C /opt/module/

2)修改Hive文件夾名

cd /opt/module/
mv apache-hive-2.3.0-bin hive-2.3.0

3)設置環境變量

cd /opt/module/hive-2.3.0
sudo -s
echo "export HIVE_HOME=$(pwd)" > /etc/profile.d/hive.sh
echo "PATH=\$PATH:\$HIVE_HOME/bin" >> /etc/profile.d/hive.sh

4)在$HIVE_HOME/conf路徑下創建hive-env.sh文件,並配置相關參數

  • 創建hive-env.sh文件
cp hive-env.sh.template hive-env.sh
  • 配置HADOOP_HOME變量,即Hadoop安裝路徑
export HADOOP_HOME=/opt/module/hadoop-2.7.7
  • 配置HIVE_CONF_DIR變量,即Hive配置文件路徑
export HIVE_CONF_DIR=/opt/module/hive-2.3.0/conf

5)在$HIVE_HOME/conf路徑下複製hive-log4j2.properties.template文件並命名爲hive-log4j2.properties,修改文件中日誌文件存放路徑參數

cp hive-log4j2.properties.template hive-log4j2.properties

修改日誌文件存放路徑爲安路徑下的logs文件夾內

property.hive.log.dir = /opt/module/hive-2.3.0/logs

6)在$HIVE_HOME/conf路徑下創建hive-site.xml文件,並插入配置信息

vim hive-site.xml

配置信息

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
    <!-- Hive倉庫路徑,會自動加上hadoop配置參數fs.default.name作爲前綴 -->
    <property>
        <name>hive.metastore.warehouse.dir</name>
        <value>/user/hive/warehouse</value>
        <description>location of default database for the warehouse</description>
    </property>
    <!-- 使用Hive CLI時是否將當前使用的數據庫作爲前綴輸出 -->
    <property>
        <name>hive.cli.print.current.db</name>
        <value>true</value>
        <description>Whether to include the current database in the Hive prompt.</description>
    </property>
    <!-- 使用Hive CLI時輸出結果的同時是否輸出列名 -->
    <property>
        <name>hive.cli.print.header</name>
        <value>true</value>
        <description>Whether to print the names of the columns in query output.</description>
    </property>

    <!-- 設置對於小數據,自動使用本地模式執行MR job,加快執行過程 -->
    <property>
        <name>hive.exec.mode.local.auto</name>
        <value>true</value>
        <description>Let Hive determine whether to run in local mode automatically</description>
    </property>
    <property>
        <name>hive.exec.mode.local.auto.inputbytes.max</name>
        <value>134217728</value>
        <description>When hive.exec.mode.local.auto is true, input bytes should less than this for local mode.</description>
    </property>
    <property>
        <name>hive.exec.mode.local.auto.input.files.max</name>
        <value>4</value>
        <description>When hive.exec.mode.local.auto is true, the number of tasks should less than this for local mode.</description>
    </property>

    <!-- JDBC連接MySQL設置-->
    <!-- 其中MySQL本次安裝在hadoop101上,存儲Hive metadata的數據庫名爲hive_db -->
    <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://hadoop101:3306/hive_db?createDatabaseIfNotExist=true</value>
        <description>
            JDBC connect string for a JDBC metastore.
            To use SSL to encrypt/authenticate the connection, provide database-specific SSL flag in the connection URL.
            For example, jdbc:postgresql://myhost/db?ssl=true for postgres database.
        </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>root</value>
        <description>Username to use against metastore database</description>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>root</value>
        <description>password to use against metastore database</description>
    </property>
</configuration>

2. MySQL安裝部署

參考MySQL入門級安裝教程


3. 配置Hive使用MySQL存儲元數據

1)下載MySQL的JDBC驅動jar包

MySQL官網各版本JDBC(需要解壓獲取jar包):下載地址

Maven倉庫各版本MySQL-JDBC:下載地址

本次使用的是mysql-connector-java-5.1.38.jar:下載地址

mv mysql-connector-java-5.1.6.jar $HIVE_HOME/lib

4. 初始化元數據數據庫

在Hive 2.1版本之後,需要先將元數據數據庫初始化才能使用Hive

$HIVE_HOME/bin/schematool -initSchema -dbType mysql -initSchema

注意: 由於schematool使用JDBC連接MySQL數據庫時,默認使用的事務隔離級別爲READ COMMITTED或者READ UNCOMMITTED,如果MySQL默認使用的是InnoDB存儲引擎,那麼就要求在這兩種事務隔離級別下,MySQL中的二進制日誌文件binlog的記錄格式就必須爲ROW,否則會導致元數據數據庫初始化失敗,並報錯。

可能報錯: Error: Cannot execute statement: impossible to write to binary log since BINLOG_FORMAT = STATEMENT and at least one table uses a storage engine limited to row-based logging. InnoDB is limited to row-logging when transaction isolation level is READ COMMITTED or READ UNCOMMITTED.

解決方案: 在MySQL中刪除之前創建失敗的數據庫(hive_db),然後修改二進制日誌文件binlog的記錄格式爲ROW,重新進行初始化。


5. 使用Hive CLI訪問Hive

開啓Hive CLI:

$HIVE_HOME/bin/hive

簡單使用:

1)創建測試數據student.txt

1       Tom 
2       Alise
3       Alan

2)創建數據庫test

hive> create database test;

3)創建測試表student

hive> create table student(id int, name string) 
> ROW FORMAT DELIMITED
> FIELDS TERMINATED BY '\t';

4)導入測試數據

hive> LOAD DATA LOCAL INPATH '/tmp/student.txt' INTO table student;

5)查詢導入結果

hive> use test;
hive> select * from student;

6. 使用Beeline訪問Hive

在Hive 0.11版本之後,Hive CLI逐漸被HiveServer2所提供的Beeline所取代,Beeline具有Hive CLI所沒有的多用戶、安全性訪問等功能,使用方式在Hive CLI基礎上進行了擴展。本節主要演示如何使用HiveServer2以及Beeline工具。

1)啓動hiveserver2服務(也可以直接後臺運行)

$HIVE_HOME/bin/hiveserver2

2)使用Beeline工具連接hiveserver2服務

HS2_HOST爲啓動hiveserver2服務的主機IP;

HS2_PORT爲對應的端口,可以通過hive.server2.thrift.port參數進行配置,默認值爲10000;

username爲自己設置的登錄用戶名,password爲對應的密碼。默認情況下hiveserve2是不會進行登錄驗證,即配置參數hive.server2.authentication值爲NONE,進行beeline驗證時,隨便指定用戶名即可;

$HIVE_HOME/bin/beeline -u jdbc:hive2://$HS2_HOST:$HS2_PORT -n $username -p $password
#示例: $HIVE_HOME/bin/beeline -u jdbc:hive2://hadoop101:10000 -n tomandersen

注意: 如果hadoop的core-site.xml文件中未配置hadoop超級用戶模擬,那麼在使用JDBC連接hive時可能會報錯:無法模擬匿名用戶(not allowed to impersonate anonymous)

可能報錯: Hive JDBC:java.lang.RuntimeException: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.authorize.AuthorizationException): User: root is not allowed to impersonate anonymous

解決方案: 在個人hadoop集羣中,可以直接設置成使用hadoop超級用戶模擬所有用戶的行爲,即使用hadoop超級直接代理所有其他用戶提交MR作業。如啓動hadoop集羣的用戶爲tomandersen,那麼此用戶即爲hadoop集羣的超級用戶,在hadoop集羣主機的core-site.xml配置文件中插入以下配置即可:

    <!-- 使用超級用戶tomandersen模擬所有用戶執行MR job -->
    <!-- 此超級用戶需要根據實際情況更改,例如:當時配置hadoop和啓動hadoop的用戶爲hadoop,則
        所有tomandersen的字眼都要改成hadoop -->
    <property>
        <name>hadoop.proxyuser.tomandersen.hosts</name>
        <value>*</value>
    </property>
    <property>
        <name>hadoop.proxyuser.tomandersen.groups</name>
        <value>*</value>
    </property>

End~

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