zoukankan      html  css  js  c++  java
  • Hive安装部署

    0x01 环境说明

    OS: CentOS-6.5-x86_64
    java: jdk1.8.0_111
    hadoop: hadoop-2.6.5
    hive: hive-2.1.1

    0x02 安装配置

    2.1 下载

    下载地址:http://www.apache.org/dyn/closer.cgi/hive
    安装版本:apache-hive-2.1.1-bin.tar.gz

    2.2 安装

    $ tar -zxvf apache-hive-2.1.1-bin.tar.gz
    $ mv apache-hive-2.1.1 /home/hadoop/cloud/
    # 建立软链,方便管理多个版本
    $ ln -s /home/hadoop/cloud/apache-hive-2.1.1 /home/hadoop/cloud/hive
    

    2.3 配置环境变量

    # vim /etc/profile
    //最后一行追加
    export HIVE_HOME=/home/hadoop/hive
    export PATH=$PATH:$HIVE_HOME/bin:$HIVE_HOME/conf
    

    使配置文件生效

    # source /etc/profile
    # su hadoop
    $ source /etc/profile
    

    2.4 在HDFS上创建hive数据文件目录

    在HDFS中建立用于存储Hive数据的文件目录(/tmp 目录可能已经存在):

    hadoop fs -mkdir /tmp
    hadoop fs -mkdir /user
    hadoop fs -mkdir /user/hive
    hadoop fs -mkdir /user/hive/warehouse
    hadoop fs -chmod g+w /tmp
    hadoop fs -chmod g+w /user/hive/warehouse
    

    以上命令在HDFS中建立了/tmp及/usr/hive/warehouse目录,其中/tmp主要用于存放一些执行过程中的临时文件,/user/hive/warehouse用于存放hive进行管理的数据文件。

    2.5 配置hive-site.xml

    这一步不是必须的,如果不配置,Hive将使用默认的配置文件,通过Hive配置文件可以对Hive进行定制及优化。最常见的是对“元数据存储层”的配置,默认情况下Hive使用Derby数据库作为“元数据存储层”。

    在Hive中Derby默认使用“单用户”模式进行启动,这就意味着同一时间只能有一个用户使用Hive,这适用于开发程序时做本地测试。

    Hive配置文件位于$Hive_Home/conf目录下面,名为hive-site.xml,这个文件默认情况下是不存在的,需要进行手动创建,在此目录下有个hive-default.xml.template的模板文件,首先需要通过它创建hive-site.xml文件。

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

    关于元数据库Dergy的默认配置如下:

    <!--JDBC元数据仓库连接字符串-->
      <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:derby:;databaseName=metastore_db;create=true</value>
        <description>JDBC connect string for a JDBC metastore</description>
      </property>
      <!--JDBC元数据仓库驱动类名-->
      <property>
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>org.apache.derby.jdbc.EmbeddedDriver</value>
        <description>Driver class name for a JDBC metastore</description>
      </property>
      <!--元数据仓库用户名-->
      <property>
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>APP</value>
        <description>Username to use against metastore database</description>
      </property>
       <!--元数据仓库密码-->
      <property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>mine</value>
        <description>password to use against metastore database</description>
      </property>
    

    从上面的配置中可以看到关于元数据库的配置,由于Hive中已经包含了这个内置的Derby数据库,因此不需要进行数据库的安装,同时在$Hive_Home/lib下还可以看到Derby的数据库驱动包(derby-xx.x.x.x.jar)。至此已经完成Hive各项工作的安装,可以通过以下命令测试Hive是否正常运行:

    hive
    hive> SET -v;
    hive> quit;
    

    可能出现的错误

    Exception in thread “main” Java.lang.RuntimeException: java. lang. IllegalArgumentException: java.NET.URISyntaxException: Relative path in absolute URI: ({system:java.io.tmpdir%7D/)%7Bsystem:user.name%7D

    处理:
    在hive-site.xml中新建配置项,iotmp文件夹是新建的:

    <property>
        <name>system:java.io.tmpdir</name>
        <value>/home/hadoop/hive/iotmp</value>
    </property>
    

    0x03 配置MySQL元数据库替换Derby

    如前所述,Hive在缺省情况下是使用内置的Derty数据库存储元数据,这对程序开发时本地测试没有任何问题。但如果在生产环境中,由于需要支持多用户同时进行系统访问,这可能不能满足应用需求。通过配置,可以让Derty运行为“多用户”模式来满足多用户访问需求。进一步,在实际的生产环境中通常会选用存储功能更为强大的Mysql数据库作为“元数据存储层”。Mysql作为最流行的开源关系型数据库,使用面广、功能多样,必要时可以充当临时的标准数据查询与分析系统使用,因此得到大量的Hive用户的青睐。
    如果使用Mysql作为“元数据存储层”,首先需要安装Mysql。
    CentOS 6.5通过yum安装和配置MySQL

    3.1 创建hive账号并授权

    安装之后再数据库中建立Hive账号并设置权限:

    $ mysql -u root -p
    mysql> create user 'hive'@'%' identified by 'hive';
    mysql> grant all privileges on *.* to 'hive'@'%' with grant option;
    mysql> flush privileges;
    

    3.2 配置hive-sive.xml

    接下来需要对hive-sive.xml配置文件进行以下修改,以支持mysql:

    因为默认hive-site.xml中内容太多,可以新建一个hive-site.xml将下面代码复制进去即可。

    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    
    <configuration>
        <property>
            <name>javax.jdo.option.ConnectionURL</name>
            <value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExit=true</value>
        </property>
        <property>
            <name>javax.jdo.option.ConnectionDriverName</name>
            <value>com.mysql.jdbc.Driver</value>
            <description>driver name</description>
        </property>
        <property>
            <name>javax.jdo.option.ConnectionUserName</name>
            <value>hive</value>
        </property>
        <property>
            <name>javax.jdo.option.ConnectionPassword</name>
            <value>hadoop</value>
        </property>
        <property>
            <name>datanucleus.schema.autoCreateTables</name>
            <value>true</value>
        </property>
        <property>
            <name>hive.metastore.schema.verification</name>
            <value>false</value>
        </property>
        <!--property>
            <name>hive.metastore.schema.local</name>
            <value>false</value>
        </property-->
        <property>
            <name>hive.server2.thrift.bind.host</name>
            <value>master</value>
        </property>
    </configuration>
    

    3.3 添加Mysql JDBC驱动

    由于Hive没有默认包含Mysql的JDBC驱动,因此需要将mysql-connector-java-x.x.xx.jar文件拷贝到$Hive_Home/lib目录中,否则Hive无法与Mysql进行通信。

    下载地址:https://dev.mysql.com/downloads/connector/j/

    我下载的版本是:mysql-connector-java-5.1.35.tar.gz

    至此,基于Mysql作为“元数据存储层”的Hive系统配置完成。

    3.4 测试

    3.4.1 初始化hive元数据库

    执行以下指令初始化hive元数据库,否则 mysql 里面储存 hive 元数据的数据库是空的,无法启动 hive,会报错。

    schematool -dbType mysql -initSchema

    可能出现问题

    [hadoop@master bin]$ schematool -dbType mysql -initSchema
    Metastore connection URL:        jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExit=true
    Metastore Connection Driver :    com.mysql.jdbc.Driver
    Metastore connection User:       hive
    Starting metastore schema initialization to 2.1.0
    Initialization script hive-schema-2.1.0.mysql.sql
    Error: Duplicate key name 'PCS_STATS_IDX' (state=42000,code=1061)
    org.apache.hadoop.hive.metastore.HiveMetaException: Schema initialization FAILED! Metastore state would be inconsistent !!
    Underlying cause: java.io.IOException : Schema script failed, errorcode 2
    Use --verbose for detailed stacktrace.
    *** schemaTool failed ***
    

    解决办法

    异常说明mysql服务已经启动。 应重新启动mysql服务再执行初始化schema操作。

    $ su root
    # service mysqld restart
    # exit
    

    初始化成功

    [hadoop@master bin]$ schematool -dbType mysql -initSchema
    Metastore connection URL:        jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExit=true
    Metastore Connection Driver :    com.mysql.jdbc.Driver
    Metastore connection User:       hive
    Starting metastore schema initialization to 2.1.0
    Initialization script hive-schema-2.1.0.mysql.sql
    Initialization script completed
    schemaTool completed
    

    3.4.2 启动

    启动hive metastore,然后输入命令hive即可进入hive命令行模式

    $ hive --service metastore &
    $ hive
    hive> show tables;
    

    参考链接:https://hexo2hexo.github.io/hive安装配置/(主要)
    http://www.jianshu.com/p/6108e0aed204

    0x04 hiveserver2配置

    如果想要远程访问hive数据库还需要配置并启用hiveserver2服务。

    4.1 配置hive-site.xml

    <property>
        <name>hive.server2.thrift.bind.host</name>
        <value>master</value>
    </property>
    

    默认是localhost

    4.2 启动hiveserver2

    hive --service hiveserver2

    4.3 使用beeline连接

    beeline -u jdbc:hive2://

    连接成功后显示:

    [hadoop@master bin]$ beeline -u jdbc:hive2://
    Connecting to jdbc:hive2://
    17/09/05 12:57:18 [main]: WARN conf.HiveConf: HiveConf of name hive.metastore.schema.local does not exist
    17/09/05 12:57:40 [main]: WARN conf.HiveConf: HiveConf of name hive.metastore.schema.local does not exist
    17/09/05 12:57:41 [main]: WARN metastore.ObjectStore: Version information not found in metastore. hive.metastore.schema.verification is not enabled so recording the schema version 2.1.0
    17/09/05 12:57:41 [main]: WARN metastore.ObjectStore: setMetaStoreSchemaVersion called but recording version is disabled: version = 2.1.0, comment = Set by MetaStore hadoop@192.168.1.10
    17/09/05 12:57:42 [main]: WARN session.SessionState: METASTORE_FILTER_HOOK will be ignored, since hive.security.authorization.manager is set to instance of HiveAuthorizerFactory.
    Connected to: Apache Hive (version 2.1.1)
    Driver: Hive JDBC (version 2.1.1)
    17/09/05 12:57:42 [main]: WARN jdbc.HiveConnection: Request to set autoCommit to false; Hive does not support autoCommit=false.
    Transaction isolation: TRANSACTION_REPEATABLE_READ
    Beeline version 2.1.1 by Apache Hive
    0: jdbc:hive2://> show databases;
    

    0x05 常见问题

    5.1 Unable to open a test connection to the given database

    java.sql.SQLException: Unable to open a test connection to the given database. JDBC url =

    解决方法:重新授权。

    mysql> grant all privileges on *.* to 'username'@'master' identified by 'password';
    flush privileges;
    mysql> grant all privileges on *.* to 'username'@'master' identified by 'password';
    mysql> flush privileges;
    

    5.2 安装Hive过程要注意

    1. MySQL 是否正常运行
    2. 创建好mysql 用户并分配好相应的访问权限以及数据库端口号等
    3. mysql-connector-Java-5.1.26-bin.jar 是否放到hive/lib 目录下 建议修改权限为777 (chmod 777 mysql-connector-java-5.1.26-bin.jar)
    4. 修改conf/hive-site.xml 中的 “hive.metastore.schema.verification” 值为 false 即可解决 “Caused by: MetaException(message:Version information not found in metastore. )”
    5. 调试 模式命令 hive -hiveconf hive.root.logger=DEBUG,console

    来源: http://blog.csdn.net/youngqj/article/details/19987727

    5.3 Access denied for user 'DBAUSER'@'linux-96' (using password: YES)

    FAILED: Error in metadata: javax.jdo.JDOFatalDataStoreException: Access denied for user 'DBAUSER'@'linux-96' (using password: YES)

    解决方法,创建hive用户重新授权即可。

    mysql -u root -p
    mysql>create user 'hive' identified by 'hive';
    mysql>grant all on *.* TO 'hive'@'%' with grant option;
    mysql>flush privileges;
    

    5.4 multbind警告

    启动hive命令行时出现multbind警告解决方法

    $HIVE_HOME/lib 目录下还有个 slf4j-log4j12-XXX.jar,在机器有装hadoop时,由于classpath中会有hadoop中的这个jar包,会有冲突,直接删除掉

    2017.06.25
    修改并上传时间
    update: 2017-10-19 07:05:14 星期四
    修改部分错误,重新排版。

  • 相关阅读:
    20162324 2016-2017-2《Java程序设计》课程总结
    Java实验五网络编程与安全
    Java结对编程之挑战出题
    实验四Android开发
    Java四则运算总结
    实验三
    Java结对编程四则运算一周小结
    队列课下作业
    20162325 金立清 S2 W5 C14
    2017-2018-1 我爱学Java 第二周 作业
  • 原文地址:https://www.cnblogs.com/ning-wang/p/7077613.html
Copyright © 2011-2022 走看看