数据仓库Hive的安装和使用

(一)完成Hive的安装和配置Mysql接口。

①下载并解压Hive安装包
a. 压缩格式的文件apache-hive-3.1.2-bin.tar.gz已经下载并保存在“/home/hadoop/下载/”目录下。
在这里插入图片描述
b. 将apache-hive-3.1.2-bin.tar.gz解压到/usr/local中。
在这里插入图片描述
c. 将文件夹名改为hive并修改文件权限。
在这里插入图片描述
②配置环境变量
a. 为了方便使用,把hive命令加入到环境变量中去,使用vim编辑器打开.bashrc文件。在该文件最前面一行添加如下内容:

export HIVE_HOME=/usr/local/hive
export PATH=$PATH:$HIVE_HOME/bin
export HADOOP_HOME=/usr/local/Hadoop

在这里插入图片描述

b. 保存退出后,运行如下命令使配置立即生效。
在这里插入图片描述
③ 修改/usr/local/hive/conf下的hive-site.xml
a. 执行如下命令,将hive-default.xml.template重命名为hive-default.xml
在这里插入图片描述
b. 然后使用vim编辑器新建一个配置文件hive-site.xml,在hive-site.xml中添加如下配置信息。
在这里插入图片描述
在这里插入图片描述
Ubuntu系统下安装mysql
a. 安装mysql前先更新一下软件源以获得最新版本,安装过程会提示设置mysql root用户的密码,设置完成后等待自动安装即可。默认安装完成就启动了mysql
在这里插入图片描述
在这里插入图片描述
提示设置密码和确认密码

在这里插入图片描述
在这里插入图片描述

b. 启动和关闭mysql服务器。

在这里插入图片描述

c. 确认是否启动成功,mysql节点处于LISTEN状态表示启动成功。
在这里插入图片描述
d. 进入mysql shell界面。 在这里插入图片描述
⑤压缩格式的文件mysql-connector-java-5.1.40.tar.gz已经下载并保存在“/home/hadoop/下载/”目录下,解压mysql jdbc 包并将其拷贝到/usr/local/hive/lib目录下。
在这里插入图片描述
在这里插入图片描述
⑥启动并登陆mysql shell
在这里插入图片描述
⑦新建hive数据库。
在这里插入图片描述
⑧配置mysql允许hive接入,将所有数据库的所有表的所有权限赋给hive用户,并刷新mysql系统权限关系表。
在这里插入图片描述
⑨启动hive(先启动hadoop集群)
a.若已经配置了PATH,可以使用如下命令启动hadoop集群和hive

start-dfs.sh #启动Hadoop的HDFS
hive  #启动hive

b. 如果没有配置PATH,请加上路径才能运行命令。
在这里插入图片描述

启动进入Hive的交互式执行环境以后,会出现如下命令提示符。
在这里插入图片描述

(二)了解Hive的基本数据类型。列出各种数据类型。

Hive支持基本数据类型和复杂类型, 基本数据类型主要有数值类型(INTFLOATDOUBLE ) 、布尔型和字符串, 复杂类型有三种:ARRAYMAPSTRUCT
a.基本数据类型
TINYINT 1个字节
SMALLINT 2个字节
INT 4个字节
BIGINT 8个字节
BOOLEAN TRUE/FALSE
FLOAT 4个字节,单精度浮点型
DOUBLE 8个字节,双精度浮点型STRING 字符串
b. 复杂数据类型
ARRAY 有序字段
MAP 无序字段
STRUCT 一组命名的字段

(三)完成Hive的基本操作。

(1)Hive常用的HiveQL操作–数据定义
①创建、修改和删除数据库
a. 创建数据库。
在这里插入图片描述
b. 查看Hive中包含数据库。
在这里插入图片描述
c. 查看Hive中以h开头数据库。
在这里插入图片描述
d. 切换到hive数据库下。
在这里插入图片描述
e. 删除不含表的数据库。
在这里插入图片描述
②创建、修改和删除表。
在这里插入图片描述
③视图和索引的创建、修改和删除。
a.创建和修改视图(因为视图是只读的,所以对于视图只允许改变元数据中的 tblproperties属性。)

create view view_name as....;                #创建视图
alter view view_name set tblproperties();   #修改视图

b.删除视图和创建索引。

drop view if exists view_name;   #删除视图
create index index_name on table table_name(partition_name/column_name)
as 'org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler' with deferred rebuild....;  #创建索引

c.这里’org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler’是一个索引处理器,即一个实现了索引接口的Java类,另外Hive还有其他的索引实现。

 alter index index_name on table table_name partition(...)  rebulid;   #重建索引

d.如果使用 deferred rebuild,那么新索引成空白状态,任何时候可以进行第一次索引创建或重建。

show formatted index on table_name;                       #显示索引
drop index if exists index_name on table table_name;      #删除索引

④用户自定义函数
a. show functions; 显示Hive中所有的函数名称。
在这里插入图片描述
b. 查看具体函数使用方法可使用describe function 函数名。
在这里插入图片描述
c. 编写自己的UDF前需要继承UDF类并实现evaluate()函数,或是继承GenericUDF类实现initialize()函数、evaluate()函数和getDisplayString()函数。
如果想在Hive中使用该UDF需要将我们编写的Java代码进行编译,然后将编译后的UDF二进制类文件(.class文件)打包成一个JAR文件,然后在Hive会话中将这个JAR文件加入到类路径下,在通过create function语句定义好使用这个Java类的函数。

