赞
踩
Hive是一个构建在Hadoop上的数据仓库框架,需要的支持组件包括:HDFS、YARN、MapReduce。它是应Facebook每天产生的海量新兴社交网络数据进行管理和机器学习的需求而产生和发展的。
Hive提供一套类SQL语言——HiveQL语言,可将HiveQL编译成MapReduce程序并在YARN中执行,支持HDFS文件数据和HBase数据记录查询。
一、Hive安装
1、去www.apache.org下载Hive (apache-hive-3.1.2-bin.tar.gz)
http://www.apache.org/dyn/closer.cgi/hive/
2、解压安装包创建hive目录和临时目录
mkdir /home/hive
mkdir /home/hive/tmp
tar -zxvf apache-hive-3.1.2-bin.tar.gz -C /home/hive
mv /home/hive/apache-hive-3.1.2-bin /home/hive/apache-hive-3.1.2 //将解压后的文件名修改为apache-hive-3.1.2
解压完后,注意最后没有报错信息
tar: Exiting with failure status due to previous errors
如果有,则尝试寻找原因重新解压
3、修改环境变量
vi /etc/profile
添加以下行
export HIVE_HOME=/home/hive/apache-hive-3.1.2
export PATH=$PATH:$HIVE_HOME/bin
加载资源并执行命令查看版本
source /etc/profile
/home/hive/apache-hive-3.1.2/bin/hive --version
如果提示Missing Hive Execution Jar,则可能是下载或解压不完全导致
解压不全可能的原因:
(1)下载文件错误,在windows中解压试试
(2)传输错误,重新将文件传给linux试试
(3)虚拟硬盘空间已满,查看虚拟硬盘剩余空间:df -h
4、进入hive安装目录下的conf目录
cd /home/hive/apache-hive-3.1.2/conf
从模板复制一个配置文件并打开
cp hive-env.sh.template hive-env.sh
vi hive-env.sh
在文件末尾增加(以实际的hadoop和hive版本为主)
export HADOOP_HOME=/home/hadoop/hadoop-3.1.2
export HIVE_CONF_DIR=/home/hive/apache-hive-3.1.2/conf
不配置数据库Hive即缺省采用Derby数据库
5、启动Hadoop HDFS和YARN,确保HDFS和YARN能正常工作
cd /home/hadoop/hadoop-3.1.2
sbin/start-all.sh
6、初次执行时,先初始化derby元数据库
cd进入hive安装目录:
cd /home/hive/apache-hive-3.1.2
初始化derby元数据库
bin/schematool -initSchema -dbType derby
Derby会在第一次启动初始化命令时,在当前所在目录创建元数据库文件(metastore_db)
注意:执行hive会在当前所在目录寻找元数据文件(metastore_db),必须先cd进入第6步的目录,否则会在原地创建一个空metastore_db并报找不到元数据表的错误
执行命令 bin/hive
进入Hive命令行界面
二、Hive命令行应用(注意单条命令以 ; 结尾!!)
create table Student(id int,name string,sex string,age int);
insert into Student values(1,"Tom","M",18),(2,"Trill","M",19),(3,"Bell","M",20),(4,"Lisa","F",19),(5,"Willy","F",18);
(2) 执行查询
查询所有男生
select * from Student where sex="M";
查询大于18岁的学生,并按年龄升序排列
select * from Student where sex="M" and age>18 order by age asc;
在hdfs中新建/hivedata/stock-daily目录,并把stock-daily30d.txt上传到/hivedata/stock-daily目录中
hadoop fs -mkdir /hivedata
hadoop fs -mkdir /hivedata/stock-daily
hadoop fs -put stock-daily30d.txt /hivedata/stock-daily
(2) 创建外部表Stock,具体的字段名称和类型为:code string, isst boolean, open float, close float, high float, low float, volume float, money float, factor float, high_limit float, low_limit float, avg float, paused boolean, trade_date date;注意日期字段不要用date或time,可使用trade_date以避免语法错误。
create external table Stock(code string, isst boolean, open float, close float, high float, low float, volume float, money float, factor float, high_limit float, low_limit float, avg float, paused boolean, trade_date date) row format delimited fields terminated by '\t' location '/hivedata/stock-daily';
(3) 执行查询
查询上证所的股票数量,代码以.SH结尾的股票
select count(*) from Stock where code like "%.SH";
参考SQL语句group语句,查询每日市场总交易量(万元)
select trade_date,sum(money) from Stock group by trade_date order by trade_date desc;
(4) 学习与思考:计算实验4中,股票5日滚动收益率
1 搜索所有交易日,并对交易日编号(保存中间数据到tradedate表)
CREATE TABLE TradeDate as (select row_number() over(order by 1) as date_id, s.trade_date from (select distinct(trade_date) trade_date from Stock where trade_date is not NULL order by trade_date) s);
2 利用连接查询,搜索提取计算所需股票代码和收盘价,并将交易日标记上对应编号(保存中间数据到closewithid表)
CREATE TABLE CloseWithDateId as (select s.code, s.close, s.trade_date, t.date_id from Stock as s join TradeDate as t on s.trade_date=t.trade_date);
3 利用自连接,让股票当日收益与改股票前第五日收益连接在同一行中,并计算五日收益率,此计算对每个股票和交易日都生效(保存中间数据到rollreturn表)
CREATE TABLE RollEarns as (select c2.code, c1.close prev_close, c2.close curr_close, round(((c2.close-c1.close)/c1.close)*100,2) earn_rate, c2.trade_date from CloseWithDateId as c1 join CloseWithDateId as c2 on (c1.date_id == c2.date_id + 4) and c1.code == c2.code order by c2.trade_date);
4 查询某只股票的五日滚动收益率
select * from RollEarns where code=='688800.SH' order by trade_date desc;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。