实验六:熟悉Hive的基本操作

这篇具有很好参考价值的文章主要介绍了实验六:熟悉Hive的基本操作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

由于CSDN上传md文件总是会使图片失效
完整的实验文档地址如下:
https://download.csdn.net/download/qq_36428822/85709631?spm=1001.2014.3001.5501


“大数据技术原理与应用”课程实验报告

题目:实验六:熟悉Hive的基本操作 姓名:小猪猪 日期:2022/5/15

1、实验环境:

设备名称 LAPTOP-9KJS8HO6
处理器 Intel® Core™ i5-10300H CPU @ 2.50GHz 2.50 GHz
机带 RAM 16.0 GB (15.8 GB 可用)
主机操作系统 Windows 10 家庭中文版
虚拟机操作系统 ubuntukylin-16.04
Hadoop 版本 3.1.3
JDK 版本 1.8
Java IDE:Eclipse
系统类型 64 位操作系统, 基于 x64 的处理器
笔和触控 没有可用于此显示器的笔或触控输入

2、实验内容与完成情况:

1.创建一个内部表 stocks,字段分隔符为英文逗号,表结构如下所示:
stocks 表结构:
col_name data_type
exchange String
symbol String
Ymd String
Price_open Float
Price_high Float
Price_low Float
Price_close Float
Volume Int
Price_adj_close float
Shell命令:

1.	create table if not exists stocks  
2.	(  
3.	`exchange` string,  
4.	`symbol` string,  
5.	`ymd` string,  
6.	`price_open` float,  
7.	`price_high` float,  
8.	`price_low` float,  
9.	`price_close` float,  
10.	`volume` int,  
11.	`price_adj_close` float  
12.	)  
13.	row format delimited fields terminated by ',';  

图1. 创建一个内部表 stocks

2.创建一个外部分区表 dividends(分区字段为 exchange 和 symbol),字段分隔符为英文逗号,表结构如下所示:
dividends 表结构
col_name data_type
ymd String
dividend Float
exange String
symbol string

Shell命令:

1.	create external table if not exists dividends  
2.	(  
3.	`ymd` string,  
4.	`dividend` float  
5.	)  
6.	partitioned by(`exchange` string ,`symbol` string)  
7.	row format delimited fields terminated by ',';  

图2. 创建一个外部表 dividends

3.从 stocks.csv 文件向 stocks 表中导入数据:
Shell命令:
load data local inpath ‘/usr/local/hive/stocks.csv’ overwrite into table stocks;

4.创建一个未分区的外部表 dividends_unpartitioned,并从 dividends.csv 向其中导入数据,表结构如下所示:
dividends_unpartitioned 表结构
col_name data_type
ymd String
dividend Float
exange String
symbol string
Shell命令:

1.	create external table if not exists dividends_unpartitioned  
2.	(  
3.	`exchange` string ,  
4.	`symbol` string,  
5.	`ymd` string,  
6.	`dividend` float  
7.	)  
8.	row format delimited fields terminated by ',';
load data local inpath '/usr/local/hive/dividends.csv' overwrite into table dividends_unpartitioned;

图3. 创建一个未分区的外部表 dividends_unpartitioned并导入数据

5.通过对 dividends_unpartitioned 的查询语句,利用 Hive 自动分区特性向分区表 dividends 各个分区中插入对应数据。
Shell命令:

1.	set hive.exec.dynamic.partition=true;  
2.	set hive.exec.dynamic.partition.mode=nonstrict;  
3.	set hive.exec.max.dynamic.partitions.pernode=1000;  
4.	insert overwrite table dividends partition(`exchange`,`symbol`) select `ymd`,`dividend`,`exchange`,`symbol` from dividends_unpartitioned;

图4. 向分区表 dividends 各个分区中插入对应数据

6.查询IBM公司(symbol = IBM)从 2000 年起所有支付股息的交易日(dividends 表中有对应记录)的收盘价(price_close)。
Shell命令:

1.	select s.ymd,s.symbol,s.price_close  
2.	from stocks s   
3.	LEFT SEMI JOIN   
4.	dividends d  
5.	ON s.ymd=d.ymd and s.symbol=d.symbol  
6.	where s.symbol='IBM' and year(ymd)>=2000; 

图5. 查询IBM公司收盘价

7.查询苹果公司(symbol = AAPL)2008 年 10 月每个交易日的涨跌情况,涨显示 rise,跌显示 fall,不变显示 unchange。
Shell命令:

