Hive2.3.0之入门级安装教程

10 篇文章 0 订阅
4 篇文章 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作为前缀 -->
    <!-- 默认值:/user/hive/warehouse -->
    <property>
        <name>hive.metastore.warehouse.dir</name>
        <value>/user/hive/warehouse</value>
        <description>location of default database for the warehouse</description>
    </property>
    <!-- 使用Hive CLI时是否将当前使用的数据库作为前缀输出 -->
    <!-- 默认值:false -->
    <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时输出结果的同时是否输出列名 -->
    <!-- 默认值:false -->
    <property>
        <name>hive.cli.print.header</name>
        <value>true</value>
        <description>Whether to print the names of the columns in query output.</description>
    </property>
    <!-- 设置是否进行元数据版本校验 -->
    <!-- 默认值:true -->
    <property>
        <name>hive.metastore.schema.verification</name>
        <value>false</value>
        <description>
            Enforce metastore schema version consistency.
            True: Verify that version information stored in is compatible with one from Hive jars.  Also disable automatic
                    schema migration attempt. Users are required to manually migrate schema after Hive upgrade which ensures
                    proper metastore schema migration. (Default)
            False: Warn if the version information stored in metastore doesn't match with one from in Hive jars.
        </description>
    </property>

    <!-- 设置对于小数据,自动使用本地模式执行MR job,加快执行过程 -->
    <!-- 默认值:true -->
    <property>
        <name>hive.exec.mode.local.auto</name>
        <value>true</value>
        <description>Let Hive determine whether to run in local mode automatically</description>
    </property>
    <!-- 设置自动本地模式的输入数据量上限,大于此数据量则使用集群执行mr,反之则使用本地模式 -->
    <!-- 默认值:134217728 -->
    <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>
    <!-- 设置自动本地模式的输入文件上限 -->
    <!-- 默认值:4 -->
    <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上,MySQL通信端口为3306,
        存储Hive metadata的数据库名为hive_db,createDatabaseIfNotExist=true即
        如果不存在对应数据库则进行创建 -->
    <!-- 注意:xml文件中的jdbs url中的&符号必须转义成&amp; -->
    <!-- 默认值:jdbc:derby:;databaseName=metastore_db;create=true -->
    <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://hadoop101:3306/hive_db?createDatabaseIfNotExist=true&amp;useUnicode=true&amp;characterEncoding=UTF-8</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>
    <!-- Hive元数据库的驱动器 -->
    <!-- 默认值:org.apache.derby.jdbc.EmbeddedDriver -->
    <property>
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>com.mysql.jdbc.Driver</value>
        <description>Driver class name for a JDBC metastore</description>
    </property>
    <!-- 用于连接元数据数据库的用户名 -->
    <!-- 默认值:APP -->
    <property>
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>root</value>
        <description>Username to use against metastore database</description>
    </property>
    <!-- 用于连接元数据的用户密码 -->
    <!-- 默认值:mine -->
    <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)Shell命令行执行Hive查询

$HIVE_HOME/bin/hive -e 'select * from test.student';

7)Shell命令行执行Hive脚本

$HIVE_HOME/bin/hive -f '/tmp/hive.hql'

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>

3)设置Beeline自动登录Hiveserver2

进行Beeline默认登录配置后,可以通过直接键入beeline来实现连接hiveserver2,如:

$HIVE_HOME/bin/beeline --showDbInPrompt=true

${HIVE_CONF_DIR}路径下创建beeline-site.xml文件,参考配置:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
    <property>
        <name>beeline.hs2.jdbc.url.tcpUrl</name>
        <value>jdbc:hive2://hadoop101:10000/default</value>
    </property>

    <property>
        <name>beeline.hs2.jdbc.url.httpUrl</name>
        <value>jdbc:hive2://hadoop101:10000/default;transportMode=http;httpPath=cliservice</value>
    </property>
    
    <property>
        <name>beeline.hs2.jdbc.url.default</name>
        <value>tcpUrl</value>
    </property>
</configuration>

${HIVE_CONF_DIR}路径下创建beeline-hs2-connection.xml文件,参考配置:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
    <property>
        <name>beeline.hs2.connection.user</name>
        <value>hive</value>
        <description>Username to use against hiveserver2 service</description>
    </property>

    <property>
        <name>beeline.hs2.connection.password</name>
        <value>hive</value>
        <description>
            Password to use against hiveserver2 service,
            If the password is empty beeline.hs2.connection.password property should be removed
        </description>
    </property>

    <!-- 预设hiveconf变量键值对 -->
    <property>
        <name>beeline.hs2.connection.hiveconf</name>
        <value>hive.cli.print.current.db=true, hive.cli.print.header=true</value>
        <description>Set the hiveconf properties</description>
    </property>

    <!-- 预设hivevar变量键值对 -->
    <property>
        <name>beeline.hs2.connection.hivevar</name>
        <value></value>
        <description>Set the hivevar properties</description>
    </property>
</configuration>

End~

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值