设为首页 加入收藏

TOP

Hive 快速上手--官网中文翻译
2019-05-01 00:46:27 】 浏览:48
Tags:Hive 快速 上手 中文 翻译

目录

安装和配置

从一个稳定的发行版安装Hive

编译Hive源码

编译主干的Hive

编译分支branch-1

在Hadoop 0.20上在0.13之前编译Hive

在Hadoop 0.23上在0.13之前编译Hive(Ant)

运行Hive

运行Hive CLI

运行HiveServer2 和 Beeline

运行HCatalog

运行WebHCat (Templeton)

配置管理概述

动态修改配置

Hive, Map-Reduce和Local-Mode

Hive日志

HiveServer2日志

审查日志

性能日志记录器

DDL 操作

创建Hive表

查询表

更改和删除表

Metadata Store

数据操纵

Sql操作

实例查询

SELECTS and FILTERS

GROUP BY

JOIN

MULTITABLE INSERT

STREAMING

简单的用例

MovieLens User Ratings

Apache Weblog Data


安装和配置

您可以通过下载tarball来安装Hive的稳定版本,也可以下载源代码并从中构建Hive。

跑HiveServer2和Beeline

  • Java 1.7

注意:Hive版本1.2以后需要Java 1.7或更新版本。Hive版本0.14到1.1也适用于Java 1.6。强烈建议用户开始迁移到Java 1.8(参见HIVE-8607)。

  • Hadoop 2。x(首选),1。x (Hive 2.0.0以后不支持)。Hive版本高达0.13也支持Hadoop 0.20。x, 0.23.x。
  • Hive通常用于生产Linux和Windows环境。Mac是一种常用的开发环境。本文档中的说明适用于Linux和Mac。在Windows上使用它需要稍微不同的步骤。

从一个稳定的发行版安装Hive

首先从Apache下载镜像之一下载Hive的最新稳定版本(参见Hive版本)。接下来,您需要解压tarball。这将创建一个名为hive-x.y的子目录。z (x.y。z为发行号):

 $ tar -xzvf hive-x.y.z.tar.gz

设置环境变量HIVE_HOME指向安装目录:

  $ cd hive-x.y.z
  $ export HIVE_HOME={{pwd}}

最后,将$HIVE_HOME/bin添加到您的路径:

$ export PATH=$HIVE_HOME/bin:$PATH

编译Hive源码

最新Hive代码的Hive GIT存储库位于这里:GIT克隆https://git-wip-us.apache.org/repos/asf/hive.git(主分支)。

所有发布版本都在名为“branch-0”的分支中。#”或“为1。#“或即将到来的”分支-2。,除了在“branch-0.8-r2”中发布的0.8.1版本。任何具有其他名称的分支都是正在进行的工作的特性分支。有关详细信息,请参见理解Hive分支。

从0.13开始,Hive使用Apache Maven构建。

编译主干的Hive

要从主分支编译Hive源码

  $ git clone https://git-wip-us.apache.org/repos/asf/hive.git
  $ cd hive
  $ mvn clean package -Pdist
  $ cd packaging/target/apache-hive-{version}-SNAPSHOT-bin/apache-hive-{version}-SNAPSHOT-bin
  $ ls
  LICENSE
  NOTICE
  README.txt
  RELEASE_NOTES.txt
  bin/(所有shell脚本)
  lib/(需要的jar文件)
  conf /(配置文件)
  examples/(示例输入和查询文件)
  hcatalog / (hcatalog安装)
  scripts/ (hive-metastore的升级脚本)

这里,{version}引用当前Hive版本。

如果使用Maven (mvn)构建Hive源代码,对于页面的其余部分,我们将把目录“/packaging/target/apache-hive-{version}- snapshot -bin/apache-hive-{version}- snapshot -bin”作为<install-dir>。

编译分支branch-1

在branch-1中,Hive同时支持Hadoop 1.x和2.x。您需要通过Maven配置文件指定针对哪个版本的Hadoop构建。针对Hadoop 1.x构建。x使用profile hadoop-1;Hadoop 2.x hadoop-2使用。例如,针对Hadoop 1构建。,上述mvn命令变为:

$ mvn clean package -Phadoop-1,dist

在Hadoop 0.20上在0.13之前编译Hive

在Hive 0.13之前,Hive是使用Apache Ant构建的。要在Hadoop 0.20上构建一个较老版本的Hive:

 $ svn co http://svn.apache.org/repos/asf/hive/branches/branch-{version} hive
  $ cd hive
  $ ant clean package
  $ cd build/dist
  # ls
  LICENSE
  NOTICE
  README.txt
  RELEASE_NOTES.txt
  bin/(所有shell脚本)
  lib/(需要的jar文件)
  conf /(配置文件)
  examples/(示例输入和查询文件)
  hcatalog / (hcatalog安装)
  scripts/ (hive-metastore的升级脚本)

如果使用Ant,我们将把目录“build/dist”称为<install-dir>。

在Hadoop 0.23上在0.13之前编译Hive(Ant)

要在Ant中针对Hadoop 0.23、2.0.0或其他版本构建Hive,请使用适当的标志进行构建;一些例子如下:

 $ ant clean package -Dhadoop.version=0.23.3 -Dhadoop-0.23.version=0.23.3 -Dhadoop.mr.rev=23
 $ ant clean package -Dhadoop.version=2.0.0-alpha -Dhadoop-0.23.version=2.0.0-alpha -Dhadoop.mr.rev=23

运行Hive

Hive使用Hadoop,所以:

  • 您的路径中必须有Hadoop或
  • export HADOOP_HOME = < hadoop-install-dir >

此外,您必须使用下面的HDFS命令来创建/tmp和/user/hive/warehouse(也就是hive.metastore.warehouse.dir),并将它们设置为chmod g+w,然后才能在hive中创建表。

 $ $HADOOP_HOME/bin/hadoop fs -mkdir       /tmp
 $ $HADOOP_HOME/bin/hadoop fs -mkdir       /user/hive/warehouse
 $ $HADOOP_HOME/bin/hadoop fs -chmod g+w   /tmp
 $ $HADOOP_HOME/bin/hadoop fs -chmod g+w   /user/hive/warehouse

你可能会发现设置HIVE_HOME是有用的,但不是必须的:

$ export HIVE_HOME=<hive-install-dir>

运行Hive CLI

要从shell中使用Hive命令行接口(CLI):

 $ $HIVE_HOME/bin/hive

运行HiveServer2 和 Beeline

从Hive 2.1开始,我们需要运行下面的schematool命令作为初始化步骤。例如,我们可以使用“derby”作为db类型。

$ $HIVE_HOME/bin/schematool -dbType <db type> -initSchema

HiveServer2(在Hive 0.11中引入)有自己的CLI,称为Beeline。由于缺少HiveServer2的多用户、安全性和其他功能,HiveCLI现在不支持使用Beeline。在命令行运行HiveServer2和Beeline:

 $ $HIVE_HOME/bin/hiveserver2

 $ $HIVE_HOME/bin/beeline -u jdbc:hive2://$HS2_HOST:$HS2_PORT

Beeline是由HiveServer2的JDBC URL启动的,这取决于HiveServer2启动的地址和端口。默认情况下,它是(localhost:10000),因此地址看起来像jdbc:hive2://localhost:10000。

或启动Beeline和HiveServer2在相同的过程中进行测试,以获得与HiveCLI类似的用户体验:

 $ $HIVE_HOME/bin/beeline -u jdbc:hive2://

运行HCatalog

要在Hive版本0.11.0或更高版本中从shell运行HCatalog服务器:

$ $HIVE_HOME/hcatalog/sbin/hcat_server.sh

要在Hive版本0.11.0及以后版本中使用HCatalog命令行接口(CLI):

 $ $HIVE_HOME/hcatalog/bin/hcat

