欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

ApacheHive一点一点进步(1) 简单介绍

程序员文章站 2022-05-01 09:05:32
...

Hive是一个 hadoop 的数据仓库,便于对 hadoop 中存储的大数据进行数据汇总,点对点查询,以及分析。 Hive提供了一套管理机制用于管理HDFS中的数据及一套类型于sql的查询语言HiveQL。 同时当HiveQL无法满足逻辑的时候,这种语言支持传统的MR程序,以插件的形

Hive是一个hadoop的数据仓库,便于对hadoop中存储的大数据进行数据汇总,点对点查询,以及分析。

Hive提供了一套管理机制用于管理HDFS中的数据及一套类型于sql的查询语言HiveQL。

同时当HiveQL无法满足逻辑的时候,这种语言支持传统的MR程序,以插件的形式集成到Hive的MR中。

Hive是apache基金会下的一个开源志愿者项目。以前他是一个Hadoop的子项目。但是现在他已经升级为一个*项目。

安装

Requirements Java1.6,hadoop0.20.xx选择一个稳定版进行安装 http://hive.apache.org/releases.html解压缩tarball。$ tar -xzvf hive-x.y.z.tar.gz$ cd hive-x.y.z  $ export HIVE_HOME={{pwd}}

配置 Hive默认的配置是/conf/hive-DEFAULT.xml如果需要变更配置,可以重新配置于 /conf/hive-site.xmlLog4j配置储存于/conf/hive-log4j.propertiesHive的配置是基于对hadoop的一个覆盖,意思是hadoop的配置变量是缺省继承的。Hive变量的配置方法:1.修改hive-site.xml文件2.通过cli客户端使用SET命令进行3.通过授权hive使用如下语法$ bin/hive -hiveconf x1=y1 -hiveconf x2=y2

运行时配置

Hive的查询是通过MR查询执行的,因此,这样的查询行为都是被hadoop的配置变量进行控制的。hive> SET mapred.job.tracker=myhost.mycompany.com:50030;hive> SET -v;上面的最后一条语句可以显示当前的所有配置。如果不加-v参数,则只显示与基础的hadoop配置不同的配置。

Local模式

hive> SET mapred.job.tracker=LOCAL;hive> SET hive.EXEC.mode.LOCAL.auto=FALSE;$ export PATH=$HIVE_HOME/bin:$PATH

修改Log路径

bin/hive -hiveconf hive.root.logger=INFO,consolebin/hive -hiveconf hive.root.logger=INFO,DRFAMETASTOREmodel描述文件位置:src/contrib/hive/metastore/src/modelDML Operations默认的文件分割呼号是ctr+a文件上传的默认目录是: hive-DEFAULT.xml 中的hive.metastore.warehouse.dir上传文件的两种方式:本地文件LOAD DATA LOCAL INPATH './examples/files/kv2.txt' OVERWRITE INTO TABLE invites PARTITION (ds='2008-08-15');远程文件 LOAD DATA INPATH '/user/myname/kv2.txt' OVERWRITE INTO TABLE invites PARTITION (ds='2008-08-15');上面的命令会发生文件和目录的转移。将结果插入到HDFS INSERT OVERWRITE DIRECTORY '/tmp/hdfs_out' SELECT a.* FROM invites a WHERE a.ds='2008-08-15';将结果插入到本地文件INSERT OVERWRITE LOCAL DIRECTORY '/tmp/local_out' SELECT a.* FROM pokes a;

只定义mapper任务:py

import sysimport datetimeFOR 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)])CREATE TABLE u_data_new (  userid INT,  movieid INT,  rating INT,  weekday INT)ROW FORMAT DELIMITEDFIELDS TERMINATED BY '\t';ADD FILE weekday_mapper.py;INSERT OVERWRITE TABLE u_data_newSELECT  TRANSFORM (userid, movieid, rating, unixtime)  USING 'python weekday_mapper.py'  AS (userid, movieid, rating, weekday)FROM u_data;SELECT weekday, COUNT(*)FROM u_data_newGROUP BY weekday;