暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Hive CLI 不仅仅只能运行SQL...

大数据技能圈 2023-07-07
11

$HIVE_HOME/bin/hive是一个shell实用程序,可用于以交互或批处理模式运行hive查询。

推荐使用 Beeline CLI

HiveServer2(在Hive 0.11中引入)有自己的CLI Beeline,它是一个基于SQLLine的JDBC客户端。由于新的开发集中在HiveServer2上,Hive CLI将很快被Beeline (Hive -10511)所取代。

Hive命令行选项

要获得帮助,可以运行"hive -H"或"hive -help"。

用法(在Hive 0.9.0中):

    usage:
    hive
    -d,--define
    <key=value> 用于Hive命令的变量替换。例如:-d A=B或——define A=B
    -e
    <quoted-query-string> 从命令行执行SQL
    -f
    <filename> 来自文件的SQL
    -H,--help 打印帮助信息
    -h
    <hostname> 在远程主机上连接到Hive Server
    --hiveconf
    <property=value> 使用给定属性的值
    --hivevar
    <key=value> 应用于hive的变量替换
    命令。例:——hivevar A=B
    -i
    <filename> 初始化SQL文件
    -p
    <port> 通过端口号连接到Hive Server
    -S,--silent 交互式shell中的沉默模式
    -v,--verbose 详细模式(将已执行的SQL回显到控制台)

    例子:

    从命令行运行查询的示例

      $HIVE_HOME/bin/hive 
      -e 'select a.col from tab1 a'

      使用实例设置Hive配置变量

        $HIVE_HOME/bin/hive -e 'select a.col from tab1 a' 
        --hiveconf hive.exec.scratchdir=/home/my/hive_scratch 
        --hiveconf mapred.reduce.tasks=32

        使用静默模式将数据从查询转储到文件的示例

          $HIVE_HOME/bin/hive -S -e 'select a.col
          from tab1 a' > a.txt

          从本地磁盘以非交互方式运行脚本的示例

            $HIVE_HOME/bin/hive
            -f home/my/hive-script.sql

            Hadoop支持的文件系统中以非交互方式运行脚本的示例(Hive 0.14开始)

              $HIVE_HOME/bin/hive -f hdfs://<namenode>:<port>/hive-script.sql
              $HIVE_HOME/bin/hive -f s3://mys3bucket/s3-script.sql

              在进入交互模式之前运行初始化脚本的示例

                $HIVE_HOME/bin/hive
                -i home/my/hive-init.sql

                hiverc文件

                当不使用-i选项调用CLI时,将尝试加载$HIVE_HOME/bin/。hiverc和$HOME/Hiverc作为初始化文件。

                日志记录

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

                通常需要将日志发送到标准输出和/或更改日志级别以进行调试。这些可以从命令行中完成,如下所示:

                  $HIVE_HOME/bin/hive --hiveconf hive.root.logger=INFO,console
                  logger指定日志级别以及日志目的地。指定控制台作为目标将日志发送到标准错误(而不是日志文件)。

                  Hive批处理模式命令

                  当$HIVE_HOME/bin/hive带有-e或-f选项时,它以批处理方式执行SQL命令。

                    hive -e
                    '<query-string>' 执行查询字符串。
                    hive -f
                    <filepath> 从文件执行一个或多个SQL查询。

                    Hive 0.14开始,<filepath>也可以来自Hadoop支持的文件系统(HDFS, S3)

                      $HIVE_HOME/bin/hive -f
                      hdfs://<namenode>:<port>/hive-script.sql
                      $HIVE_HOME/bin/hive -f
                      s3://mys3bucket/s3-script.sql

                      Hive交互式Shell命令

                      当$HIVE_HOME/bin/hive不带-e或-f选项时,它将进入交互式shell模式。

                      使用“;”(分号)终止命令。脚本中的注释可以使用“——”前缀指定。

                      Command

                      Description

                      source  <filepath>

                      CLI中执行脚本文件。

                      set  <key>=<value>

                      设置特定配置变量()的值。

                      注意:如果变量名拼写错误,CLI不会显示错误。

                      set -v

                      打印所有HadoopHive配置变量。

                      set

                      打印由用户或Hive覆盖的配置变量列表。

                      reset

                      将配置重置为默认值(Hive 0.10版本)

                      quit
                       exit

                      使用quitexit退出交互式shell

                      list FILE[S]  <filepath>*
                       list JAR[S] <filepath>*
                       list ARCHIVE[S] <filepath>*

                      检查给定的资源是否已经添加到分布式缓存中。

                      list FILE[S]
                       list JAR[S]
                       list ARCHIVE[S]

                      列出已添加到分布式缓存的资源。有关更多信息,请参阅下面的Hive参考资料。

                      dfs <dfs  command>

                      Hive shell执行dfs命令。

                      delete FILE[S]  <ivyurl> <ivyurl>*
                       delete JAR[S] <ivyurl> <ivyurl>*
                       delete ARCHIVE[S] <ivyurl> <ivyurl>*

                      Hive 1.2.0开始,从分布式缓存中删除使用<ivyurl>添加的资源。

                      delete FILE[S]  <filepath>*
                       delete JAR[S] <filepath>*
                       delete ARCHIVE[S] <filepath>*

                      从分布式缓存中删除资源。

                      add FILE[S]  <ivyurl> <ivyurl>*
                       add JAR[S] <ivyurl> <ivyurl>*
                       add ARCHIVE[S] <ivyurl> <ivyurl>*

                      Hive 1.2.0开始,使用Ivy URL将一个或多个文件、jar或归档文件添加到分布式缓存中的资源列表中,格式为Ivy://group:module:version?query_string

                      add FILE[S]  <filepath> <filepath>*
                       add JAR[S] <filepath> <filepath>*
                       add ARCHIVE[S] <filepath> <filepath>*

                      将一个或多个文件、jar或存档添加到分布式缓存中的资源列表中。

                      <query  string>

                      执行Hive查询并将结果打印到标准输出。

                      !  <command>

                      Hive shell执行shell命令。

                      示例用法:

                          hive> set mapred.reduce.tasks=32;
                        hive> set;
                        hive> select a.* from tab1;
                        hive> !ls;
                        hive> dfs -ls;

                        Hive资源

                        Hive可以管理向会话添加的资源,这些资源需要在查询执行时可用。资源可以是文件、jar或存档。任何本地可访问的文件都可以添加到会话中。

                        一旦一个资源被添加到会话中,Hive查询就可以通过它的名字来引用它(在map/reduce/transform子句中),并且在整个Hadoop集群执行时,这个资源在本地可用。Hive使用Hadoop的分布式缓存在查询执行时将添加的资源分配给集群中的所有机器。

                        用法:

                            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> ..]
                          文件资源只是添加到分布式缓存中。通常,这可能是要执行的转换脚本之类的东西。
                          JAR资源也被添加到Java类路径中。这是引用它们包含的对象(udf)所必需的。
                          归档资源在分发时会自动取消归档。

                          举例:

                            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 url,格式为Ivy://group:module:version?query_string。

                            group -该模块来自哪个模块组。直接转换为Maven组或常春藤组织。

                            module -要加载的模块的名称。直接转换为Maven工件或Ivy工件。

                            version -要使用的模块的版本。任何版本或*(表示最新版本)或Ivy Range都可以使用。

                            可以在query_string中传递各种参数,以配置如何以及哪些jar被添加到工件中。参数以“&”分隔的键值对的形式存在。

                            用法:

                              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命令中混合使用<ivyurl>和<filepath>。

                                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形式的逗号分隔值。

                                transitive:接受true或false的值。默认为true。当transitive = true时,所有的传递依赖都会被下载并添加到类路径中。

                                ext:要添加的文件扩展名。默认为'jar'。

                                classifier:要解析的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)将被删除。

                                  如果转换脚本中使用的文件已经在Hadoop集群中使用相同的路径名的所有机器上可用,则没有必要向会话添加文件。例如:

                                    ... MAP a.networkid USING
                                    'wc -l' ...

                                    这里wc是一个可执行文件,在所有机器上都可用。

                                      ... MAP a.networkid USING
                                      '/home/nfsserv1/hadoopscripts/tt.py' ...

                                      这里可以通过在所有集群节点上配置相同的NFS挂载点访问tt.py。

                                      注意Hive配置参数还可以指定jar、files和archives。

                                      HCatalog CLI

                                      从Hive 0.11.0版本开始,HCatalog随Hive一起安装。

                                      许多(但不是全部)hcat命令可以作为hive命令发出,反之亦然。

                                      获取更多大数据技能请关注大数据技能圈公众号:

                                      文章转载自大数据技能圈,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                                      评论