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;

這樣也能達到方法二的效果。這種配置也是對本次啟動的會話有效,下次啟動需要重新配置。

上述三種設定方式的優先級依次遞增。即參數聲明覆蓋命令行參數,命令行參數覆蓋配置文件設定。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM