大数据实验6 熟悉Hive的基本操作
下载和安装Hive
source ~/.bashrc
配置环境变量
修改/usr/local/hive/conf下的hive-site.xml
使用vim编辑器新建一个配置文件hive-site.xml
bug:误以为Mysql环境前面的实验里面已经配置好了,直接启动,但是其实是不一样的,后面启动hive之后就找不到mysql了
解决:下载mysql启动包之后重启mysql
# 1. 进入 Hive 的库目录 cd /usr/local/hive/lib # 2. 直接下载 MySQL 驱动包 (这里用 5.1.49 版本,最稳) sudo wget https://repo1.maven.org/maven2/mysql/mysql-connector-java/5.1.49/mysql-connector-java-5.1.49.jar # 3. 赋予权限 (防止无法读取) sudo chmod 777 mysql-connector-java-5.1.49.jar结果再次启动hive的时候又报错
【错误3】在启动Hive时,有可能会出现Hive metastore database is not initialized的错误,这里给出解决方案。
【解决方案】
解决Hive启动,Hive metastore database is not initialized的错误。出错原因:以前曾经安装了Hive或MySQL,重新安装Hive和MySQL以后,导致版本、配置不一致。解决方法是,使用schematool工具。Hive现在包含一个用于 Hive Metastore 架构操控的脱机工具,名为 schematool.此工具可用于初始化当前 Hive 版本的 Metastore 架构。此外,其还可处理从较旧版本到新版本的架构升级。所以,解决上述错误,你可以在终端执行如下命令:
cd /usr/local/hive ./bin/schematool -dbType mysql -initSchema这下正常运行了
新建hive数据库
配置mysql允许hive接入
启动hive(要先启动hadoop集群)
bug:这里启动hive失败了
第一次是因为空间不够,解压后的文件不完整,第二次扩容了之后再解压遇到以下错误
【错误1】
java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument
【原因】
com.google.common.base.Preconditions.checkArgument 这是因为hive内依赖的guava.jar和hadoop内的版本不一致造成的。
【解决方法】
1.查看hadoop安装目录下share/hadoop/common/lib内guava.jar版本
2.查看hive安装目录下lib内guava.jar的版本 如果两者不一致,删除版本低的,并拷贝高版本的 问题解决!
解决:
实验要求:
1.创建一个内部表stocks
bug:exchange是 Hive(以及 SQL)的一个保留关键字,不能直接使用这个作为列名
解决:使用反引号引起来
2.创建一个外部分区表dividends
3.从stocks.csv文件箱stocks表中导入数据,先从(http://dblab.xmu.edu.cn/post/bigdata3/)下载stocks.csv和dividends.csv
导入数据
4.创建未分区的外部表dividends_unpartitioned,并从csv文件中导入数据
5.以针对dividends_unpartitioned,的查询为基础,利用Hive自动分区特性向分区表dividends各个分区中插入对应数据
开启动态分区功能
执行插入操作
6.查询IBM从2000年起所有交付股息的交易日的收盘价
使用JOIN将stocks表和dividends表连接起来
7.查询苹果公司 2008年10月的涨跌情况
CASE WHEN语句进行条件判断,并使用LIKE过滤日期
8.查询收盘价与开盘价差额最大的记录
计算差价,按差价倒序排序 (DESC),然后取第一条 (LIMIT 1)
9.查询 Apple (symbol='AAPL') 年平均调整后收盘价 (price_adj_close) 大于 50 的年份及价格
用substr(ymd, 1, 4)截取年份
用GROUP BY按年份分组
用HAVING过滤平均值大于 50 的组
10.查询每年年平均price_adj_close排名前三的公司代码及价格
先按年份和公司分组,算出平均价格
使用RANK() OVER (PARTITION BY year ORDER BY ...)给每年的公司排名,再筛选排名小于等于 3 的记录
