数据仓库工具 hive( 二 )


安装配置你可以下载一个已打包好的hive稳定版,也可以下载源码自己build一个版本 。安装需要

    java 1.6,java 1.7或更高版本 。
    Hadoop 2.x或更高, 1.x. Hive 0.13 版本也支持 0.20.x, 0.23.x
    Linux,mac,windows作业系统 。以下内容适用于linux系统 。
安装打包好的hive需要先到apache下载已打包好的hive镜像,然后解压开该档案$ tar -xzvf hive-x.y.z.tar.gz设定hive环境变数$ cd hive-x.y.z$ export HIVE_HOME={{pwd}}设定hive运行路径$ export PATH=$HIVE_HOME/bin:$PATH编译Hive源码下载hive源码此处使用maven编译,需要下载安装maven 。
数据仓库工具 hive

文章插图
以Hive 0.13版为例
    编译hive 0.13源码基于hadoop 0.23或更高版本$cdhive$mvncleaninstall-Phadoop-2,dist$cdpackaging/target/apache-hive-{version}-SNAPSHOT-bin/apache-hive-{version}-SNAPSHOT-bin$lsLICENSENOTICEREADME.txtRELEASE_NOTES.txtbin/(alltheshellscripts)lib/(requiredjarfiles)conf/(configurationfiles)examples/(sampleinputandqueryfiles)hcatalog/(hcataloginstallation)scripts/(upgradescriptsforhive-metastore)
    编译hive 基于hadoop 0.20$cdhive$antcleanpackage$cdbuild/dist#lsLICENSENOTICEREADME.txtRELEASE_NOTES.txtbin/(alltheshellscripts)lib/(requiredjarfiles)conf/(configurationfiles)examples/(sampleinputandqueryfiles)hcatalog/(hcataloginstallation)scripts/(upgradescriptsforhive-metastore)
运行hiveHive运行依赖于hadoop,在运行hadoop之前必需先配置好hadoopHome 。    export HADOOP_HOME=<hadoop-install-dir>在hdfs上为hive创建\tmp目录和/user/hive/warehouse(akahive.metastore.warehouse.dir) 目录,然后你才可以运行hive 。在运行hive之前设定HiveHome 。    $ export HIVE_HOME=<hive-install-dir>在命令行视窗启动hive【数据仓库工具 hive】     $ $HIVE_HOME/bin/hive最佳化方法1、join连线时的最佳化:当三个或多个以上的表进行join操作时,如果每个on使用相同的栏位连线时只会产生一个mapreduce 。2、join连线时的最佳化:当多个表进行查询时,从左到右表的大小顺序应该是从小到大 。原因:hive在对每行记录操作时会把其他表先快取起来,直到扫描最后的表进行计算3、在where字句中增加分区过滤器 。4、当可以使用left semi join 语法时不要使用inner join,前者效率更高 。原因:对于左表中指定的一条记录,一旦在右表中找到立即停止扫描 。5、如果所有表中有一张表足够小,则可置于记忆体中,这样在和其他表进行连线的时候就能完成匹配,省略掉reduce过程 。设定属性即可实现,set hive.auto.covert.join=true; 用户可以配置希望被最佳化的小表的大小 set hive.mapjoin.smalltable.size=2500000; 如果需要使用这两个配置可置入$HOME/.hiverc档案中 。6、同一种数据的多种处理:从一个数据源产生的多个数据聚合,无需每次聚合都需要重新扫描一次 。例如:insert overwrite table student select * from employee; insert overwrite table person select * from employee;可以最佳化成:from employee insert overwrite table student select * insert overwrite table person select *7、limit调优:limit语句通常是执行整个语句后返回部分结果 。set hive.limit.optimize.enable=true;8、开启并发执行 。某个job任务中可能包含众多的阶段,其中某些阶段没有依赖关係可以并发执行,开启并发执行后job任务可以更快的完成 。设定属性:set hive.exec.parallel=true;9、hive提供的严格模式,禁止3种情况下的查询模式 。a:当表为分区表时,where字句后没有分区栏位和限制时,不允许执行 。b:当使用order by语句时,必须使用limit栏位,因为order by 只会产生一个reduce任务 。c:限制笛卡尔积的查询 。10、合理的设定map和reduce数量 。11、jvm重用 。可在hadoop的mapred-site.xml中设定jvm被重用的次数 。