Hive命令和CLI(二)

Hive CLI

$HIVE_HOME/bin/hive 是一个 shell工具,可用于以交互方式或批处理方式运行Hive 查询。

Hive命令行选项

要获得帮助,请运行“hive -H”或“hive --help”。

Hive 0.9.0的命令行选项如下:

usage: hive
 -d,--define <key=value>          在hive命令行中定义变量
                                  e.g. -d A=B or --define A=B
 -e <quoted-query-string>         从命令行执行SQL
 -f <filename>                    从文件执行SQL
 -H,--help                        打印帮助信息
 -h <hostname>                    使用远程主机连接Hive Server
    --hiveconf <property=value>   使用给定的配置,
    --hivevar <key=value>         提供给Hive命令行的变量
                                  e.g. --hivevar A=B
 -i <filename>                    初始化SQL文件
 -p <port>                        连接到Hive Server 的端口号
 -S,--silent                      Silent mode in interactive shell
 -v,--verbose                     Verbose mode (echo executed SQL to the
                                  console)

版本信息

从 Hive 0.10.0 开始,还有一个额外的命令 line 选项:

--database <dbname>      指定要使用的数据库
  • 例子

    1. 从命令行运行查询的示例

      $HIVE_HOME/bin/hive -e 'select a.col from tab1 a'
      
    2. 设置 Hive configuration 变量的示例

      $HIVE_HOME/bin/hive -e 'select a.col from tab1 a' --hiveconf hive.exec.scratchdir=/home/my/hive_scratch  --hiveconf mapred.reduce.tasks=32
      
    3. 使用静默模式将数据从查询转储到文件中的示例

      $HIVE_HOME/bin/hive -S -e 'select a.col from tab1 a' > a.txt
      
    4. 从本地磁盘运行非交互式脚本的示例

      $HIVE_HOME/bin/hive -f /home/my/hive-script.sql
      
    5. 从 Hadoop 支持的文件系统中运行非交互式脚本的示例

      $HIVE_HOME/bin/hive -f hdfs://<namenode>:<port>/hive-script.sql
      $HIVE_HOME/bin/hive -f s3://mys3bucket/s3-script.sql
      
    6. 在进入交互模式之前运行初始化脚本的示例

      $HIVE_HOME/bin/hive -i /home/my/hive-init.sql
      
  • hiverc文件

    在没有-i选项的情况下调用 CLI 将尝试加载 H I V E H O M E / b i n / . h i v e r c 和 HIVE_HOME/bin/.hiverc 和 HIVEHOME/bin/.hivercHOME/.hiverc 作为初始化 files。

    关于日志记录

    Hive 使用 log4j 进行日志记录。默认情况下,这些日志不会发送到标准输出,而是捕获到 Hive 的 log4j properties 文件指定的 log 文件中。默认情况下,Hive 将在 Hive 安装的conf/目录中使用hive-log4j.default,该目录将日志写入/tmp//hive.log并使用WARN 级别记录。

    通常需要将日志发送到标准输出 and/or 更改 logging level 以进行调试。这些可以通过命令 line 完成,如下所示:

    $HIVE_HOME/bin/hive --hiveconf hive.root.logger=INFO,console
    

    hive.root.logger指定 logging level 以及 log 目标。将console指定为目标会将日志发送到标准错误(而不是 log 文件)。

Hive批处理模式命令

$HIVE_HOME/bin/hive-e-f选项一起运行时,它以批处理模式执行 SQL 命令。

  • hive -e ''执行查询 string。
  • hive -f从文件执行一个或多个 SQL 查询。

从 Hive 0.14 开始,可以来自 Hadoop 支持的文件系统之一(HDFS,S3,etc.))。

$HIVE_HOME/bin/hive -f hdfs://:/hive-script.sql` `$HIVE_HOME/bin/hive -f s3://mys3bucket/s3-script.sql
Hive交互式Shell 命令

$HIVE_HOME/bin/hive在没有-e-f选项的情况下运行时,它将进入交互式 shell 模式。使用 ”;” (分号)终止命令。可以使用“ – ”前缀指定脚本中的注释。

具体命令见Hive命令和CLI(一)

Hive资源

Hive 可以管理是否向 session 添加资源,其中这些资源需要在查询执行时提供。资源可以是 files,jars 或 archives。可以将任何本地可访问的文件添加到 session。

