azure011328

导航

 

大数据技术与应用实验作业      

一、 实验目的

1.了解Hive的安装部署

2.了解Hive的工作原理

 

1.了解Hive的基本操作

2.了解Hive的外部表与普通表的区别

 

1.了解Hive的SQL基本语法

 

2.掌握Hive多种查询方式

 

二、实验过程

 

  1. 首先在Linux本地,新建/data/hive1目录,用于存放所需文件。

切换目录到/data/hive1下,使用wget命令,下载hive所需安装包hive-1.1.0-cdh5.4.5.tar.gz以及mysql-connector-java-5.1.26-bin.jar

 

  1. /data/hive1目录下的hive-1.1.0-cdh5.4.5.tar.gz,解压缩到/apps目录下。

 

再切换到/apps目录下,将/apps/hive-1.1.0-cdh5.4.5,重命名为hive

 

  1. 使用vim打开用户环境变量。

Hive的bin目录,添加到用户环境变量PATH中,然后保存退出。

 

执行source命令,使Hive环境变量生效。

  1. 由于Hive需要将元数据,存储到Mysql中。所以需要拷贝/data/hive1目录下的mysql-connector-java-5.1.26-bin.jarhivelib目录下。
  2. 下面配置Hive,切换到/apps/hive/conf目录下,并创建Hive的配置文件hive-site.xml

使用vim打开hive-site.xml文件。并将下列配置项,添加到hive-site.xml文件中

6.另外,还需要告诉HiveHadoop的环境配置。所以我们需要修改hive-env.sh文件。

 

首先我们将hive-env.sh.template重命名为hive-env.sh

使用vim打开hive-env.sh文件。

追加Hadoop的路径,以及Hive配置文件的路径到文件中。

 

7.下一步是配置Mysql,用于存储Hive的元数据。

 

首先,需要保证Mysql已经启动。执行以下命令,查看Mysql的运行状态。

 

通过输出,可以看出Mysql未启动。所以需要执行启动命令。

 

如果未安装Mysql则需要执行安装命令。若我们的环境已安装Mysql,则无需执行此步。

 

8.开启Mysql数据库。此时会提示输入密码,此处密码为strongs

 

创建名为hive的数据库,编码格式为latin1,用于存储元数据。

 

查看数据库是否创建成功。

 

下面,输入exit退出Mysql

 

9.执行测试。由于Hive对数据的处理,依赖MapReduce计算模型,所以需要保证Hadoop相关进程已经启动。

 

输入jps,查看进程状态。若Hadoop相关进程未启动,则需启动Hadoop

 

 

启动Hadoop后,在终端命令行界面,直接输入hive便可启动Hive命令行模式。

 

输入HQL语句查询数据库,测试Hive是否可以正常使用。

 

至此Hive安装完毕。

 

Hive基本操作

一、实验环境准备

1.首先在Linux本地新建/data/hive2目录。

2.切换到/data/hive2目录下,使用wget命令,下载http://192.168.1.150:60000/allfiles/hive2cat_groupgoods文件。

 

3.输入jps检查Hadoop相关进程,是否已经启动。若未启动,切换到/apps/hadoop/sbin目录下,启动Hadoop

 

