欢迎光临散文网 会员登陆 & 注册

Hive安装配置及应用

2023-06-29 08:26 作者:thisishui  | 我要投稿

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命令行应用(注意单条命令以 ; 结尾!!)

  1. 内部表应用
    (1) 创建内部表Student,要求的字段和类型: id int, name string, sex string, age int,执行insert语句录入以下数据:

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;

2.外部表应用

(1) 将本实验数据上传至HDFS,数据为stock-daily30d2.txt,此数据修改了实验4中stock-daily数据中的日期格式以支持Hive中的Date数据类型:

https://download.csdn.net/download/m0_69488210/87961142

stock-daily数据说明:

[‘code’,‘isst’,open’, ‘close’, ‘high’, ‘low’, ‘volume’, ‘money’, ‘factor’, ‘high_limit’, ‘low_limit’, ‘avg’, ‘paused’, ‘date’]

code 股票代码

isst 是否ST

open 开盘价

close 收盘价

high 当日最高价

low 当日最低价

volume 交易量(手)

money 交易量(万元)

factor 除权比例

high_limit 涨停价

low_limit 跌停价

avg 每日均价

paused 是否停牌

date 日期

在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;


Hive安装配置及应用的评论 (共 条)

分享到微博请遵守国家法律