zoukankan      html  css  js  c++  java
  • Hive之变量和属性

    首先看一下hive cli工具对于变量的定义规定的几项功能:

    $ bin/hive -h

    usage: hive

    -d,--define <key=value>          Variable subsitution to apply to hive

                                      commands. e.g. -d A=B or --define A=B

        --database <databasename>     Specify the database to use

    -e <quoted-query-string>         SQL from command line

    -f <filename>                    SQL from files

    -H,--help                        Print help information

    -h <hostname>                    connecting to Hive Server on remote host

        --hiveconf <property=value>   Use value for given property

        --hivevar <key=value>         Variable subsitution to apply to hive

                                      commands. e.g. --hivevar A=B

    -i <filename>                    Initialization SQL file

    -p <port>                        connecting to Hive Server on port number

    -S,--silent                      Silent mode in interactive shell

    -v,--verbose                     Verbose mode (echo executed SQL to the

                                      console)

    从上面输出可以看到,其中选项(-d,--define <key=value>),(--hiveconf <property=value>),(--hivevar <key=value>)都用于指定hive变量和属性。在cli中我们可以通过set命令修改或显示变量内容。

    使用(-d,--define <key=value>)和(--hivevar <key=value>)是等价的,这两个属性都可以在cli定义用户自定义变量,并且将变量放置在hivevar命令空间内,这样和其他3种系统内置命令空间进行区分。

    Hive中的变量和属性相关命令空间:

    wpsB618.tmp

    例1:

    $ bin/hive --define foo=bar

    hive (default)> set foo;

    foo=bar

    hive (default)> set hivevar:foo;

    hivevar:foo=bar

    hive (default)> set hivevar:foo=bar1;

    hive (default)> set foo;

    foo=bar1

    hive (default)> set hivevar:foo;

    hivevar:foo=bar1

    hive (default)> set foo=bar2;

    hive (default)> set foo;

    foo=bar2

    hive (default)> set hivevar:foo;

    hivevar:foo=bar1

    例2:

    $ bin/hive --hivevar foo=bar

    hive (default)> set foo;

    foo=bar

    hive (default)> set hivevar:foo;

    hivevar:foo=bar

    hive (default)> set hivevar:foo=bar1;

    hive (default)> set foo;

    foo=bar1

    hive (default)> set hivevar:foo;

    hivevar:foo=bar1

    hive (default)> set foo=bar2;

    hive (default)> set foo;

    foo=bar2

    hive (default)> set hivevar:foo;

    hivevar:foo=bar1

    通过以上两个例子可以发现,--define和--hivevar结果是等价的。

    例3:--hiveconf在hive启动cli时指定参数值

    $ bin/hive --hiveconf hive.cli.print.current.db=false

    hive> set hive.cli.print.current.db;

    hive.cli.print.current.db=false

    hive> set hiveconf:hive.cli.print.current.db;

    hiveconf:hive.cli.print.current.db=false

    hive> set hiveconf:hive.cli.print.current.db=true;

    hive (default)> set hive.cli.print.current.db=false;   

    hive> set hiveconf:hive.cli.print.current.db;    

    hiveconf:hive.cli.print.current.db=false

    hive> set hive.cli.print.current.db;        

    hive.cli.print.current.db=false

    注意:system和env变量前的system:和env:不能省略。

    修改hive参数的方法:

    方法一:

    在Hive中,所有的默认配置都在${HIVE_HOME}/conf/hive-default.xml文件中,如果需要对默认的配置进行修改,可以创建一个hive-site.xml文件,放在${HIVE_HOME}/conf目录下。里面可以对一些配置进行个性化设定。Hive也会读入Hadoop的配置,因为Hive是作为Hadoop的客户端启动的,Hive的配置会覆盖Hadoop的配置。在hive-site.xml的格式如下:

    1

    <configuration>

    2

        <property>

    3

            <name>hive.metastore.warehouse.dir</name>

    4

            <value>/user/hive/warehouse</value>

    5

            <description>location of

    6

                  default database for the warehouse</description>

    7

        </property>

    8

    </configuration>

    方法二:

    在启动Hive cli的时候进行配置,可以在命令行添加-hiveconf param=value来设定参数,例如:

    1

    $ hive --hiveconf mapreduce.job.queuename=queue1

    这样在Hive中所有MapReduce作业都提交到队列queue1中。这一设定对本次启动的会话有效,下次启动需要重新配置。

    方法三:

    在已经进入cli时进行参数声明,可以在HQL中使用SET关键字设定参数,例如:

    1

    hive> set mapreduce.job.queuename=queue1;

    这样也能达到方法二的效果。这种配置也是对本次启动的会话有效,下次启动需要重新配置。

    上述三种设定方式的优先级依次递增。即参数声明覆盖命令行参数,命令行参数覆盖配置文件设定。

  • 相关阅读:
    初步掌握Yarn的架构及原理(转)
    CORS 专题
    WebSocket是一种协议
    InputStream中read()与read(byte[] b)(转)
    listview异步加载sd卡图片
    ListView getView中放置多个item和getItemViewType的用法
    Android ListView异步加载数据
    android sqlite 一次创建多个表
    Android Adapter的getViewTypeCount和getItemViewType
    Android 获取SDCard上图片和视频的缩略图
  • 原文地址:https://www.cnblogs.com/wcwen1990/p/7156789.html
Copyright © 2011-2022 走看看