将资源添加到 session 后,Hive 查询可以通过其 name(在 map/reduce/transform 子句中)引用它,并且资源在整个 Hadoop cluster 上的执行时在本地可用。 Hive 使用 Hadoop 的分布式缓存在查询执行时将添加的资源分发到 cluster 中的所有计算机。

用法:

ADD { FILE[S] | JAR[S] | ARCHIVE[S] } <filepath1> [<filepath2>]*
   LIST { FILE[S] | JAR[S] | ARCHIVE[S] } [<filepath1> <filepath2> ..]
   DELETE { FILE[S] | JAR[S] | ARCHIVE[S] } [<filepath1> <filepath2> ..]
  • FILE 资源只是添加到分布式缓存中。通常,这些资源可能是要执行的转换脚本。
  • JAR 资源也被添加到 Java classpath 中。这在对象引用中是必需的,它们包含诸如 UDF 之类的对象。有关自定义 UDF 的更多信息,请参见Hive 插件
  • ARCHIVE 资源会自动取消归档,作为分发它们的一部分。

例:

hive> add FILE /tmp/tt.py;
hive> list FILES;
  /tmp/tt.py
hive> select from networks a 
               MAP a.networkid 
               USING 'python tt.py' as nn where a.ds = '2009-01-04' limit 10;

从Hive 1.2.0开始,可以使用 ivy://group:module:version?query_string 形式的lvy URL 添加和删除资源。

  • group - 模块来自哪个模块 group。直接转换为 Maven groupId 或 Ivy Organization。
  • module - 要加载的模块的 name。直接转换为 Maven artifactId 或 Ivy artifact。
  • version - 要使用的模块的 version。可以使用任何 version 或*(最新)或 Ivy 范围。

可以在查询语句中传递各种参数,以配置如何以及将哪些 jars包添加到工件中。参数采用 key value 对的形式,由’&'进行分隔。

用法:

ADD { FILE[S] | JAR[S] | ARCHIVE[S] } <ivy://org:module:version?key=value&key=value&...> <ivy://org:module:version?key=value&key1=value1&...>*
DELETE { FILE[S] | JAR[S] | ARCHIVE[S] } <ivy://org:module:version> <ivy://org:module:version>*

此外,我们可以在相同的 ADD 和 DELETE 命令中混合使用和。

ADD { FILE[S] | JAR[S] | ARCHIVE[S] } { <ivyurl> | <filepath> } <ivyurl>* <filepath>* 
DELETE { FILE[S] | JAR[S] | ARCHIVE[S] } { <ivyurl> | <filepath> } <ivyurl>* <filepath>*

可以传递的不同参数是:

  • exclude:以 org:module 形式使用逗号分隔的 value。
  • transitive:取值 true 或 false。默认为 true。当 transitive = true 时,将下载所有传递依赖项并将其添加到 classpath。
  • ext:要添加的文件的扩展名。默认情况下为 ‘jar’。
  • 分类器:要解析的 maven 分类器。

例子:

hive>ADD JAR ivy://org.apache.pig:pig:0.10.0?exclude=org.apache.hadoop:avro;
hive>ADD JAR ivy://org.apache.pig:pig:0.10.0?exclude=org.apache.hadoop:avro&transitive=false;

除非某些依赖项由其他资源共享,否则 DELETE 命令将删除资源及其所有传递依赖项。如果两个资源共享一组传递依赖项,并且使用 DELETE 语法删除其中一个资源,则除了共享的资源外,将删除资源的所有传递依赖项。

例子:

hive>ADD JAR ivy://org.apache.pig:pig:0.10.0
hive>ADD JAR ivy://org.apache.pig:pig:0.11.1.15
hive>DELETE JAR ivy://org.apache.pig:pig:0.10.0

如果 A 是包含 pig-0.10.0 的传递依赖性的集合,并且 B 是包含 pig-0.11.1.15 的传递依赖性的集合,则在执行上述命令之后,将删除 A-(A 交集 B)。

如果转换脚本中使用的 files 已经在 Hadoop cluster 中使用相同路径 name 的所有计算机上可用,则不必将 files 添加到 session。例如:

  • ... MAP a.networkid USING 'wc -l' ...
    这里wc是所有机器上都可用的可执行文件。
  • ... MAP a.networkid USING '/home/nfsserv1/hadoopscripts/tt.py' ...
    这里tt.py可以通过在所有 cluster 节点上配置相同的 NFS 挂载点访问。

请注意,Hive configuration 参数还可以指定 jars,files 和 archives。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值