附录C 编译安装Hive
如果需要直接安装Hive,可以跳过编译步骤,从Hive的官网下载编译好的安装包,下载地址为http://hive.apache.org/downloads.html 。
C.1 编译Hive
C.1.1 下载Hive源代码包
在Hive的官网下载页面上下载,为加快下载速度选择中国境内的镜像,并下载apache-hive-1.2.1-src.tar.gz源代码包。下载后把安装包方放在目录/home/spark/work目录下,用如下命令解压缩hive安装文件:
$cd /home/spark/work/
$tar -zxf apache-hive-1.2.1-src.tar.gz
改名并移动到/app/compile目录下:
$mv apache-hive-1.2.1-src /app/compile/hive-1.2.1-src
$ll /app/compile/
C.1.2 编译Hive
编译Hive源代码的时候,需要从网上下载依赖包,所以整个编译过程机器必须保证在联网状态。编译执行如下脚本:
$cd /app/compile/hive-1.2.1-src
$export MAVEN_OPTS="-Xmx2g -XX:MaxPermSize=512M -XX:ReservedCodeCacheSize=512m"
$mvn -Phadoop-2 -Pdist -DskipTests -Dmaven.javadoc.skip=true clean package
在编译过程中可能出现速度慢或者中断,可以再次启动编译,编译程序会在上次的编译中断处继续进行编译,整个编译过程耗时与网速紧密相关,网速较快的情况需要1个小时左右(下图的时间是重复多次下载依赖包,然后编译成功的界面),最终编译打包的文件为$HIVE_HOME/packaging /target/apache-hive-1.2.1-bin.tar.gz。

图 附录C‑1 编译Hive成功界面
通过如下命令查看最终编译完成整个目录大小,可以看到大小为350M左右:
$du -s /app/compile/hive-1.2.1-src

C.2 安装Hive
C.2.1 解压缩并迁移
使用上一步骤编译好的Hive编译包移动到安装目录上,用如下命令解压缩hive安装文件:
$cd /app/compile/hive-1.2.1-src/packaging/target/
$mv apache-hive-1.2.1-bin.tar.gz /home/spark/work/
$cd /home/spark/work/
$tar -zxf hive-1.2.1-bin.tar.gz
改名并迁移到/app/soft目录下:
$cd /app/spark
$mv apache-hive-1.2.1-bin /app/spark/hive-1.2.1
$ll /app/soft

图 附录C‑2 Hive移动到/app/soft目录下
C.2.2 下载MySql驱动并放到Hive的lib目录下
到mysql官网进入下载页面http://dev.mysql.com/downloads/connector/j/,默认情况下是Windows安装包,这里需要选择Platform Independent版本下载zip格式的文件

图 附录C‑3 MySql驱动下载界面
把下载的hive安装包和mysql驱动包,使用如下命令放到Hive的lib目录下:
$cd /home/spark/work
$mv mysql-connector-java-5.1.34-bin.jar /app/soft/hive-1.2.1/lib
C.2.3 配置/etc/profile环境变量
使用如下命令打开/etc/profile文件,设置如下参数:
export HIVE_HOME=/app/soft/hive-1.2.1
export PATH=$PATH:$HIVE_HOME/bin
export CLASSPATH=$CLASSPATH:$HIVE_HOME/bin
配置完毕后,需要编译该配置文件或重新登录以生效该配置:
$source /etc/profile
C.2.4 设置hive-env.sh配置文件
进入hive-1.2.1/conf目录,复制hive-env.sh.templaete为hive-env.sh并进行配置:
$cd /app/soft/hive-1.2.1/conf
$cp hive-env.sh.template hive-env.sh
$sudo vi hive-env.sh
分别设置HADOOP_HOME和HIVE_CONF_DIR两个值:
# Set HADOOP_HOME to point to a specific hadoop install directory
export HADOOP_HOME=/app/spark/hadoop-2.7.2
# Hive Configuration Directory can be controlled by:
export HIVE_CONF_DIR=/app/soft/hive-1.2.1/conf
C.2.5 设置hive-site.xml配置文件
创建hive-site.xml配置文件,在该配置文件中加入配置内容
$touch hive-site.xml
$sudo vi hive-site.xml
hive默认为derby数据库,derby数据只运行单个用户进行连接,这里需要调整为mysql数据库,以下为修改配置内容:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://master:3306/hive?createDatabaseIfNotExsit=true; characterEncoding=UTF-8</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hive</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>hive</value>
</property>
<property>
<name>datanucleus.readOnlyDatastore</name>
<value>false</value>
</property>
<property>
<name>datanucleus.fixedDatastore</name>
<value>false</value>
</property>
<property>
<name>datanucleus.autoCreateSchema</name>
<value>true</value>
</property>
<property>
<name>datanucleus.autoCreateTables</name>
<value>true</value>
</property>
<property>
<name>datanucleus.autoCreateColumns</name>
<value>true</value>
</property>
</configuration>
C.3 启动Hive并验证
C.3.1 启动Hive
实际使用时,一般通过后台启动metastore和hiveserver实现服务,命令如下:
$hive --service metastore &
$hive --service hiveserver2 &