有关更多信息,请参见HCatalog手册中的Tarball和HCatalog CLI中的HCatalog安装。

运行WebHCat (Templeton)

要在Hive版本0.11.0或更高版本中从shell运行WebHCat服务器:

 $ $HIVE_HOME/hcatalog/sbin/webhcat_server.sh

有关更多信息,请参见WebHCat手册中的WebHCat安装。

配置管理概述

  • Hive默认情况下从<install-dir>/conf/ Hive -default.xml获取配置
  • 可以通过设置HIVE_CONF_DIR环境变量来更改Hive配置目录的位置。
  • 配置变量可以在<install-dir>/conf/hive-site.xml中重新定义
  • Log4j配置存储在<install-dir>/conf/ hivelog4j .properties中
  • Hive配置是Hadoop之上的一个覆盖——默认情况下它继承Hadoop配置变量。
  • Hive配置可以通过:
    • 编辑hive-site.xml并在其中定义任何所需的变量(包括Hadoop变量)
    • 使用set命令(参见下一节)
    • 调用Hive(已废弃),Beeline或HiveServer2使用语法:
      • $ bin/hive——hiveconf x1=y1——hiveconf x2=y2 //这将变量x1和x2分别设置为y1和y2
      • $ bin/hiveserver2——hiveconf x1=y1——hiveconf x2=y2 //这将服务器端变量x1和x2分别设置为y1和y2
      • $ bin/beeline——hiveconf x1=y1——hiveconf x2=y2 //这将客户端变量x1和x2分别设置为y1和y2。
    • 将HIVE_OPTS环境变量设置为“—hiveconf x1=y1—hiveconf x2=y2”,执行与上面相同的操作。

动态修改配置

  • Hive查询使用map-reduce查询执行,因此,此类查询的行为可以由Hadoop配置变量控制。
  • HiveCLI(已废弃)和Beeline命令“SET”可用于设置任何Hadoop(或Hive)配置变量。例如:
    beeline> SET mapred.job.tracker=myhost.mycompany.com:50030;
    beeline> SET -v;

    后者显示所有当前设置。没有-v选项,只显示与基本Hadoop配置不同的变量。

Hive, Map-Reduce和Local-Mode

Hive编译器为大多数查询生成map-reduce作业。然后将这些作业提交给变量表示的Map-Reduce集群:

mapred.job.tracker

虽然这通常指向具有多个节点的map-reduce集群,Hadoop还提供了一个很棒的选项,可以在用户的工作站上本地运行map-reduce作业。这对于在小型数据集上运行查询非常有用——在这种情况下,本地模式执行通常比向大型集群提交作业快得多。从HDFS透明地访问数据。相反,本地模式只运行一个reducer,处理较大的数据集可能非常慢。

从0.7版本开始,Hive完全支持本地模式执行。要启用此功能,用户可以启用以下选项:

 hive> SET mapreduce.framework.name=local;

此外,mapred.local。dir应该指向本地机器上有效的路径(例如/tmp/<username>/mapred/local)。(否则,用户将获得分配本地磁盘空间的异常。)

从0.7版开始,Hive还支持在本地模式下自动运行map-reduce作业的模式。相关选项是hive.exec.mode.local.auto、 hive.exec.mode.local.auto.inputbytes.max、 hive.exec.mode.local.auto.tasks.max:

 hive> SET hive.exec.mode.local.auto=false;

注意,此功能在默认情况下是禁用的。如果启用,Hive将分析查询中每个map-reduce作业的大小,如果满足以下阈值,则可以在本地运行它:

  • 作业的总输入大小小于:hive.execl .mode.local.auto.inputbytes。最大(默认为128MB)
  • map-tasks的总数小于:hive.execd .mode.local.auto.tasks。max(默认为4)
  • 所需的reduce任务总数为1或0。

