大数据技术与应用实验作业
一、 实验目的
1.了解Hive的安装部署
2.了解Hive的工作原理
1.了解Hive的基本操作
2.了解Hive的外部表与普通表的区别
1.了解Hive的SQL基本语法
2.掌握Hive多种查询方式
二、实验过程
- 首先在Linux本地,新建/data/hive1目录,用于存放所需文件。
切换目录到/data/hive1下,使用wget命令,下载hive所需安装包hive-1.1.0-cdh5.4.5.tar.gz以及mysql-connector-java-5.1.26-bin.jar。
- 将/data/hive1目录下的hive-1.1.0-cdh5.4.5.tar.gz,解压缩到/apps目录下。
再切换到/apps目录下,将/apps/hive-1.1.0-cdh5.4.5,重命名为hive。
- 使用vim打开用户环境变量。
将Hive的bin目录,添加到用户环境变量PATH中,然后保存退出。
执行source命令,使Hive环境变量生效。
- 由于Hive需要将元数据,存储到Mysql中。所以需要拷贝/data/hive1目录下的mysql-connector-java-5.1.26-bin.jar到hive的lib目录下。
- 下面配置Hive,切换到/apps/hive/conf目录下,并创建Hive的配置文件hive-site.xml。
使用vim打开hive-site.xml文件。并将下列配置项,添加到hive-site.xml文件中
6.另外,还需要告诉Hive,Hadoop的环境配置。所以我们需要修改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/hive2中cat_group和goods文件。
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一下,查看已存在的表。
现在库中没有表。
- 创建一个名为cat的内部表,有两个字段为cat_id和cat_name,字符类型为string。
查看是否创建成功
下面我们再次创建一个与刚才表名相同的表,看一下报错。
提示错误,该表已经存在!说明表与库一样,名称不能重复,解决方法是加入if not exists。
- 创建一个外部表,表名为cat2,有两个字段为cat_id和cat_name,字符类型为string。
查看是否创建成功。
- 修改cat表的表结构。对cat表添加两个字段group_id和cat_code。
使用desc命令查看一下加完字段后的cat表结构 。
- 修改cat2表的表名。把cat2表重命名为cat3 。
- 删除名为cat3的表并查看。
- 创建与已知表相同结构的表,创建一个与cat表结构相同的表,名为cat4,这里要用到like关键字。
创建完成并查看结果。
四、Hive中数据的导入导出
以下介绍四种常见的数据导入方式:
1.从本地文件系统中导入数据到Hive表。
首先,在Hive中创建一个cat_group表,包含group_id和group_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_id和group_name两个字段,字符类型为string,以‘\t’为分隔符。
然后将cat_group中的数据导入到cat_group4中。
导入完成后,查看cat_group4表中数据。
六,Hive分区表的操作
Hive中创建分区表没有什么复杂的分区类型(范围分区、列表分区、hash 分区,混合分区等)。分区列也不是表中的一个实际的字段,而是一个或者多个伪列。意思是说,在表的数据文件中实际并不保存分区列的信息与数据。
创建表分区,在Hive中创建一个分区表goods,包含goods_id和goods_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_id和goods_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,包含ID(id) 、用户ID(buyer_id) 、时间(dt) 、 地点(ip) 、操作类型(opt_type)5个字段,字符类型为string,以'\t'为分隔符。
创建买家收藏表,名为buyer_favorite,用户ID(buyer_id) 、商品ID(goods_id)、时间(dt)3个字段,字符类型为string,以'\t'为分隔符。
4.将本地/data/hive3/下的表buyer_log中数据导入到Hive中的buyer_log表中,表buyer_favorite中数据导入到Hive中的buyer_favorite表中。
普通查询,例如查询buyer_log表中全部字段,数据量大时应避免查询全部数据。(limit 10为限制查询10条数据)
别名查询,例如查询表buyer_log中id和ip字段,当多表连接字段较多时,常常使用别名。(limit 10为限制查询10条数据)
7限定查询(where),例如查询buyer_log表中opt_type=1的用户ID(buyer_id)。(limit 10为限制查询10条数据)
两表或多表联合查询,例如通过用户ID(buyer_id)连接表buyer_log和表buyer_favorite,查询表buyer_log的dt字段和表buyer_favorite的goods_id字段,多表联合查询可以按需求查询多个表中不同字段,生产中常用limit 10为限制查询10条数据。
9.多表插入,多表插入指的是在同一条语句中,把读取的同一份数据插入到不同的表中。只需要扫描一遍数据即可完成所有表的插入操作, 效率很高。
例:我们使用买家行为日志buyer_log表作为插入表,创建buyer_log1和buyer_log2两表作为被插入表。
创建buyer_log1和buyer_log2。
10.将buyer_log表中数据插入到buyer_log1和buyer_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的多种查询方式。实验过程中,我不仅熟悉了Hive与MySQL、Hadoop的集成配置,还学会了通过Shell脚本调用Hive命令,提高了自动化操作的能力。这次实践让我深刻认识到Hive在大数据处理中的高效性和灵活性,同时也增强了解决实际问题的信心,为今后深入学习大数据技术打下了坚实基础。
浙公网安备 33010602011771号