add jar <jar文件的绝对路径>;                        #创建函数
create temporary function function_name;
drop temporary function if exists function_name;    #删除函数

(2)Hive常用的HiveQL操作–数据定义
数据操作主要实现的是将数据装载到表中(或是从表中导出),并进行相应查询操作,对熟悉SQL语言的用户应该不会陌生。
①向表中装载数据
这里以只有两个属性的简单表为例来介绍。首先创建表stucoursestu有两个属性idnamecourse有两个属性cidsid
在这里插入图片描述
向表中装载数据有两种方法:从文件中导入和通过查询语句插入。
a. 从文件中导入
假如这个表中的记录存储于文件stu.txt中,该文件的存储路径为/usr/local/hadoop/examples/stu.txt,内容如下。

1 xiapi 
2 xiaoxue 
3 qingqing

下面我们把这个文件中的数据装载到表stu中,操作语句如下。

load data local inpath '/usr/local/hadoop/examples/stu.txt' overwrite into table stu;

如果stu.txt文件存储在HDFS 上,则不需要 local 关键字。
b.通过查询语句插入
创建和stu表属性相同的表stu1,把从stu表中查询得到的数据插入到stu1中:

create table stu1 as select id,name from stu;

上面是创建表,并直接向新表插入数据;若表已经存在,向表中插入数据需执行以下命令:

insert overwrite table stu1 select id,name from stu where(条件);

这里关键字overwrite的作用是替换掉表(或分区)中原有数据,换成into关键字,直接追加到原有内容后。
②从表中导出数据
a.简单拷贝文件或文件夹

hadoop  fs -cp source_path target_path;

b.写入临时文件

insert overwrite local directory '/usr/local/hadoop/tmp/stu'  select id,name from stu;

③查询操作和SQL的查询完全一样,主要使用select…from…where…等语句,再结合关键字group by、having、like、rlike等操作。 例如case…when…then…句式和if条件语句类似,用于处理单个列的查询结果。
在这里插入图片描述
④连接
连接(join)是将两个表中在共同数据项上相互匹配的那些行合并起来, HiveQL 的连接分为内连接、左向外连接、右向外连接、全外连接和半连接 5 种。
a. 内连接(等值连接)
内连接使用比较运算符根据每个表共有的列的值匹配两个表中的行。把以下内容插入到course表中。

1 3
2 1
3 1

查询stucourse表中学号相同的所有行

select stu.*, course.* from stu join course on(stu .id=course .sid);

在这里插入图片描述

b. 左连接 左连接的结果集包括“LEFT OUTER”子句中指定的左表的所有行, 而不仅仅是连接列所匹配的行。如果左表的某行在右表中没有匹配行, 则在相关联的结果集中右表的所有选择列均为空值。

select stu.*, course.* from stu left outer join course on(stu .id=course .sid);

在这里插入图片描述

c. 右连接
右连接是左向外连接的反向连接,将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。

select stu.*, course.* from stu right outer join course on(stu .id=course .sid);

d. 全连接
全连接返回左表和右表中的所有行。当某行在另一表中没有匹配行时,则另一个表的选择列表包含空值。如果表之间有匹配行,则整个结果集包含基表的数据值。

select stu.*, course.* from stu full outer join course on(stu .id=course .sid);

在这里插入图片描述
e. 半连接
半连接是 Hive 所特有的, Hive 不支持 in 操作,但是拥有替代的方案;
left semi join, 称为半连接, 需要注意的是连接的表不能在查询的列中,只能出现在 on 子句中。

select stu.* from stu left semi join course on(stu .id=course .sid);

⑤子查询
标准 SQL 的子查询支持嵌套的 select 子句,HiveQL 对子查询的支持很有限,只能在from 引导的子句中出现子查询。

(四)在hive中实现wordcount

MapReduce实现词频统计的代码可以通过下载Hadoop源码后,在/usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar 包中找到(wordcount类)。
在这里插入图片描述
②创建input目录,output目录会自动生成。其中input为输入目录,output目录为输出目录。
在这里插入图片描述
③在input文件夹中创建两个测试文件file1.txtfile2.txt
在这里插入图片描述
④执行如下hadoop命令。
在这里插入图片描述
⑤可以到output文件夹中查看结果。
在这里插入图片描述
⑥通过HiveQL实现词频统计功能,不需要进行编译生成jar来执行。
在这里插入图片描述
执行后,用select语句查看结果。
在这里插入图片描述

(五)为什么要设计Hive

hadoop学习难度大,成本高,坡度陡,设计Hive可以降使用hadoop的难度,降低学习成本。
Hive提供了一种SQL(结构化查询语言)方言,可以查询存储在Hadoop分布式文件系统(HDFS)中的数据或其他和Hadoop集成的文件系统。
③大多数数据仓库应用程序都是使用关系数据库进行实现的,并使用SQL作为查询语言。Hive降低了将这些应用程序转移到Hadoop系统上的难度。
Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数。

(六)在hive中实现wordcount和直接写java程序有什么区别和相似?

①区别:相比直接写java程序,在hive中实现wordcount的最大优势是不用编写Java代码。
MapReduce代码了,只需使用HiveQL
②相似:都是使用词频统计算法来统计单词出现的次数。

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值