4.开启Hive,首先,需要保证Mysql启动。执行以下命令,查看Mysql的运行状态。(密码:zhangyu

 

输出显示Mysql未启动。执行以下启动命令。

然后切换到/apps/hive/bin目录下,开启Hive。

 

二、Hive数据仓库的操作

1.Hive中创建一个数据仓库,名为DB

 

2.以上简单创建了一个DB库,但是这条sql可以更进一步的优化,我们可以加上if not exists

 

3.查看数据仓库DB的信息及路径。

 

4.删除名为DB的数据仓库。

 

三、Hive数据表的操作

 

Hive的数据表分为两种:内部表和外部表。

 

Hive创建内部表时,会将数据移动到数据仓库指向的路径;若创建外部表,仅记录数据所在的路径, 不对数据的位置做任何改变。在删除表的时候,内部表的元数据和数据会被一起删除, 而外部表只删除元数据,不删除数据。这样外部表相对来说更加安全些,数据组织也更加灵活,方便共享源数据,生产中常使用外部表。

 

下面详细介绍对表操作的命令及使用方法:

 

即将创建的表,表名不能和已有表名重复,否则会报错,现在我们show tables一下,查看已存在的表。

 

现在库中没有表。

 

  1. 创建一个名为cat的内部表,有两个字段为cat_idcat_name,字符类型为string

查看是否创建成功

 

下面我们再次创建一个与刚才表名相同的表,看一下报错。

提示错误,该表已经存在!说明表与库一样,名称不能重复,解决方法是加入if not exists

 

  1. 创建一个外部表,表名为cat2,有两个字段为cat_idcat_name,字符类型为string

查看是否创建成功。

 

  1. 修改cat表的表结构。对cat表添加两个字段group_idcat_code

使用desc命令查看一下加完字段后的cat表结构 。

 

  1. 修改cat2表的表名。把cat2表重命名为cat3

 

  1. 删除名为cat3的表并查看。

 

  1. 创建与已知表相同结构的表,创建一个与cat表结构相同的表,名为cat4,这里要用到like关键字。

创建完成并查看结果。

 

四、Hive中数据的导入导出

 

以下介绍四种常见的数据导入方式:

 

1.从本地文件系统中导入数据到Hive表。

 

首先,在Hive中创建一个cat_group表,包含group_idgroup_name两个字段,字符类型为string,以“\t”为分隔符,并查看结果。

 

然后,将Linux本地/data/hive2目录下的cat_group文件导入到Hive中的cat_group表中。

 

通过select语句查看cat_group表中是否成功导入数据,由于数据量大,使用limit关键字限制输出10条记录。

 

2.HDFS上的数据导入到Hive中。

 

首先,另外开启一个操作窗口,在HDFS上创建/myhive2目录。

然后,将本地/data/hive2/下的cat_group表上传到HDFS/myhive2上,并查看是否创建成功。

 

接着,在Hive中创建名为cat_group1的表

最后,将HDFS/myhive2中的表cat_group导入到Hive中的cat_group1表中 ,并查看结果。

 

3.从别的表中查询出相应的数据并导入到Hive中。

 

首先在Hive中创建一个名为cat_group2的表。

用下面两种方式将cat_group1表中的数据导入到cat_group2表中。

 

 

 

导入完成后,用select语句查询cat_group2表。

 

4.在创建表的时候从别的表中查询出相应数据并插入到所创建的表中。

 

Hive中创建表cat_group3并直接从cat_group2中获得数据

 

创建并导入完成,用select语句查询实验结果。

 

五、三种常见的数据导出方式

 

1.导出到本地文件系统。

 

首先,在Linux本地新建/data/hive2/out目录。

并将Hive中的cat_group表导出到本地文件系统/data/hive2/out中。

 

注意:方法和导入数据到Hive不一样,不能用insert into来将数据导出。

 

导出完成后,在Linux本地切换到/data/hive2/out目录,通过cat命令查询导出文件的内容。

 

 

通过上图可以看到导出的数据,字段之间没有分割开,所以我们使用下面的方式,将输出字段以\t”键分割。

 

通过cat命令查询/data/hive2/out目录下的导出文件。

 

2.Hive中数据导出到HDFS

 

HDFS上创建/myhive2/out目录。

并将Hive中的表cat_group中的数据导入到HDFS/myhive2/out目录里。

 

导入完成后,在HDFS上的/myhive2/out目录下查看结果

 

3.导出到Hive的另一个表中。

 

Hive中表cat_group中的数据导入到cat_group4中(两表字段及字符类型相同)。

 

首先在Hive中创建一个表cat_group4,有group_idgroup_name两个字段,字符类型为string,以‘\t’为分隔符。

 

然后将cat_group中的数据导入到cat_group4中。

 

导入完成后,查看cat_group4表中数据。

 

六,Hive分区表的操作

 

Hive中创建分区表没有什么复杂的分区类型(范围分区、列表分区、hash 分区,混合分区等)。分区列也不是表中的一个实际的字段,而是一个或者多个伪列。意思是说,在表的数据文件中实际并不保存分区列的信息与数据。

 

创建表分区,在Hive中创建一个分区表goods,包含goods_idgoods_status两个字段,字符类型为string,分区为cat_id,字符类型为string,以“\t“为分隔符。

 

查看表goods表结构。

 

2.向分区表插入数据,将本地/data/hive2下的表goods中数据,插入到分区表goods中。

 

首先,在Hive中创建一个非分区表goods_1表,用于存储本地/data/hive2下的表goods中数据。

 

将本地/data/hive2下的表goods中数据导入到Hive中的goods_1表中。

 

再将表goods_1中的数据导入到分区表goods中。

 

 

插入数据完成后,用select语句查看实验结果。

 

4.查看表goods中的分区。

 

修改表分区,将分区表goods中的分区列cat_id=52052改为cat_id=52051,并查看修改后的分区名。

 

6.删除表分区。

 

在删除goods分区表之前,先将goods表备份出一个goods_2表。

 

删除goods表中的cat_id分区。

 

七,Hive桶的操作

2.创建桶

 

创建一个名为goods_t的表,包含两个字段goods_idgoods_status,字符类型都为string,按cat_id string做分区,按goods_status列聚类和goods_id列排序,划分成两个桶

 

设置环境变量set hive.enforce.bucketing=ture

3.goods_t表中插入goods_2表中的数据。

 

查看结果

 

至此,实验结束!

 

Hive查询

首先检查Hadoop相关进程,是否已经启动。若未启动,切换到/apps/hadoop/sbin目录下,启动Hadoop

 

然后执行启动以下命令,开启Mysql库,用于存放Hive的元数据。(密码:zhangyu

 

启动Mysql后,在终端命令行界面,直接输入Hive命令,启动Hive命令行。

2.打开一个新的命令行,切换到/data/hive3目录下,如不存在需提前创建hive3文件夹。

 

使用wget命令,下载http://192.168.1.150:60000/allfiles/hive3中的文件。

 

3.hive命令行,创建买家行为日志表,名为buyer_log,包含IDid) 、用户IDbuyer_id) 、时间(dt) 、 地点(ip) 、操作类型(opt_type5个字段,字符类型为string,以'\t'为分隔符。

 

创建买家收藏表,名为buyer_favorite,用户IDbuyer_id) 、商品IDgoods_id)、时间(dt3个字段,字符类型为string,以'\t'为分隔符。

 

4.将本地/data/hive3/下的表buyer_log中数据导入到Hive中的buyer_log表中,表buyer_favorite中数据导入到Hive中的buyer_favorite表中。

 

普通查询,例如查询buyer_log表中全部字段,数据量大时应避免查询全部数据。(limit 10为限制查询10条数据)

 

别名查询,例如查询表buyer_logidip字段,当多表连接字段较多时,常常使用别名。(limit 10为限制查询10条数据)

 

7限定查询(where),例如查询buyer_log表中opt_type=1的用户ID(buyer_id)。(limit 10为限制查询10条数据)

 

两表或多表联合查询,例如通过用户ID(buyer_id)连接表buyer_log和表buyer_favorite,查询表buyer_logdt字段和表buyer_favoritegoods_id字段,多表联合查询可以按需求查询多个表中不同字段,生产中常用limit 10为限制查询10条数据。

 

 

9.多表插入,多表插入指的是在同一条语句中,把读取的同一份数据插入到不同的表中。只需要扫描一遍数据即可完成所有表的插入操作, 效率很高。

 

例:我们使用买家行为日志buyer_log表作为插入表,创建buyer_log1buyer_log2两表作为被插入表。

 

创建buyer_log1buyer_log2

 

10.buyer_log表中数据插入到buyer_log1buyer_log2

 

11.多目录输出文件,将同一文件输出到本地不同文件夹中,提高效率,可以避免重复操作from ,将买家行为日志buyer_log表导入到本地‘/data/hive3/out’和‘data/hive3/out1’中

 

在本地切换到/data/hive3中,查询输出文件。

 

12.使用shell脚本调用Hive查询语句。

 

切换目录到本地目录/data/hive3‘下,使用vim编写一个shell脚本,名为sh1,使其功能实现查询Hive中所有表。

sh1中,输入以下脚本,并保存退出

 

13.编写完成,赋予其执行权限。

14.执行shell脚本 。

 

采用shell脚本来执行一些Hive查询语句可以简化很多的开发工作,可以利用Linux自身的一些工具,实现定时的job任务。

三.实验心得

 

通过本次实验,我系统地掌握了Hive的安装部署、基本操作和查询功能,包括内部表与外部表的区别、数据的导入导出、分区表与分桶表的应用,以及Hive SQL的多种查询方式。实验过程中,我不仅熟悉了HiveMySQLHadoop的集成配置,还学会了通过Shell脚本调用Hive命令,提高了自动化操作的能力。这次实践让我深刻认识到Hive在大数据处理中的高效性和灵活性,同时也增强了解决实际问题的信心,为今后深入学习大数据技术打下了坚实基础。

 

 

posted on 2025-06-11 08:51  淮竹i  阅读(12)  评论(0)    收藏  举报