1.	select ymd,  
2.	case  
3.	    when price_close-price_open>0 then 'rise'  
4.	    when price_close-price_open<0 then 'fall'  
5.	    else 'unchanged'  
6.	end as situation  
7.	from stocks  
8.	where symbol='AAPL' and substring(ymd,0,7)='2008-10';

图6. 查询苹果公司涨跌情况

8.查询 stocks 表中收盘价(price_close)比开盘价(price_open)高得最多的那条记录的交易所(exchange)、股票代码(symbol)、日期(ymd)、收盘价、开盘价及二者差价。
Shell命令:

1.	select `exchange`,`symbol`,`ymd`,price_close,price_open,price_close-price_open as `diff`  
2.	from  
3.	(  
4.	    select *  
5.	    from stocks  
6.	    order by price_close-price_open desc  
7.	    limit 1  
8.	)t;

图7. 查询 stocks 表中收盘价(price_close)比开盘价(price_open)高得最多的那条记录

9.从 stocks 表中查询苹果公司(symbol=AAPL)年平均调整后收盘价(price_adj_close)大于 50 美元的年份及年平均调整后收盘价。
Shell命令:

1.	select  
2.	    year(ymd) as `year`,  
3.	    avg(price_adj_close) as avg_price from stocks  
4.	where `exchange`='NASDAQ' and symbol='AAPL'  
5.	group by year(ymd)  
6.	having avg_price > 50;

图8. 查询平均调整后收盘价

10.查询每年年平均调整后收盘价(price_adj_close)前三名的公司的股票代码及年平均调整后收盘价。
Shell命令:

1.	select t2.`year`,symbol,t2.avg_price  
2.	from  
3.	(  
4.	    select  
5.	        *,row_number() over(partition by t1.`year` order by t1.avg_price desc) as `rank`  
6.	    from  
7.	    (  
8.	        select  
9.	            year(ymd) as `year`,  
10.	            symbol,  
11.	            avg(price_adj_close) as avg_price  
12.	        from stocks  
13.	        group by year(ymd),symbol  
14.	    )t1  
15.	)t2  
16.	where t2.`rank`<=3;

图9. 查询收盘价前三名股票公司的年平均收盘价

3、出现的问题:

1、HIVE SLF4J: Class path contains multiple SLF4J bindings. 启动Hive时报错

图10. 启动Hive时报错

2、在hive-3.1.x版本中,使用hive shell时,会发现在查询命令中夹杂大量的日志信息,严重干扰查询结果显示,特别是强迫症患者,不能忍受。通过修改conf下的日志文件,会发现不起任何作用。

图11. 使用hive时产生大量日志信息

3、一开始启动hive1.2.1时,报错提示hadoop的版本无法识别

图12. 启动hive时提示hadoop版本无法识别

4、启动hive3.1.2时,报错Exception in thread “main” java.lang.NoSuchMethodError: com.google.common.base.Preconditio

图13. 启动hive3.1.2时提示异常

4、解决方案:

1、hadoop和hive的jar包重复了,删除其中一个jar包即可。

2、
解决方法:
1.在 Hive 安装目录的 conf 目录下创建出 log4j.properties 日志配置文件,以WARN 级别为例:

2.添加如下内容:

log4j.rootLogger=WARN, CA
log4j.appender.CA=org.apache.log4j.ConsoleAppender
log4j.appender.CA.layout=org.apache.log4j.PatternLayout
log4j.appender.CA.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

重启hive,世界清净了。

3、我使用的时hadoop3.1.3,而第一次安装的hive是1.2.1,其中有的jar包版本不匹配,最好的办法是安装更新的hive版本,我重装了hive3.1.2,问题解决了。

4、
考虑到此包是guava组件提供,猜测可能是HIVE和HADOOP内置的jar包版本不一致导致,文件包如下:
hive/lib:guava-19.0.jar
hadoop/lib:guava-27.0-jre.jar,此jar包的位置在share/hadoop/common/lib下面
我们删除掉旧版本的19,将新版本拷贝进去,再次运行bin/hive,问题得以解决文章来源地址https://www.toymoban.com/news/detail-474620.html