因此,对于小数据集上的查询,或者对于具有多个map-reduce作业的查询,其中后续作业的输入要小得多(由于前一个作业中的reduce /过滤),作业可以在本地运行。

注意,Hadoop服务器节点和运行Hive客户机的机器的运行时环境可能有所不同(因为不同的jvm版本或不同的软件库)。在本地模式下运行时,这可能会导致意外的行为/错误。还要注意,本地模式执行是在单独的子jvm (Hive客户机的子jvm)中完成的。如果用户愿意,可以通过选项hive.map .local.mem控制子jvm的最大内存。默认情况下,它被设置为零,在这种情况下,Hive允许Hadoop确定子jvm的默认内存限制。

Hive日志

Hive使用log4j进行日志记录。默认情况下,CLI不会将日志发送到控制台。默认的日志记录级别在0.13.0之前是警告。从Hive 0.13.0开始,默认日志级别是INFO。

日志存储在/tmp/<user.name>目录中:

  • /tmp/<user.name>/hive.log

注意:在本地模式下,Hive 0.13.0之前的日志文件名是“”。log而不是hive.log。这个bug在0.13.0版本中得到了修复(参见HIVE-5528和HIVE-5676)。

若要配置不同的日志位置,请设置hive.log。在HIVE_HOME美元/ conf / hive-log4j.properties dir。确保目录权限设置(chmod 1777 <dir>)。

  • hive.log.dir=<other_location>

如果用户愿意,可以通过添加如下参数将日志发送到控制台:

  • bin/hive --hiveconf hive.root.logger=INFO,console //用于HiveCLI (已废弃)
  • bin/hiveserver2 --hiveconf hive.root.logger=INFO,console

注意,设置通过'set'命令设置hive.root.logger的日志记录器不会更改日志属性,因为它们是在初始化时确定的。

Hive还在/tmp/<user.name>/中存储每个Hive会话上的查询日志,但是可以在Hive -site.xml中通过hive.querylog.location配置。从Hive 1.1.0开始,可以通过设置hive.log.explain.output在INFO级别记录查询的EXPLAIN EXTENDED输出。输出属性为true。

Hadoop集群上Hive执行期间的日志记录由Hadoop配置控制。通常Hadoop会为每个map生成一个日志文件,并减少存储在执行任务的集群机器上的任务。可以通过单击Hadoop JobTracker Web UI中的Task Details页面来获得日志文件。

当使用本地模式(使用mapreduce.framework.name=local)时,Hadoop/Hive执行日志在客户机上生成。从release 0.6开始——Hive使用Hive - execl -log4j。属性(回到hive-log4j。属性(仅当它丢失时)来确定默认情况下这些日志被交付到何处。默认配置文件为在本地模式下执行的每个查询生成一个日志文件,并将其存储在/tmp/<user.name>下。提供单独配置文件的目的是,如果需要,管理员可以集中执行日志捕获(例如,在NFS文件服务器上)。执行日志对于调试运行时错误非常有用。

有关WebHCat错误和日志记录的信息,请参阅WebHCat手册中的错误代码响应日志文件

错误日志对于调试问题非常有用。请将它们与任何bug(其中有许多bug !)一起发送到hive-dev@hadoop.apache.org。

从Hive 2.1.0开始(使用Hive -13027), Hive默认使用Log4j2的异步日志记录器。设置hive.async.log.enabled为false将禁用异步日志记录并退回到同步日志记录。异步日志记录可以显著提高性能,因为日志记录将在使用LMAX破坏者队列缓冲日志消息的单独线程中处理。请参考https://logging.apache.org/log4j/2.x/manual/async.html了解优点和缺点。

HiveServer2日志

HiveServer2操作日志从Hive 0.14开始对客户机可用。有关配置,请参见HiveServer2日志记录

审查日志

每次调用metastore API时,都会从Hive metastore服务器上记录下审计日志。

审计日志具有该函数,一些相关的函数参数记录在metastore日志文件中。它记录在log4j的INFO级别,因此您需要确保启用了INFO级别的日志记录(参见HIVE-3505)。日志条目的名称是“HiveMetaStore.audit”。

Hive 0.7中添加了安全客户机连接的审计日志(Hive -1948), Hive 0.10中添加了非安全连接的审计日志(Hive -3277);也看到Hive - 2797)。