图 附录C‑4 Hive启动后台服务
启动用通过jps命令可以看到两个进行运行在后台
C.3.2 验证安装
登录hive,在hive创建表并查看该表,命令如下:
$hive
hive> create table test(a string, b int);
hive> show tables;
hive> desc test;

图 附录C‑5 Hive中创建测试表
登录mysql,在TBLS表中查看新增test表:
$mysql -uhive -phive
mysql> use hive;
mysql> select TBL_ID, CREATE_TIME, DB_ID, OWNER, TBL_NAME,TBL_TYPE from TBLS;

图 附录C‑6 在Hive元数据表查询到创建表
C.4 Hive实例演示
C.4.1 准备数据
第一步 上传数据
交易数据存放在该系列配套资源的/saledata目录下,把这些数据文件上传到master节点的/home/spark/word目录下。
第二步 启动Hive并胡藏剑数据库
启动HDFS、YARN和Hive,启动完毕后创建Hive数据库
$hive --service metastore &
$hive
hive> create database hive;
hive> show databases;
hive> use hive;
第一步 在Hive创建和表
启动Hadoop集群,进入Hive命令行操作界面,使用如下命令创建三张数据表:
l tbDate定义了日期的分类,将每天分别赋予所属的月份、星期、季度等属性,字段分别为日期、年月、年、月、日、周几、第几周、季度、旬、半月;
l tbStock定义了订单表头,字段分别为订单号、交易位置、交易日期;
l tbStockDetail文件定义了订单明细,该表和tbStock以交易号进行关联,字段分别为订单号、行号、货品、数量、金额:
hive> CREATE TABLE tbDate(dateID string,theyearmonth string,theyear string,themonth string,thedate string,theweek string,theweeks string,thequot string,thetenday string,thehalfmonth string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' ;
Time taken: 1.121 seconds
hive> CREATE TABLE tbStock(ordernumber STRING,locationid string,dateID string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' ;
Time taken: 0.166 seconds
hive> CREATE TABLE tbStockDetail(ordernumber STRING,rownum int,itemid string,qty int,price int ,amount int) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' ;
Time taken: 0.267 seconds
hive> show tables;
OK
tbdate
tbstock
tbstockdetail
Time taken: 0.089 seconds, Fetched: 3 row(s)
第二步 导入数据
从本地操作系统分别加载日期、交易信息和交易详细信息表数据
hive> LOAD DATA LOCAL INPATH '/home/spark/work/saledata/tbDate.txt' INTO TABLE tbDate;
Loading data to table hive.tbdate
OK
Time taken: 2.784 seconds
hive> LOAD DATA LOCAL INPATH '/home/spark/work/saledata/tbStock.txt' INTO TABLE tbStock;
Loading data to table hive.tbstock
OK
Time taken: 0.648 seconds
hive> LOAD DATA LOCAL INPATH '/home/spark/work/saledata/tbStockDetail.txt' INTO TABLE tbStockDetail;
Loading data to table hive.tbstockdetail
OK
Time taken: 1.44 seconds
查看HDFS中相关SALEDATA数据库中增加了三个文件夹,分别对应三个表:
[spark@master ~]$ hadoop fs -ls /user/hive/warehouse/hive.db
Found 3 items
drwxr-xr-x - spark supergroup 0 2016-04-14 15:18 /user/hive/warehouse/hive.db/tbdate
drwxr-xr-x - spark supergroup 0 2016-04-14 15:18 /user/hive/warehouse/hive.db/tbstock
drwxr-xr-x - spark supergroup 0 2016-04-14 15:18 /user/hive/warehouse/hive.db/tbstockdetail
C.4.2 计算所有订单每年的总金额
第一步 算法分析
要计算所有订单每年的总金额,首先需要获取所有订单的订单号、订单日期和订单金信息,然后把这些信息和日期表进行关联,获取年份信息,最后根据这四个列按年份归组统计获取所有订单每年的总金额。
第二步 执行HSQL语句
hive> use hive;
hive> select c.theyear, sum(b.amount) from tbStock a,tbStockDetail b,tbDate c where a.ordernumber=b.ordernumber and a.dateid=c.dateid group by c.theyear order by c.theyear;
运行过程中创建两个Job,分别为application_1460617800545_0001和application_1460617800545_000,在YARN的资源管理器界面中(默认http://master:8088/),可以看到如下界面:

图 附录C‑7 在YARN监控界面作业运行状态
第三步 查看结果
整个计算过程使用了175.25秒,结果如下:

图 附录C‑8 计算所有订单每年的总金额结果
C.4.3 计算所有订单每年最大金额订单的销售额
第一步 算法分析
该算法分为两步:
1. 按照日期和订单号进行归组计算,获取所有订单每天的销售数据;
2. 把第一步获取的数据和日期表进行关联获取的年份信息,然后按照年份进行归组,使用Max函数,获取所有订单每年最大金额订单的销售额。
第二步 执行HSQL语句
//第一步:按照日期和订单号进行归组计算,获取所有订单每天的销售数据
hive> select a.dateid,a.ordernumber,sum(b.amount) as sumofamount from tbStock a,tbStockDetail b where a.ordernumber=b.ordernumber group by a.dateid,a.ordernumber;
//第二步: 按照年份进行归组,使用Max函数,获取所有订单每年最大金额订单的销售额
hive> select c.theyear,max(d.sumofamount) from tbDate c,(select a.dateid,a.ordernumber,sum(b.amount) as sumofamount from tbStock a,tbStockDetail b where a.ordernumber=b.ordernumber group by a.dateid,a.ordernumber) d where c.dateid=d.dateid group by c.theyear sort by c.theyear;
运行过程中创建两个Job,分别为job_1437659442092_0004和job_1437659442092_0005,在YARN的监控界面中可以看到如下界面:

图 附录C‑9在YARN监控界面作业运行状态
第三步 查看结果
整个计算过程使用了171.41秒,结果如下:

图 附录C‑10 查看所有订单每年最大金额订单的销售额结果
C.4.4 计算其他金额
位
位
hive> select c.theyear,c.thequot,sum(b.amount) as sumofamount from tbStock a,tbStockDetail b,tbDate c where a.ordernumber=b.ordernumber and a.dateid=c.dateid group by c.theyear,c.thequot order by sumofamount desc limit 10;
2008 1 5252819
2007 4 4613093
2007 1 4446088
2006 1 3916638
2008 2 3886470
2007 3 3870558
2007 2 3782235
2006 4 3691314
2005 1 3592007
2005 3 3304243

图 附录C‑11所有订单中季度销售额前10位结果
以上的单据
以上的单据
hive> select a.ordernumber,sum(b.amount) as sumofamount from tbStock a,tbStockDetail b where a.ordernumber=b.ordernumber group by a.ordernumber having sumofamount>100000;
HMJSL00009024 119058
HMJSL00009958 159126

图 附录C‑12 列出销售金额在100000以上的单据
附录C 编译安装Hive的更多相关文章
- 附录A 编译安装Hadoop
A.1 编译Hadoop A.1.1 搭建环境 第一步安装并设置maven 1. 下载maven安装包 建议安装3.0以上版本(由于Spark2.0编译要求Maven3.3.9及以上版本),本次 ...
- (转载)Linux如何编译安装源码包软件
一.什么是源码包软件: 顾名思义,源码包就是源代码的可见的软件包,基于Linux和BSD系统的软件最常见:在国内源可见的软件几乎绝迹:大多开源软件都是国外出品:在国内较为出名的开源软件有fcitx;l ...
- Spark入门实战系列--2.Spark编译与部署(下)--Spark编译安装
[注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 .编译Spark .时间不一样,SBT是白天编译,Maven是深夜进行的,获取依赖包速度不同 ...
- CentOS和Ubuntu下安装配置Greenplum数据库集群(包括安装包和源码编译安装)
首先说一下,无论是CentOS/RedHat还是Ubuntu都可以按源码方式.安装包方式编译安装. 1. 规划 192.168.4.93(h93) 1个主master 2个主segm ...
- Ubuntu13.04 Eclipse下编译安装Hadoop插件及使用小例
Ubuntu13.04 Eclipse下编译安装Hadoop插件及使用小例 一.在Eclipse下编译安装Hadoop插件 Hadoop的Eclipse插件现在已经没有二进制版直接提供,只能自己编译. ...
- 基于cdh5.10.x hadoop版本的apache源码编译安装spark
参考文档:http://spark.apache.org/docs/1.6.0/building-spark.html spark安装需要选择源码编译方式进行安装部署,cdh5.10.0提供默认的二进 ...
- 编译安装spark 1.5.x(Building Spark)
原文连接:http://spark.apache.org/docs/1.5.0/building-spark.html · Building with build/mvn · Building a R ...
- Hadoop学习笔记(一)——编译安装和配置
近期工作调动.打算补一下大数据处理的知识.可能会陆续涉及hadoop.mongodb.ddbs等. 首先Apache提供二进制的Hadoop版本号是32位的.在启动时总是有警告,所以想自己编译一遍.部 ...
- azkaban编译安装配置文档
azkaban编译安装配置文档 参考官方文档: http://azkaban.github.io/azkaban/docs/latest/ azkaban的配置文件说明:http://azkaban. ...
随机推荐
- IDEA插件
Key Promoter 快捷键提示插件,帮助你快速记住快捷键.当你用鼠标完成某功能时,它会指示有相应的快捷键来完成刚才的功能,同时指导你为经常重复的操作建立快捷键. SerialVersionUID ...
- Openssl生成证书三板斧
证书创建三步曲: 一.密钥文件 二.请求文 三.根证书签名 最后看需要是否合并证书文件 1. 创立根证书密钥文件(自己做CA)root.key: [kk@test ~]$ openssl genrsa ...
- Jenkins部署配置简介
前段时间研究了一下自动化测试,因而接触到了Jenkins,今天有时间进行一下Jenkins部署配置相关知识的总结分享 前言:由于本次只是实验性研究,采用Windows环境,因此Jenkins可以通过下 ...
- bzoj3380: [Usaco2004 Open]Cave Cows 1 洞穴里的牛之一(spfa+状压DP)
数据最多14个有宝藏的地方,所以可以想到用状压dp 可以先预处理出每个i到j的路径中最小权值的最大值dis[i][j] 本来想用Floyd写,无奈太弱调不出来..后来改用spfa 然后进行dp,这基本 ...
- nginx超时重发
最近一直遇到一个bug: 客户端会二次请求服务端,服务端多次调用remote服务. 特点是,这些请求都是模型切片相关的,耗时很长的请求,往往需要1分钟左右. 开始以为是客户端代码有问题,进行了二次请求 ...
- IIS Community Newsletter June 2013
Announcements Windows 2012 Server R2 preview released Windows Server 2012 R2 provides a wide range o ...
- .NET面试题系列[10] - IEnumerable的派生类
.NET面试题系列目录 IEnumerable分为两个版本:泛型的和非泛型的.IEnumerable只有一个方法GetEnumerator.如果你只需要数据而不打算修改它,不打算为集合插入或删除任何成 ...
- Javascript基础回顾 之(三) 面向对象
本来是要继续由浅入深表达式系列最后一篇的,但是最近团队突然就忙起来了,从来没有过的忙!不过喜欢表达式的朋友请放心,已经在写了:) 在工作当中发现大家对Javascript的一些基本原理普遍存在这里或者 ...
- node(async原理)
node中的async是用来实现同步操作的,提供包括map.Series等方法,本文不做赘述. 由于项目需要在浏览器端用了async.js,因此仔细看了下它的代码.原来,一直以为node是在服务端调用 ...
- 多彩的Console打印新玩法
Chrome应该是每一个Web开发者必备的工具之一.它有而强大的Devtool,辅助我们的JavaScript调试,审视DOM元素,CSS即时修改等.以及它还有一个的庞大的插件系统,同时我们也可以很容 ...