到了这里,关于实验六:熟悉Hive的基本操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 命令行hive的基本操作

    使用SQL语句在命令行创建Hive库: 其中, database_name 是要创建的数据库的名称。例如: 这将在Hive中创建一个名为\\\"mydatabase\\\"的数据库。 使用SQL语句在命令行创建Hive表: 其中, table_name 是要创建的表的名称, column1_name 和 column2_name 是表的列名, column1_type 和 column2_type 是对应列

    2024年03月11日
    浏览(34)
  • HIVE基本查询操作(二)——第1关:Hive排序

    第1关:Hive排序 任务描述 本关任务: 2013 年 7 月 22 日买入量最高的三种股票。 相关知识 为了完成本关任务,你需要掌握:1. Hive 的几种排序;2. limit 使用。 hive的排序 ① order by order by 后面可以有多列进行排序,默认按字典排序( desc :降序, asc (默认):升序); order by 为全局排

    2023年04月24日
    浏览(41)
  • 实验二、熟悉常用的HDFS操作(HDFS JavaAPI之读取/上传/删除文件)

    理解HDFS在Hadoop体系结构中的角色 熟练使用HDFS操作常用的shell命令 熟悉HDFS操作常用的Java API 操作系统:CentOS 8 Hadoop版本:3.3.1 jdk版本:1.8 Java IDE:Eclipse 1. 使用Hadoop命令操作分布式文件系统。 新建目录 在本地和hadoop中分别创建文件夹: 在本地创建目录: Hadoop创建目录: 上

    2023年04月08日
    浏览(57)
  • 大数据课程F3——HIve的基本操作

    文章作者邮箱:yugongshiye@sina.cn              地址:广东惠州 ⚪ 掌握HIve的基本SQL语句和注意问题; ⚪ 掌握HIve的表结构; ⚪ 掌握HIve的数据类型; ⚪ 掌握HIve的基础函数和窗口函数; 1. 通过hive -e的方式来执行指定的SQL,例如hive -e \\\'create database demo;\\\'。 2. 通过hive -f的方式

    2024年02月14日
    浏览(36)
  • Hive的基本SQL操作(DDL篇)

    目录 ​编辑 一、数据库的基本操作 1.1 展示所有数据库 1.2 切换数据库 1.3 创建数据库 1.4 删除数据库 1.5 显示数据库信息 1.5.1 显示数据库信息 1.5.2 显示数据库详情 二、数据库表的基本操作 2.1 创建表的操作 2.1.1 创建普通hive表(不包含行定义格式) 2.1.2 创建自定义行

    2024年02月07日
    浏览(39)
  • Hive基本操作-增删改查和修改库表

    创建数据库 查看数据库 修改数据库属性 删除数据库 新增表 外部表和内部表最大的一个区别是,内部表在删除表的时候,数据会一起被删除,它存储在所属数据库子目录下; 外部表再删除表的时候数据不会被删除,所以外部表更加安全,在工作中也更加常用,存储在指定的

    2024年02月11日
    浏览(33)
  • 黑马大数据学习笔记4-Hive部署和基本操作

    p48、51、52 https://www.bilibili.com/video/BV1WY4y197g7/?p=48 Hive是分布式运行的框架还是单机运行的? Hive是单机工具,只需要部署在一台服务器即可。 Hive虽然是单机的,但是它可以提交分布式运行的MapReduce程序运行。 我们知道Hive是单机工具后,就需要准备一台服务器供Hive使用即可。

    2024年02月14日
    浏览(46)
  • 深度学习课件-实验1_PyTorch基本操作实验

    使用 𝐓𝐞𝐧𝐬𝐨𝐫 初始化一个 𝟏×𝟑 的矩阵 𝑴 和一个 𝟐×𝟏 的矩阵 𝑵,对两矩阵进行减法操作(要求实现三种不同的形式),给出结果并分析三种方式的不同(如果出现报错,分析报错的原因),同时需要指出在计算过程中发生了什么 利用 𝐓𝐞𝐧𝐬𝐨𝐫

    2024年02月16日
    浏览(33)
  • 实验一 SQL Server的基本操作

      实验一 SQL Server的基本操作 一、目的与要求 (1) 掌握SQL Server Management Studio “对象资源管理器”的使用方法; (2) 掌握SQL Server Management Studio “查询分析器”的使用方法; (3) 对数据库及其对象有一个基本的了解。   二、实验准备 (1) 了解SQL Server各种版本安装的软、硬件要求

    2024年02月05日
    浏览(43)
  • 数据结构实验4:二叉树的基本操作

    一、问题描述 运用二叉链表实现二叉树的基本操作,包括:创建二叉树的存储结构、复制已有的二叉树、计算已有的二叉树的深度、先根序序列、中根序序列、后根序序列等。 输入格式:AB#C##D## 二、实验目的 掌握二叉链表及二叉树的基本操作。 三、实验内容及要求 1、构造

    2024年01月23日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包