性能日志记录器

为了通过PerfLogger获得性能指标,您需要为PerfLogger类(HIVE-12675)设置调试级别日志记录。这可以通过在log4j属性文件中设置以下内容来实现。

log4j.logger.org.apache.hadoop.hive.ql.log.PerfLogger=DEBUG

如果日志程序级别已经通过root. root设置为DEBUG。日志程序,要查看性能日志,不需要上述设置。

DDL 操作

Hive DDL操作是用Hive数据定义语言记录的。

创建Hive表

 hive> CREATE TABLE pokes (foo INT, bar STRING);

创建一个名为pokes的表,该表有两列,第一列是整数,另一列是字符串。

  hive> CREATE TABLE invites (foo INT, bar STRING) PARTITIONED BY (ds STRING);

创建一个名为invite的表,其中包含两列和一个名为ds的分区列。分区列是一个虚拟列。它不是数据本身的一部分,而是从加载特定数据集的分区派生而来。

默认情况下,表被假定为文本输入格式,分隔符被假定为^A(ctrl-a)。

查询表

 hive> SHOW TABLES;

列出所有的表。

  hive> SHOW TABLES '.*s';

列出所有以“s”结尾的表。模式匹配遵循Java正则表达式。查看这个文档链接http://java.sun.com/javase/6/docs/api/java/util/regex/Pattern.html。

hive> DESCRIBE invites;

显示列的列表。

更改和删除表

