由于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,问题得以解决

实验六:熟悉Hive的基本操作相关推荐

  1. 【大数据基础实践】(六)数据仓库Hive的基本操作

    目录 1. 数据仓库概念 2. Hive简介 2.1 简介 2.2 特性 2.3 生态系统 3. Hive系统架构 4. HQL转成MapReduce作业的原理 4.1 join的实现原理 4.2 g ...

  2. 数字图像处理实验--实验项目一 图像的基本操作和基本运算

    目录 前言 实验项目一 图像的基本操作和基本运算 1.[图像的读取操作] 2 [图像的基本运算] 3[ 图像的几何变换] 4[图像的灰度变换] 前言 数字图像处理(Digital Image Proc ...

  3. mysql实验6语言结构_实验六 SQL语言数据查询语言DQL.pdf

    实验六 SQL语言数据查询语言DQL 实验六 SQL 语言数据查询语言DQL 一.实验目的 数据查询语言指对数据库中的数据查询.统计.分组.排序等操作.查询语 句可以分为简单查询.连接查询.嵌套查询和 ...

  4. python语言程序设计实践教程答案实验六_Python程序设计实践教程

    书名:Python程序设计实践教程 定价:29.8 ISBN:9787115532602 作者:储岳中 薛希玲 版次:*1版 出版时间:2020-04 内容提要: 本书是Python语言程序设计的配套 ...

  5. 数据结构实验六 综合数据处理

    广州大学学生实验报告 开课实验室:计算机科学与工程实验(电子楼416A)     2019年6月14日 学院 计算机科学与教育软件学院 年级.专业.班 计算机大类 144班 姓名 学号 实验课程名称 ...

  6. 山东大学 2020级数据库系统 实验六

    What's more 山东大学 2020级数据库系统 实验一 山东大学 2020级数据库系统 实验二 山东大学 2020级数据库系统 实验三 山东大学 2020级数据库系统 实验四 山东大学 202 ...

  7. 单片机原理及应用 实验六 双机通信与PCB设计

    单片机原理及应用(C51版) 实验目的及要求: 1.掌握串口通信工作原理及程序开发方法,熟悉ARES软件PCB设计过程: 2.按照P241图A.72绘制电路原理图1,将第6章实例2中2#机的查询法收发 ...

  8. 桂 林 理 工 大 学实 验 报 告 实验名称实验六 函数

    桂 林 理 工 大 学 实  验  报  告 班级 计算机类2 学号320205 姓名  实验名称实验六 函数 日期 2020年 12月7日 一.实验目的: 掌握定义函数.声明函数的方法. 掌握调用函 ...

  9. 数据结构实验报告,二叉树的基本操作(C语言)

    数据结构实验报告,二叉树的基本操作(C语言) 作者:命运之光 专栏:数据结构 目录 数据结构实验报告,二叉树的基本操作(C语言) 实验六 二叉树的基本操作 一.需求分析 二.概要设计 三.详细设计 四 ...

最新文章

  1. 研究院引进:博士70万;硕士40万
  2. Kubernetes文章汇总
  3. 日常生活小技巧 -- UltraEdit复制16进制数据
  4. mysql 存储过程与存储函数
  5. python利用写模块_使用C++编写python扩展模块
  6. 面试鹅厂,我三面被虐的体无完肤……
  7. ubuntu 16.0安装mysql8_ubuntu16.0.4 安装 mysql8.0.18的
  8. java error:编码gbk的不可映射字符
  9. 项目调研的误区和关键点
  10. phpwind8.7升级9.0.1过程(三)20130107升级到20130227
  11. Java随机生成中文姓名工具
  12. 相位测试音频mp3_音频测试标准是什么?
  13. Word参考文献设置-尾注后添加致谢等内容
  14. andriod获取带字母的iccid
  15. 家用 linux 路由器教程,Ubuntu 搭建无线路由器
  16. Spyder学习笔记1-Jack Xu
  17. 苹果手机语音备忘录在哪_苹果手机的录音功能在哪?教你快速开启,想录音太方便了...
  18. 让老师们哭笑不得的天才学生们
  19. 考虑蒙特卡洛考虑风光不确定性的配电网运行风险 评估 由于风电光伏出力的不确定性,造成配电网运行风险,运用蒙特卡洛概率潮流计算分析电压和线路支路越限
  20. Luminati代理动态IP,海量资源可调用!

热门文章

  1. oracle sys_context()函数
  2. 搜索局域网内电脑共享文件的方法
  3. Mac安装steam提示Steam needs to be online to update. Please confirm your network connection and try again
  4. iMX6ul开发指导
  5. 顺序栈的基本操作(C++实现)
  6. CentOS 基础命令 III
  7. obj-c编程11:内存管理和ARC(自动引用计数)
  8. QEMU中的内存API(2)
  9. 让子弹再飞一会:游戏中关于碰撞体积的趣闻
  10. swagger2 注解