zoukankan      html  css  js  c++  java
  • ubuntu16.04下hive安装与配置

    Hive是什么?

    由Facebook开源用于解决海量 结构化日志的数据统计; Hive是基于Hadoop的一个 数据仓库工具,可以将结构化的数据文件映射 成一张表,并提供类SQL查询功能;

    构建在Hadoop 之上的数据仓库; 1. 使用HQL作为查询接口; 2. 使用HDFS存储; 3. 使用MapReduce计算;

    本质是:将HQL转化成MapReduce 程序 灵活性和扩展性比较好:支持UDF,自定义存储格式等; 适合离线数据处理;

    Hive架构

    用户接口: Client

    CLI(hive shell)、JDBC/ODBC(java访问hive),WEBUI(浏览器访问hive)

    元数据: Metastore

    元数据包括:表名、表所属的数据库(默认是default)、表的拥有者、列/ 分区字段、表的类型(是否是外部表)、表的数据所在目录等; 默认存储在自带的derby数据库中,推荐使用采用MySQL存储Metastore;

    Hadoop

    使用HDFS进行存储,使用MapReduce进行计算;

    驱动器: Driver

    包含:解析器、编译器、优化器、执行器;

    1. 解析器:将SQL字符串转换成抽象语法树AST,这一步一般都用第三方工 具库完成,比如antlr;对AST进行语法分析,比如表是否存在、字段是否 存在、SQL语义是否有误(比如select中被判定为聚合的字段在group by中是否有出现);
    2. 编译器:将AST编译生成逻辑执行计划;
    3. 优化器:对逻辑执行计划进行优化;
    4. 执行器:把逻辑执行计划转换成可以运行的物理计划。对于Hive来说,就是MR/TEZ/Spark;

    Hive的有点及使用场景

    1. 操作接口采用类SQL语法,提供快速开发的能力(简单、容易上手);
    2. 避免了去写MapReduce,减少开发人员的学习成本;
    3. 统一的元数据管理,可与impala/spark等共享元数据;
    4. 易扩展(HDFS+MapReduce:可以扩展集群规模;支持自定义函数);
    5. 数据的离线处理;比如:日志分析,海量结构化数据离线分析…
    6. Hive的执行延迟比较高,因此hive常用于数据分析的,对实时性要求 不高的场合;
    7. Hive优势在于处理大数据,对于处理小数据没有优势,因为Hive的执 行延迟比较高。

     

    下载

    • wget http://mirrors.hust.edu.cn/apache/hive/hive-2.3.2/apache-hive-2.3.2-bin.tar.gz

    • 解压到指定目录 tar -zxvf ..

    配置环境变量

    如果是对所有的用户都生效就修改vi /etc/profile 文件, 如果只针对当前用户生效就修改 vi ~/.bahsrc 文件。

    vim /etc/profile
    
    export HIVE_HOME=/home/hadoop/hive-2.3.0/
    
    export PATH=$PATH:$HIVE_HOME/bin
    

    使环境变量生效,运行 source /etc/profile使/etc/profile文件生效

    Hive 配置 Hadoop HDFS

    复制 hive-site.xml

    cd /home/hadoop/hive-2.3.0/conf
    cp hive-default.xml.template hive-site.xml
    

    新建 hdfs 目录

    使用 hadoop 新建 hdfs 目录,因为在 hive-site.xml 中有默认如下配置:

    <property>
        <name>hive.metastore.warehouse.dir</name>
        <value>/user/hive/warehouse</value>
        <description>location of default database for the warehouse</description>
    </property>
    

    进入 hadoop 安装目录 执行hadoop命令新建/user/hive/warehouse目录,并授权,用于存储文件

    cd /home/hadoop/hadoop-2.7.4
    
    bin/hadoop fs -mkdir -p /user/hive/warehouse  
    bin/hadoop fs -mkdir -p /user/hive/tmp  
    bin/hadoop fs -mkdir -p /user/hive/log  
    bin/hadoop fs -chmod -R 777 /user/hive/warehouse  
    bin/hadoop fs -chmod -R 777 /user/hive/tmp  
    bin/hadoop fs -chmod -R 777 /user/hive/log  
    

    用以下命令检查目录是否创建成功

    bin/hadoop fs -ls /user/hive
    

    修改 hive-site.xml

    搜索hive.exec.scratchdir,将该name对应的value修改为/user/hive/tmp

    <property>  
        <name>hive.exec.scratchdir</name>  
        <value>/user/hive/tmp</value>  
    </property>  
    

    搜索hive.querylog.location,将该name对应的value修改为/user/hive/log/hadoop

    <property>
        <name>hive.querylog.location</name>
        <value>/user/hive/log/hadoop</value>
        <description>Location of Hive run time structured log file</description>
    </property>
    

    搜索javax.jdo.option.connectionURL,将该name对应的value修改为MySQL的地址

    <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://host:port/hive?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>
    

    搜索javax.jdo.option.ConnectionDriverName,将该name对应的value修改为MySQL驱动类路径

    <property>
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>com.mysql.jdbc.Driver</value>
        <description>Driver class name for a JDBC metastore</description>
    </property>
    

    搜索javax.jdo.option.ConnectionUserName,将对应的value修改为MySQL数据库登录名

    <property>
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>hive1</value>
        <description>Username to use against metastore database</description>
    </property>
    

    搜索javax.jdo.option.ConnectionPassword,将对应的value修改为MySQL数据库的登录密码

    <property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>mima</value>
        <description>password to use against metastore database</description>
    </property>
    

    创建 tmp 文件

    mkdir /home/hadoop/hive-2.3.0/tmp
    

    并在 hive-site.xml 中修改

    把{system:java.io.tmpdir} 改成 /home/hadoop/hive-2.3.0/tmp

    把 {system:user.name} 改成 {user.name}

    新建 hive-env.sh

    cp hive-env.sh.template hive-env.sh
    
    vi hive-env.sh
    
    HADOOP_HOME=/home/hadoop/hadoop-2.7.4/
    export HIVE_CONF_DIR=/home/hadoop/hive-2.3.0/conf
    export HIVE_AUX_JARS_PATH=/home/hadoop/hive-2.3.0/lib
    

    下载 mysql 驱动包

    cd /home/hadoop/hive-2.3.0/lib
    
    wget http://central.maven.org/maven2/mysql/mysql-connector-java/5.1.38/mysql-connector-java-5.1.38.jar
    

    初始化 mysql

    MySQL数据库进行初始化 首先确保 mysql 中已经创建 hive 库

    cd /home/hadoop/hive-2.3.0/bin
    ./schematool -initSchema -dbType mysql
    

    如果看到如下,表示初始化成功

    Starting metastore schema initialization to 2.3.0
    Initialization script hive-schema-2.3.0.mysql.sql
    Initialization script completed
    schemaTool completed
    

    如果出现没有权限的问题,在mysql授权(在安装mysql的机器上执行)

    mysql -uroot -p
    #(执行下面的语句  *.*:所有库下的所有表   %:任何IP地址或主机都可以连接)
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
    FLUSH PRIVILEGES;
    

    启动hive

    cd bin
    ./hive
    

    问题

    hive Call From node1/ip to node1:9000 failed on connection exception: java.net.ConnectException: Connection refused

    • 以上问题一般就是hadoop没有启动

    https://segmentfault.com/a/1190000011303459

  • 相关阅读:
    你想了解数据库吗,进来瞧一瞧吧,详细的数据库解读
    MySQL8.0-INFORMATION_SCHEMA增强
    工作总结:涉及数据库、软件测试等内容
    MySQL高级-MySQL锁
    年轻就该多尝试,教你20小时Get一项新技能
    “TensorFlow 开发者出道计划”全攻略,玩转社区看这里!
    MySQL数据库高级操作(图文详解)
    JAVA RMI helloworld入门
    JAVA8 十大新特性详解
    Java 8 Lambda表达式探险
  • 原文地址:https://www.cnblogs.com/tianboblog/p/8591979.html
Copyright © 2011-2022 走看看