表名可以更改,列可以添加或替换:

  hive> ALTER TABLE events RENAME TO 3koobecaf;
  hive> ALTER TABLE pokes ADD COLUMNS (new_col INT);
  hive> ALTER TABLE invites ADD COLUMNS (new_col2 INT COMMENT 'a comment');
  hive> ALTER TABLE invites REPLACE COLUMNS (foo INT, bar STRING, baz INT COMMENT 'baz 
 replaces new_col2');

注意,REPLACE列替换所有现有列,只更改表的模式,而不更改数据。表必须使用本机SerDe。REPLACE列也可以用于从表的模式中删除列:

 hive> ALTER TABLE invites REPLACE COLUMNS (foo INT COMMENT 'only keep the first column');

删除表

hive> DROP TABLE pokes;

Metadata Store

Metadata是一个嵌入式Derby数据库,其磁盘存储位置由Hive配置变量 javax.jdo.option.ConnectionURL 决定。默认情况下,这个位置是./metastore_db(seeconf/hive-default.xml).

现在,在默认配置中,这个元数据一次只能被一个用户看到。

Metastore可以存储在JPOX支持的任何数据库中。RDBMS的位置和类型可以由两个变量javax.jdo.option.ConnectionURL, javax.jdo.option.ConnectionDriverName. 控制。有关受支持数据库的更多细节,请参考JDO(或JPOX)文档。数据库模式在JDO元数据注释文件包中定义。在package.jdoatsrc/contrib/hive/metastore/src/model.

将来,metastore本身可以成为一个独立的服务器。

如果希望将metastore作为网络服务器运行,以便可以从多个节点访问它,请参阅在服务器模式下使用Derby的Hive

数据操纵

Hive DML操作被记录在Hive数据操作语言中。

从平面文件加载数据到Hive中

 hive> LOAD DATA LOCAL INPATH './examples/files/kv1.txt' OVERWRITE INTO TABLE pokes;

将包含按ctrl-a分隔的两列的文件加载到pokes表中。'LOCAL'表示输入文件位于本地文件系统上。如果“LOCAL”被省略,那么它将在HDFS中查找文件。

注:

  • load命令不执行针对模式的数据验证。
  • 如果文件位于hdfs中,则将其移动到Hive控制的文件系统名称空间中。

Hive目录的根目录由hive-default.xml 配置文件中的 hive.metastore.warehouse.dir指定。我们建议用户在尝试通过Hive创建表之前创建这个目录。

hive> LOAD DATA LOCAL INPATH './examples/files/kv2.txt' OVERWRITE INTO TABLE invites PARTITION (ds='2008-08-15');
hive> LOAD DATA LOCAL INPATH './examples/files/kv3.txt' OVERWRITE INTO TABLE invites PARTITION (ds='2008-08-08');

上面的两个LOAD语句将数据加载到表的两个不同分区中。表 invites 必须按键ds分区创建,才能成功。

 hive> LOAD DATA INPATH '/user/myname/kv2.txt' OVERWRITE INTO TABLE invites PARTITION (ds='2008-08-15');

上面的命令将把数据从HDFS文件/目录加载到表中。

注意,从HDFS加载数据将导致移动文件/目录。因此,操作几乎是瞬间完成的。

Sql操作

Hive查询操作记录在Select中。

实例查询

下面显示了一些示例查询。它们可以在build/dist/examples/queries中找到。

更多信息可以在ql/src/test/queries/positive的Hive源代码中找到。

SELECTS and FILTERS

hive> SELECT a.foo FROM invites a WHERE a.ds='2008-08-15';

从invite表中分区ds=2008-08-15的所有行中选择列'foo'。结果不存储在任何地方,而是显示在控制台上。

注意,在接下来的所有示例中,INSERT(插入到Hive表、本地目录或HDFS目录)是可选的。

 hive> INSERT OVERWRITE DIRECTORY '/tmp/hdfs_out' SELECT a.* FROM invites a WHERE a.ds='2008-08-15';

从invite表的分区ds=2008-08-15中选择所有行到HDFS目录中。结果数据在该目录中的文件中(取决于映射器的数量)。

注意:分区列(如果有的话)是使用*选择的。它们也可以在投影子句中指定。

  hive> INSERT OVERWRITE LOCAL DIRECTORY '/tmp/local_out' SELECT a.* FROM pokes a;

查询pokes表的所有行到本地目录。

 hive> INSERT OVERWRITE TABLE events SELECT a.* FROM profiles a;
  hive> INSERT OVERWRITE TABLE events SELECT a.* FROM profiles a WHERE a.key < 100;
  hive> INSERT OVERWRITE LOCAL DIRECTORY '/tmp/reg_3' SELECT a.* FROM events a;
  hive> INSERT OVERWRITE DIRECTORY '/tmp/reg_4' select a.invites, a.pokes FROM profiles a;
  hive> INSERT OVERWRITE DIRECTORY '/tmp/reg_5' SELECT COUNT(*) FROM invites a WHERE a.ds='2008-08-15';
  hive> INSERT OVERWRITE DIRECTORY '/tmp/reg_5' SELECT a.foo, a.bar FROM invites a;
  hive> INSERT OVERWRITE LOCAL DIRECTORY '/tmp/sum' SELECT SUM(a.pc) FROM pc1 a;

查询列的和。也可以使用avg、min或max。注意,对于不包含Hive -287的Hive版本,您需要使用COUNT(1)来代替COUNT(*)。

GROUP BY

 hive> SELECT a.foo FROM invites a WHERE a.ds='2008-08-15';

注意,对于不包含Hive -287的Hive版本,您需要使用COUNT(1)来代替COUNT(*)。

JOIN

 hive> FROM pokes t1 JOIN invites t2 ON (t1.bar = t2.bar) INSERT OVERWRITE TABLE events SELECT t1.bar, t1.foo, t2.foo;

MULTITABLE INSERT

 FROM src
  INSERT OVERWRITE TABLE dest1 SELECT src.* WHERE src.key < 100
  INSERT OVERWRITE TABLE dest2 SELECT src.key, src.value WHERE src.key >= 100 and src.key < 200
  INSERT OVERWRITE TABLE dest3 PARTITION(ds='2008-04-08', hr='12') SELECT src.key WHERE src.key >= 200 and src.key < 300
  INSERT OVERWRITE LOCAL DIRECTORY '/tmp/dest4.out' SELECT src.value WHERE src.key >= 300;

STREAMING

hive> FROM invites a INSERT OVERWRITE TABLE events SELECT TRANSFORM(a.foo, a.bar) AS (oof, rab) USING '/bin/cat' WHERE a.ds > '2008-08-09';

这将通过脚本/bin/cat(类似Hadoop流)在map阶段中传输数据。

类似地,流媒体也可以在reduce端使用(有关示例,请参阅Hive教程)。

简单的用例

MovieLens User Ratings

首先,创建一个以tab分隔的文本文件格式的表:

CREATE TABLE u_data (
  userid INT,
  movieid INT,
  rating INT,
  unixtime STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE;

然后,在GroupLens数据集页面(其中还有README.txt文件和未压缩文件索引)上从MovieLens 100k下载数据文件:

wget http://files.grouplens.org/datasets/movielens/ml-100k.zip

或者

curl --remote-name http://files.grouplens.org/datasets/movielens/ml-100k.zip

注意:如果到GroupLens数据集的链接不起作用,请在HIVE-5341上报告或发送一条消息到user@hive.apache.org邮件列表。

解压数据文件:

unzip ml-100k.zip

接着将下载的数据放入刚刚创建的表中:

LOAD DATA LOCAL INPATH '<path>/u.data'
OVERWRITE INTO TABLE u_data;
Count the number of rows in table u_data:

计算u_data表中的行数:

SELECT COUNT(*) FROM u_data;

注意,对于不包含Hive -287的旧版本Hive,您需要使用COUNT(1)来代替COUNT(*)。

现在我们可以对u_data表做一些复杂的数据分析:

创建weekday_mapper.py:

import sys
import datetime

for line in sys.stdin:
  line = line.strip()
  userid, movieid, rating, unixtime = line.split('\t')
  weekday = datetime.datetime.fromtimestamp(float(unixtime)).isoweekday()
  print '\t'.join([userid, movieid, rating, str(weekday)])

使用mapper脚本:

CREATE TABLE u_data_new (
  userid INT,
  movieid INT,
  rating INT,
  weekday INT)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t';

add FILE weekday_mapper.py;

INSERT OVERWRITE TABLE u_data_new
SELECT
  TRANSFORM (userid, movieid, rating, unixtime)
  USING 'python weekday_mapper.py'
  AS (userid, movieid, rating, weekday)
FROM u_data;

SELECT weekday, COUNT(*)
FROM u_data_new
GROUP BY weekday;

注意,如果您正在使用Hive 0.5.0或更早版本,则需要使用COUNT(1)来代替COUNT(*)。

Apache Weblog Data

Apache weblog的格式是可定制的,而大多数web管理员使用默认格式。

对于默认的Apache weblog,我们可以使用以下命令创建一个表。

有关RegexSerDe的更多信息可以在HIVE-662和HIVE-1719中找到。

CREATE TABLE apachelog (
  host STRING,
  identity STRING,
  user STRING,
  time STRING,
  request STRING,
  status STRING,
  size STRING,
  referer STRING,
  agent STRING)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
  "input.regex" = "([^]*) ([^]*) ([^]*) (-|\\[^\\]*\\]) ([^ \"]*|\"[^\"]*\") (-|[0-9]*) (-|[0-9]*)(: ([^ \"]*|\".*\") ([^ \"]*|\".*\"))"
)
STORED AS TEXTFILE;

参考地址:

https://cwiki.apache.org/confluence/display/Hive/GettingStarted#GettingStarted-BuildingHivefromSource

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇hive:Access denied for user .. 下一篇hive:Access denied for user ..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目