zoukankan      html  css  js  c++  java
  • HADOOP docker(四):安装hive

    getting start:
    https://cwiki.apache.org/confluence/display/Hive/GettingStarted
    hive wiki:
    https://cwiki.apache.org/confluence/display/Hive/Home#Home-UserDocumentation

    1.hive简介

    hive是一个sql查询引擎,是hadoop平台上的数据仓库工具,通过元数据映射将HDFS上的文件映射成表,并使用sql做计算,计算引擎是mapreducespark等。
    hive有5个组件:

    1. hive cli
      hive命令行工具
    2. beeline
      使用jdbc连接的命令行工具
    3. metastore
      元数据服务,默认是derby数据,生产上一般改成mysql或者其它数据库。hive 客户端通过此服务来读写hive元数据。如果不启动metasore,hive客户中就必须写明元数据库的所有信息才能访问元数据库,这样不安全。(经验证,实际上如果不使用catalog,那么metastore只能给cli提供元数据服务,其它程序通过hiveserver2能访问元数据库)
    4. hiveserver
      为应用程序提供jdbc接口
    5. catalog
      catalog用于对hive元数据提供统一管理接口。2.1.1版本中,catalog和metastore结合在一起。

    2.安装hive

    2.1 环境准备

    2.1.1 下载安装包

    1. 到这里下载合适的安装包:
      http://mirrors.tuna.tsinghua.edu.cn/apache/hive/

    2. 解压到/opt/hadoop/下

    [hive@hadoop1 hadoop]$ ls -l
    total 8
    drwxr-xr-x  9 hive hadoop 4096 Apr 20 18:15 apache-hive-2.1.1

    2.1.2 设置hive用户的环境变量

    编辑/home/hive/.bash_profile

    HIVE_HOME=/opt/hadoop/apache-hive-2.1.1
    export HIVE_CONF_DIR=/opt/hadoop/apache-hive-2.1.1/conf
    export HIVE_HOME
    PATH=$PATH:$HOME/bin:$HIVE_HOME/bin
    export PATH

    2.1.3 hive服务端配置文件

    1. hive-env.sh
    [hive@hadoop1 conf]$ mv hive-env.sh.template hive-env.sh
    [hive@hadoop1 conf]$ vi hive-env.sh
    export HADOOP_HOME=/opt/hadoop/hadoop-2.7.3
    export HIVE_CONF_DIR=/opt/hadoop/apache-hive-2.1.1/conf

    在这里可以控制hive cli启动时的java heap等。

    1. hive-site.xml
      在$HIVE_HOME/conf下创建hive-site.xml
      如果使用内置的derby数据库,hive-site.xml中不做任何设置即可。生产中一般会使用 mysql来存储元数据,并开启metastore和hiveserver服务:
      1)修改hive元数据库
      改成mysql,为了方便,使用root登录
    </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>
      <property>
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>com.mysql.jdbc.Driver</value>
        <description>Driver class name for a JDBC metastore</description>
      <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://localhost:3306/dockerhive?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>

    hive在hdfs上默认的数据目录是/user/hive/warehouse,如果想自定义数据目录,设置hive.metastore.warehouse.dir

    2.1.4 hive客户端配置文件

    设置客户端metastore接口。
    如果远程客户端想使用hive(如jdbc 工具、beeline等),则必须开启metastore服务,否则只有hive cli能使用hive

    <property>
      <name>hive.metastore.uris</name>
      <value>thrift://hadoop1:9083,hadoop2:9083</value>
      <description>IP address (or fully-qualified domain name) and port of the metastore host</description>
    </property>

    其它参数使用默认即可。

    2.1.4 分发hive配置文件

    将上述服务端配置文件放在hadoop1 hadoop2上。如果只想让其它机器通过 hadoop3 hadoop4 hadoop5 hadoop6上

    2.2 启动hive

    2.2.1 初始化数据库

    1.先尝试用derby

    [hive@hadoop1 apache-hive-2.1.1]$ $HIVE_HOME/bin/schematool -dbType derby -initSchema
    …………
    SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]
    Metastore connection URL:     jdbc:derby:;databaseName=metastore_db;create=true
    Metastore Connection Driver :     org.apache.derby.jdbc.EmbeddedDriver
    Metastore connection User:     APP
    Starting metastore schema initialization to 2.1.0
    Initialization script hive-schema-2.1.0.derby.sql
    Initialization script completed
    schemaTool completed

    2.如果你配置了mysql数据库,那么初始化mysql数据库:

    [hive@hadoop1 apache-hive-2.1.1]$ $HIVE_HOME/bin/schematool -dbType mysql -initSchema
    …..
    Starting metastore schema initialization to 2.1.0
    Initialization script hive-schema-2.1.0.mysql.sql
    Initialization script completed
    schemaTool completed

    注意:下载mysql-connector包到$HIVE_HOME/lib下

    2.2.2 创建HDFS目录

    1.改变hdfs权限
    注意:如果用hdfs用户来安装启动hive,此步忽略。

    hive数据默认放在/user/hive/warehousre下。
    由于hdfs文件系统是由hdfs用户创建的,这时hive是无权创建文件的,因此给hive用户授权:

    [hdfs@hadoop2 hadoop]$ hdfs dfs -mkdir /user/hive
    [hdfs@hadoop2 hadoop]$ hdfs dfs -chown -R  hive /user/hive

    这样hive就可以读写/user/hive目录了。另外把hdfs /tmp设置为777

    [hdfs@hadoop2 hadoop]$ hdfs dfs -chmod 777 /tmp

    2.创建hive目录

    [hive@hadoop1 apache-hive-2.1.1]$  /opt/hadoop/hadoop-2.7.3/bin/hdfs dfs -mkdir -p /user/hive/warehouse

    2.2.3 启动hive

    1.启动hive cli:

    [hive@hadoop1 apache-hive-2.1.1]$ hive
    ……
    hive>

    2.启动metastroe

    nohup $HIVE_HOME/bin/hive --service metastore -p 9083 > $HIVE_HOME/metastore_log &

    3.启动hiveserver

    [hive@hadoop1 ~]$ $HIVE_HOME/bin/hive --service hiveserver2

    4.连接beeline

    Enter username for jdbc:hive2://hadoop1:10000: hive
    Enter password for jdbc:hive2://hadoop1:10000: ****
    17/04/20 22:37:34 [main]: WARN jdbc.HiveConnection: Failed to connect to hadoop1:10000
    Error: Could not open client transport with JDBC Uri: jdbc:hive2://hadoop1:10000: Failed to open new session: java.lang.RuntimeException: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.authorize.AuthorizationException): User: hive is not allowed to impersonate hive (state=08S01,code=0)

    上网找了一番资料,原因是没设置hadoop用户代理。hadoop用户代理的作用,将hadoop中的superuser模拟成提交业务的用户,业务以superuser提交的,但是显示的作业名地是真正的提交用户。比如user1提交oozie作业到hadoop中,业务就会显示user1,如果不设置用户代理就会全显示为oozie的启动用户(如oozie).

    hiveserver2为什么要用到用户代理呢?
    原因在于hive.server2.enable.doAs默认为true,该参数表示用实际执行的用户而非启动hiveserver2的用户来显示提交的作业,即user1提交的作业会显示为user1而不是hiveserver2。将该参数设置为true后,所有的业务都显示为启动hiveserver2的用户提交的。
    修改hive-site.xml:

    <property>
        <name>hive.server2.enable.doAs</name>
        <value>false</value>
    </property>

    再启动beeline:

    [hive@hadoop5 apache-hive-2.1.1]$ beeline
    ……..
    Connecting to jdbc:hive2://hadoop1:10000
    Enter username for jdbc:hive2://hadoop1:10000: hive
    Enter password for jdbc:hive2://hadoop1:10000: ****
    Connected to: Apache Hive (version 2.1.1)
    Driver: Hive JDBC (version 2.1.1)
    17/04/21 15:04:32 [main]: WARN jdbc.HiveConnection: Request to set autoCommit to false; Hive does not support autoCommit=false.
    Transaction isolation: TRANSACTION_REPEATABLE_READ
    0: jdbc:hive2://hadoop1:10000>
    0: jdbc:hive2://hadoop1:10000> show databases;
    +----------------+--+
    | database_name  |
    +----------------+--+
    | default        |
    +----------------+--+
    1 row selected (1.991 seconds)

    这次就正常了。

    这里我们先把hive.server2.enable.doAs参数设置为false.下一章节会传讲如何设置hadoop用户代理。

    3.总结

    1. hive有众多可以设置的参数,参数hive官方文档或者$HIVE_HOME/conf/hive-site.default.tempate文件。做实验安装时只需要设置元数据库的信息即可启动。
    2. 要使用hive必须在hive-env.sh中设置HADOOP_HOME,因为hive会读取hadoop的配置信息
    3. hive metastore是给客户端提供元数据服务用的,如果不启动metastore,则客户端必须把元数据库的所有信息写上才能访问,这样很不安全。
    4. hiveserver2为用户提供jdbc接口,包括beeline在内的jdbc程序都依赖于此。
    5. hiveserver2默认提供用户代理功能,因此也必须开启hadoop上的hive用户代理功能。可以选择关闭该功能。

    下节将会简述hadoop用户代理。





  • 相关阅读:
    Python中把数据存入csv文件
    Python中把字典和值取出来
    scrapy输出请求状态码
    scrapy发送post请求获取cookie
    Python3 Unicode转中文
    Quartus13.0破解方法
    元音字母A的发音规则
    位bit——字节Byte???
    曾经的小孩在努力奔跑!
    如何看懂的时序图?
  • 原文地址:https://www.cnblogs.com/skyrim/p/7455257.html
Copyright © 2011-2022 走看看