zoukankan      html  css  js  c++  java
  • CentOS7下Hadoop2.9.2安装Hive 2.3.4安装与实践

    1.Hive简介

    Hive 是建立在 Hadoop 基础上的数据仓库处理工具,使用类SQL 的HiveQL 语言实现数据查询,所有Hive 的数据都存储在Hadoop 兼容的文件系统(例如,Amazon S3、HDFS)中。Hive 在加载数据过程中不会对数据进行任何的修改,只是将数据移动到HDFS 中Hive 设定的目录下,因此,Hive 不支持对数据的改写和添加,所有的数据都是在加载的时候确定的。

    Hive 的设计特点如下:
                ● 支持索引,加快数据查询。
                ● 支持不同的存储类型,例如,纯文本文件、HBase 中的文件。
                ● 将元数据保存在关系数据库中,大大减少了在查询过程中执行语义检查的时间。
                ● 可以直接使用存储在Hadoop 文件系统中的数据。
                ● 内置大量用户函数UDF 来操作时间、字符串和其他的数据挖掘工具,支持用户扩展UDF 函数来完成内置函数无法实现的操作。
                ● 类SQL 的查询方式,将SQL 查询转换为 MapReduce 的job 在Hadoop集群上执行。

    2.Hive的安装与配置

    Hive下载地址:
                 https://archive.apache.org/dist/hive/
                 http://mirrors.hust.edu.cn/apache/hive/
                 https://mirrors.tuna.tsinghua.edu.cn/apache/hive/
                 http://mirrors.shu.edu.cn/apache/hive/
                 http://mirror.bit.edu.cn/apache/hive/

    在安装Hive之前,需要保证你的Hadoop集群已经正常启动,关于如何安装和启动hadoop集群,请参考文章:

    https://blog.csdn.net/pengjunlee/article/details/81589972

    注意:Hive只需在Hadoop集群的NameNode节点上安装即可,无需在DataNode节点上安装;

    Hive默认使用内嵌的Derby数据库来存储它的元数据,但由于Derby数据库只支持单会话,所以,我们通常会使用Mysql作为它的外置存储引擎,方便多用户同时访问。

    在本文中,我们将使用MySQL数据库来替换Hive默认的Derby数据库,这要求你需要先安装好MySQL,如何安装和启动MySQL,可以参考文章:https://blog.csdn.net/pengjunlee/article/details/81212250

    2.2.安装hive

    本文安装的是 apache-hive-2.3.4-bin.tar.gz  其下载地址为:
                https://mirrors.tuna.tsinghua.edu.cn/apache/hive/hive-2.3.4/apache-hive-2.3.4-bin.tar.gz

    安装目标文件夹:/usr/local/hive-2.3.4

    cd /usr/local/
    tar -xf apache-hive-2.3.4-bin.tar.gz 
    mv apache-hive-2.3.4-bin hive-2.3.4
    

    3.配置hive

    3.1.配置环境变量(root权限)

    在 /etc/profile 配置文件中添加 Hive 环境变量,内容如下:

    vim /etc/profile
    export HIVE_HOME=/usr/local/hive-2.3.4
    export HIVE_CONF_DIR=$HIVE_HOME/conf
    PATH=$HIVE_HOME/bin:$PATH
    source  /etc/profile
    

      

    3.2.创建hive-site.xml

    cd  /usr/local/hive-2.3.4/conf
    vim hive-site.xml
    
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <configuration>
        <property>
            <name>hive.metastore.execute.setugi</name>
            <value>true</value>
        </property>
        <property>
            <name>hive.exec.scratchdir</name>
            <value>hdfs://nameservice1/inceptorsql1/tmp/hive</value>
        </property>
        <property>
            <name>javax.jdo.option.ConnectionPassword</name>
            <value>password</value>
        </property>
       <property>
            <name>hive.metastore.uris</name>
            <value>thrift://hostname:9083</value>
        </property> 
        <property>
            <name>hive.server2.session.check.interval</name>
            <value>60000</value>
        </property>
        <property>
            <name>hive.users.in.admin.role</name>
            <value>hive,hue,spark</value>
        </property>
        <property>
            <name>hive.merge.smallfiles.avgsize</name>
            <value>160000000</value>
        </property>
        <property>
            <name>mapreduce.framework.name</name>
            <value>yarn</value>
        </property>
        <property>
            <name>hive.metastore.warehouse.dir</name>
            <value>hdfs://nameservice1/inceptorsql1/user/hive/warehouse</value>
        </property>
        <property>
            <name>hbase.client.scanner.caching</name>
            <value>500</value>
        </property>
        <property>
            <name>hive.input.format</name>
            <value>org.apache.hadoop.hive.ql.io.HiveInputFormat</value>
        </property>
     <property>
        <name>datanucleus.schema.autoCreateAll</name>
        <value>true</value>
      </property>
        <property>
            <name>datanucleus.autoStartMechanism</name>
            <value>SchemaTable</value>
        </property>
        <property>
            <name>hive.server2.idle.session.timeout</name>
            <value>3600000</value>
        </property>
        <property>
            <name>javax.jdo.option.ConnectionURL</name>
            <value>jdbc:mysql://hostname:3306/metastore_inceptorsql1?createDatabaseIfNotExist=false&characterEncoding=UTF-8</value>
        </property>
        <property>
            <name>datanucleus.fixedDatastore</name>
            <value>true</value>
        </property>
        <property>
            <name>javax.jdo.option.ConnectionDriverName</name>
            <value>com.mysql.jdbc.Driver</value>
        </property>
        <property>
            <name>javax.jdo.option.ConnectionUserName</name>
            <value>root</value>
        </property>
        <property>
            <name>hive.exec.dynamic.partition</name>
            <value>false</value>
        </property>
        <property>
            <name>hbase.zookeeper.property.clientPort</name>
            <value>2181</value>
        </property>
        <property>
            <name>hive.exec.compress.output</name>
            <value>false</value>
        </property>
        <property>
            <name>hive.server2.authentication</name>
            <value>NONE</value>
        </property>
        <property>
            <name>hive.merge.mapredfiles</name>
            <value>true</value>
        </property>
        <property>
            <name>hive.server2.idle.operation.timeout</name>
            <value>3600000</value>
        </property>
        <property>
            <name>datanucleus.autoCreateSchema</name>
            <value>false</value>
        </property>
        <property>
            <name>hive.exec.compress.intermediate</name>
            <value>true</value>
        </property>
        <property>
            <name>hive.server2.logging.operation.enabled</name>
            <value>false</value>
        </property>
    </configuration>
    

      

      我们需要在HDFS中创建好相应的目录,操作命令如下:

     hdfs dfs -mkdir -p /inceptorsql1/user/hive/warehouse
     hdfs dfs -chmod -R 777 /inceptorsql1/user/hive/warehouse
     hdfs dfs -mkdir -p /inceptorsql1/tmp/hive
     hdfs dfs -chmod -R 777 /inceptorsql1/tmp/hive
    

      

    3.3修改Hive数据库配置

    在 hive-site.xml 中,与Hive数据库相关的配置有如下几个:

    属性名称 描述
    javax.jdo.option.ConnectionDriverName 数据库的驱动类名称
    javax.jdo.option.ConnectionURL 数据库的JDBC连接地址
    javax.jdo.option.ConnectionUserName 连接数据库所使用的用户名
    javax.jdo.option.ConnectionPassword 连接数据库所使用的密码

    3.4安装mysql数据库

     下载并安装MySQL官方的 Yum Repository

     wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
    yum -y install mysql57-community-release-el7-10.noarch.rpm
    yum -y install mysql-community-server
    vim /etc/my.cnf
    [mysqld]
    port      = 3306
    tmpdir    = /tmp
    datadir=/var/lib/mysql
    socket=/var/lib/mysql/mysql.sock
    explicit_defaults_for_timestamp=true
    symbolic-links=0
    log-error=/var/log/mysqld.log
    pid-file=/var/run/mysqld/mysqld.pid
    character-set-server=utf8mb4
    
    初始化数据库
    ./mysqld --defaults-file=/etc/my.cnf  --initialize
    
    systemctl status mysqld.service
    systemctl  enable mysqld.service
    
    密码:
    grep "password" /var/log/mysqld.log
    

    登陆mysql 修改密码授权

    SET PASSWORD = PASSWORD('123456');
    # 设置密码永不过期
    ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;
    FLUSH PRIVILEGES;  
    #设置远程主机登录
    GRANT ALL PRIVILEGES ON *.* TO root@"%" IDENTIFIED BY "123456";
    flush privileges;
    创建数据库
     CREATE DATABASE metastore_inceptorsql1;
    

      

    以上mysql 配置完成后,还需要将MySQL的驱动包拷贝到Hive的lib目录下:

    scp mysql-connector-java-5.1.36.jar  192.168.100.*:/usr/local/hive-2.3.4/lib
    

      

    3.5.配置hive-env.sh

    cd  /usr/local/hive-2.3.4/conf
    cp hive-env.sh.template hive-env.sh
    vim hive-env.sh
    # 编辑 hive-env.sh 增加下面3行内容
    export HADOOP_HOME=/usr/local/hadoop-2.9.2
    export HIVE_CONF_DIR=/usr/local/hive-2.3.4/conf
    export HIVE_AUX_JARS_PATH=/usr/local/hive-2.3.4/lib
    

     

    4.启动和测试

    4.1.Hive数据库初始化

     

    cd /usr/local/hive-2.3.4/bin
    # 初始化mysql数据库
    [root@localhost bin]$ schematool -initSchema -dbType mysql
    SLF4J: Class path contains multiple SLF4J bindings.
    SLF4J: Found binding in [jar:file:/usr/local/hive-2.3.4/lib/log4j-slf4j-impl-2.6.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]
    SLF4J: Found binding in [jar:file:/usr/local/hadoop-2.9.2/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
    SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
    SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]
    Metastore connection URL:     jdbc:mysql://*.*.*.*:3306/hive?createDatabaseIfNotExist=true
    Metastore Connection Driver :     com.mysql.jdbc.Driver
    Metastore connection User:     root
    Starting metastore schema initialization to 2.3.0
    Initialization script hive-schema-2.3.0.mysql.sql
    Initialization script completed
    schemaTool completed
    

     

    数据库初始化完成之后,会在MySQL数据库里生成如下metadata表用于存储Hive的元数据信息:

    4.2.启动Hive

    nohup  hive --service metastore &

    [root@localhost /usr/local/hive-2.3.4]# hive 
    which: no hbase in (/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/local/zookeeper-3.4.14/bin:/usr/java/default/bin:/usr/local/hadoop-2.9.2/bin:/usr/local/hadoop-2.9.2/sbin:/usr/local/hive-2.3.4/bin:/root/bin)
    SLF4J: Class path contains multiple SLF4J bindings.
    SLF4J: Found binding in [jar:file:/usr/local/hive-2.3.4/lib/log4j-slf4j-impl-2.6.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]
    SLF4J: Found binding in [jar:file:/usr/local/hadoop-2.9.2/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
    SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
    SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]
    
    Logging initialized using configuration in file:/usr/local/hive-2.3.4/conf/hive-log4j2.properties Async: true
    Hive-on-MR is deprecated in Hive 2 and may not be available in the future versions. Consider using a different execution engine (i.e. spark, tez) or using Hive 1.X releases.
    hive> show databases;
    OK
    default
    test
    user_test
    Time taken: 1.159 seconds
    

      

    安装参考:https://blog.csdn.net/pengjunlee/article/details/81607890

  • 相关阅读:
    PHP服务器端API原理及示例讲解(接口开发)
    Nginx的启动、停止与重启
    还是,Stairway To Haven
    NetBeans 时事通讯(刊号 # 42 Jan 20, 2009)
    Eve Backstory
    将默认的Netbeans中文版设置为英文界面/如何将Netbeans 6.5设置为英文界面
    Eve Backstory
    将默认的Netbeans中文版设置为英文界面/如何将Netbeans 6.5设置为英文界面
    领域驱动设计和开发实战
    领域驱动设计和开发实战
  • 原文地址:https://www.cnblogs.com/lyy3306/p/14358060.html
Copyright © 2011-2022 走看看