Hive(下)-Hive实战

Hive实战:词频统计 文章目录一、实战概述二、提出任务三、完成任务(一)准备数据文件1、在虚拟机上创建文本文件2、将文本文件上传到HDFS指定目录(二)实现步骤1、启动Hive Metastore服务2、启动Hive客户端3、基于HDFS文件创建外部表4、查询单词表,所有单词成一列5、基于查询结果创建视图6、基于视图进行分组统计7、基于嵌套查询一步搞定 一、实战概述 在本次实战中,我们任务是在大数据环境下使用Hive进行词频统计。首先,我们在master虚拟机上创建了一个名为test.txt的文本文件,内容包含一些关键词的句 阅读详情

1、Hive操作演示

1.1 内部表

1.1.1 创建表并加载数据

第一步   启动HDFS、YARN和Hive,启动完毕后创建Hive数据库

hive>create database hive;

hive>show databases;

hive>use hive;

clip_image002

第二步   创建内部表

由于Hive使用了类似SQL的语法,所以创建内部表的语句相对SQL只增加了行和字段分隔符。

hive>CREATE TABLE SOGOUQ2(DT STRING,WEBSESSION STRING,WORD STRING,S_SEQ INT,C_SEQ INT,WEBSITE STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' ;

clip_image004

第三步   加载数据

数据文件可以从HDFS或者本地操作系统加载到表中,如果加载HDFS文件使用LOAD DATA INPATH,而加载本地操作系统文件使用LOAD DATA LOCAL INPATH命令。HIVE表保存的默认路径在${HIVE_HOME}/conf/hive-site.xml配置文件的hive.metastore.warehouse.dir属性指定,当创建表时会在hive.metastore.warehouse.dir指向的目录下以表名创建一个文件夹,在本演示中表默认指向的是/user/hive/warehouse。

数据文件在本地操作系统将复制到表对应的目录中,而数据文件在HDFS中,数据文件将移动到表对应的目录中,原来的路径将不存在该文件。在这里使用《Spark编程模型(上)--概念及Shell试验》中在本地操作系统中的搜狗日志数据文件:

hive>LOAD DATA LOCAL INPATH '/home/hadoop/upload/sogou/SogouQ2.txt' INTO TABLE SOGOUQ2;

clip_image006

在/user/hive/warehouse/hive.db/sogouq2目录下,可以看到SougouQ2.txt数据文件:

clip_image008

1.1.2 查询行数

可以用count关键字查询SogouQ2.txt数据行数,查询时会启动MapReduce进行计算,Map的个数一般和数据分片个数对应,在本查询中有2个Map任务(数据文件有2个Block),1个Reduce任务。

hive>select count(*) from SOGOUQ2;

clip_image010

clip_image012

1.1.3 包含baidu的数据

可以用like关键字进行模糊查询,Map的个数一般和数据分片个数对应。

hive>select count(*) from SOGOUQ2 where WEBSITE like '%baidu%';

clip_image014

1.1.4 查询结果排名第1,点击次序排第2,其中URL包含baidu的数据

hive>select count(*) from SOGOUQ2 where S_SEQ=1 and C_SEQ=2 and WEBSITE like '%baidu%';

clip_image016

clip_image018

1.2 外部表

1.2.1 创建表关联数据

第一步   在HDFS创建外部表存放数据目录

$hadoop fs -mkdir -p /class5/sogouq1

$hadoop fs -ls /class5

clip_image020

第二步   在Hive创建外部表,指定表存放目录

hive>CREATE EXTERNAL TABLE SOGOUQ1(DT STRING,WEBSESSION STRING,WORD STRING,S_SEQ INT,C_SEQ INT,WEBSITE STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' STORED AS TEXTFILE LOCATION '/class5/sogouq1';

hive>show tables;

观察一下创建表和外部表的区别,会发现创建外部表多了EXTERNAL关键字以及指定了表对应存放文件夹LOCATION ‘/class5/sogouq1’

【注】在删除表的时候,内部表将删除表的元数据和数据文件;而删除外部表的时候,仅仅删除外部表的元数据,不删除数据文件

clip_image022

第三步   加载数据文件到外部表对应的目录中

创建Hive外部表关联数据文件有两种方式,一种是把外部表数据位置直接关联到数据文件所在目录上,这种方式适合数据文件已经在HDFS存在,另外一种方式是创建表时指定外部表数据目录,随后把数据加载到该目录下。以下将以第二种方式进行演示:

$hadoop fs -copyFromLocal /home/hadoop/upload/sogou/SogouQ1.txt /class5/sogouq1/

$hadoop fs -ls /class5/sogouq1

$hadoop fs -tail /class5/sogouq1/SogouQ1.txt

clip_image024

clip_image026

1.2.2 查询行数

hive>select count(*) from SOGOUQ1;

clip_image028

clip_image030

1.2.3 显示前10行

hive>select * from SOGOUQ1 limit 10;

clip_image032

可以看出Hive会根据查询不同任务决定是否生成Job,获取前10条并没有生成Job,而是得到数据后直接进行显示。

1.2.4 查询结果排名第1,点击次序排第2的数据

hive>select count(*) from SOGOUQ1 where S_SEQ=1 and C_SEQ=2;

clip_image034

clip_image036

1.2.5 查询次数排行榜

按照session号进行归组,并按照查询次数进行排序,最终显示查询次数最多的前10条。

hive>select WEBSESSION,count(WEBSESSION) as cw from SOGOUQ1 group by WEBSESSION order by cw desc limit 10;

clip_image038

2、交易数据演示

2.1 准备数据

2.1.1 上传数据

交易数据存放在该系列配套资源的/class5/saledata目录下,在/home/hadoop/upload创建class5目录用于存放本周测试数据

$cd /home/hadoop/upload

$mkdir class5

创建新文件夹后使用,使用SSH Secure File Transfer工具上传到/home/hadoop/upload/class5目录下,如下图所示:

clip_image040

2.1.2 在Hive创建数据库和表

启动Hadoop集群,进入Hive命令行操作界面,使用如下命令创建三张数据表:

l  tbDate定义了日期的分类,将每天分别赋予所属的月份、星期、季度等属性,字段分别为日期、年月、年、月、日、周几、第几周、季度、旬、半月;

l  tbStock定义了订单表头,字段分别为订单号、交易位置、交易日期;

l  tbStockDetail文件定义了订单明细,该表和tbStock以交易号进行关联,字段分别为订单号、行号、货品、数量、金额:

hive>use hive;

hive>CREATE TABLE tbDate(dateID string,theyearmonth string,theyear string,themonth string,thedate string,theweek string,theweeks string,thequot string,thetenday string,thehalfmonth string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' ;

hive>CREATE TABLE tbStock(ordernumber STRING,locationid string,dateID string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' ;

hive>CREATE TABLE tbStockDetail(ordernumber STRING,rownum int,itemid string,qty int,price int ,amount int) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' ;

clip_image042

2.1.3 导入数据

从本地操作系统分别加载日期、交易信息和交易详细信息表数据

hive>use hive;

hive>LOAD DATA LOCAL INPATH '/home/hadoop/upload/class5/saledata/tbDate.txt' INTO TABLE tbDate;

hive>LOAD DATA LOCAL INPATH '/home/hadoop/upload/class5/saledata/tbStock.txt' INTO TABLE tbStock;

hive>LOAD DATA LOCAL INPATH '/home/hadoop/upload/class5/saledata/tbStockDetail.txt' INTO TABLE tbStockDetail;

clip_image044

查看HDFS中相关SALEDATA数据库中增加了三个文件夹,分别对应三个表:

clip_image046

2.2 计算所有订单每年的总金额

2.2.1 算法分析

要计算所有订单每年的总金额,首先需要获取所有订单的订单号、订单日期和订单金信息,然后把这些信息和日期表进行关联,获取年份信息,最后根据这四个列按年份归组统计获取所有订单每年的总金额。

2.2.2 执行HSQL语句

hive>use hive;

hive>select c.theyear, sum(b.amount) from tbStock a,tbStockDetail b,tbDate c where a.ordernumber=b.ordernumber and a.dateid=c.dateid group by c.theyear order by c.theyear;

clip_image048

运行过程中创建两个Job,分别为job_1437659442092_0001和job_1437659442092_0002,运行过程如下:

clip_image050

在YARN的资源管理器界面中可以看到如下界面:

clip_image052

2.2.3 查看结果

整个计算过程使用了91.51秒,结果如下:

clip_image054

2.3 计算所有订单每年最大金额订单的销售额

2.3.1 算法分析

该算法分为两步:

1.     按照日期和订单号进行归组计算,获取所有订单每天的销售数据;

2.     把第一步获取的数据和日期表进行关联获取的年份信息,然后按照年份进行归组,使用Max函数,获取所有订单每年最大金额订单的销售额。

2.3.2 执行HSQL语句

//所有订单每年最大金额订单的销售额

//第一步:

hive>use hive;

hive>select a.dateid,a.ordernumber,sum(b.amount) as sumofamount from tbStock a,tbStockDetail b where a.ordernumber=b.ordernumber group by a.dateid,a.ordernumber;

//第二步:

hive>select c.theyear,max(d.sumofamount) from tbDate c,(select a.dateid,a.ordernumber,sum(b.amount) as sumofamount from tbStock a,tbStockDetail b where a.ordernumber=b.ordernumber group by a.dateid,a.ordernumber) d  where c.dateid=d.dateid group by c.theyear sort by c.theyear;

clip_image056

运行过程中创建两个Job,分别为job_1437659442092_0004和job_1437659442092_0005,运行过程如下:

clip_image058

clip_image060

在YARN的资源管理器界面中可以看到如下界面:

clip_image062

其中job_1437659442092_0005运行的具体情况如下:

clip_image064

2.3.3 查看结果

整个计算过程使用了285秒,结果如下:

clip_image066

2.4 计算其他金额

2.4.1 所有订单中季度销售额前10位

//所有订单中季度销售额前10位

hive>use hive;

hive>select c.theyear,c.thequot,sum(b.amount) as sumofamount from tbStock a,tbStockDetail b,tbDate c where a.ordernumber=b.ordernumber and a.dateid=c.dateid group by c.theyear,c.thequot order by sumofamount desc limit 10;

2008    1    5252819

2007    4    4613093

2007    1    4446088

2006    1    3916638

2008    2    3886470

2007    3    3870558

2007    2    3782235

2006    4    3691314

2005    1    3592007

2005    3    3304243

clip_image068

clip_image070

2.4.2 列出销售金额在100000以上的单据

//列出销售金额在100000以上的单据

hive>use hive;

hive>select a.ordernumber,sum(b.amount) as sumofamount from tbStock a,tbStockDetail b where a.ordernumber=b.ordernumber group by a.ordernumber having sumofamount>100000;

clip_image072

clip_image074

2.4.3 所有订单中每年最畅销货品

//所有订单中每年最畅销货品

第一步:

hive>use hive;

hive>select c.theyear,b.itemid,sum(b.amount) as sumofamount from tbStock a,tbStockDetail b,tbDate c where a.ordernumber=b.ordernumber and

a.dateid=c.dateid group by c.theyear,b.itemid;

第二步:

hive>select d.theyear,max(d.sumofamount) as maxofamount from (select c.theyear,b.itemid,sum(b.amount) as sumofamount from tbStock a,tbStockDetail b,tbDate c where a.ordernumber=b.ordernumber and a.dateid=c.dateid group by c.theyear,b.itemid) d group by d.theyear ;

第三步:

hive>select distinct  e.theyear,e.itemid,f.maxofamount from (select c.theyear,b.itemid,sum(b.amount) as sumofamount from tbStock a,tbStockDetail b,tbDate c where a.ordernumber=b.ordernumber and a.dateid=c.dateid group by c.theyear,b.itemid) e , (select d.theyear,max(d.sumofamount) as maxofamount from (select c.theyear,b.itemid,sum(b.amount) as sumofamount from tbStock a,tbStockDetail b,tbDate c where a.ordernumber=b.ordernumber and a.dateid=c.dateid group by c.theyear,b.itemid) d group by d.theyear) f where e.theyear=f.theyear and e.sumofamount=f.maxofamount order by e.theyear;

2004    JY424420810101   53374

2005    24124118880102   56569

2006    JY425468460101   113684

2007    JY425468460101   70226

2008    E2628204040101   97981

2009    YL327439080102   30029

2010    SQ429425090101  4494

clip_image076

clip_image078

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。如果觉得还有帮助的话,可以点一下右下角的 【推荐】,希望能够持续的为大家带来好的技术文章!想跟我一起进步么?那就 【关注】我吧。
Hive分区表实战 - 单分区字段 在本Hive分区表管理实战中,我们通过一系列实际操作演示了如何有效地利用分区功能来组织和查询大规模数据。首先,创建了一个名为book的内部分区表,其结构包含id与name字段,并根据country字段进行分区。接下来,准备并加载了不同国家(中国和英国)书籍的数据文件到对应的分区目录中。为了展示分区灵活性,我们还模拟了手动创建新分区(日本),上传数据文件并通过命令将新分区纳入表的元数据管理中。此外,实战还涉及分区的删除、重命名等操作,直观展示了Hive如何同步更新分区状态至HDFS存储及元数据层面。 阅读详情

相关推荐

HIVE系列(5)HIVE 数据源文件 本地文件、hdfs文件加载,hql 统计电商tb 每年订单最畅销商品

HIVE数据文件的加载方式 1、本地文件加载 2、hdfs文件加载 每年订单中销售最畅销的商品:结果         1\数据源 tbDate.txt 日期,年月,年,月,日,  周三,第一周,第一季度,上旬,上半月 2003-1-1,200301,2003,1,1,3,1,1,1,1 2003-1-2,200301,2003,1,2,4,1,1,1,1 2003

大模型与Agent智能体 2119

2.大数据技术之_第三章到第五章:SparkSQL数据源

第3章 SparkSQL数据源 3.1 通用加载/保存方法 3.1.1 手动指定选项 Spark SQL的DataFrame接口支持多种数据源的操作。一个DataFrame可以进行RDDs方式的操作,也可以被注册为临时表。把DataFrame注册为临时表之后,就可以对该DataFrame执行SQL查询。 Spark SQL的默认数据源为Parquet格式。数据源为Parquet文件时,Spark SQL可以方便的执行所有的操作。修改配置项spark.sql.sources.default,可修改默认

qq_37873221的博客 455

《Hive零基础从入门到实战》连载目录

前言 本文是Hive零基础从入门到实战系列的传送门,会持续更新直至本系列完结~ (一)入门篇 01. 环境搭建 02. Linux系统简单操作(上) 03. Linux系统简单操作(中) 04. Linux系统简单操作(下) 05. Hive常用数据类型 06. HiveQL:数据库操作 07. HiveQL:表操作(上) 08. HiveQL:表操作(下) 09. 如...

风影楼的博客 5920

电商交易数据分析(hive版)

05年项目使用spark+hadoop,最近公司分享给小伙伴们,就整理出文档供大家学习交流。整理hdfs+hive+spark stream+spark sql实战系列,有些数据是网上搜索下载的,同时整理时也参考其他博文以及《spark实战》

架构师老狼 2870

Hive编程从入门到精通:全面实战手册

Hive是一个建立在Hadoop之上的数据仓库工具,用于将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。Hive提供了丰富的SQL方言(HiveQL),可以让熟悉SQL的开发者轻松进行大数据分析。Hive适用于数据仓库的建立和大数据处理,特别在日志数据的分析、商业智能(BI)分析、数据挖掘等方面有广泛的应用。Hive的元数据存储是整个架构中的核心部分,它负责存储表结构定义、列的数据类型、表分区信息以及表的数据位置等关键信息。

weixin_42509720的博客 1023

【免费】最新区块链钱包和私钥的助记词碰撞器,使用python开发

最新钱包私钥助记词碰撞器,搏一搏单车变摩托!

weixin_48529185的博客 1万+

Spark入门实战系列--6.SparkSQL(上)--SparkSQL简介

1、SparkSQL的发展历程 1.1 Hive and Shark SparkSQL的前身是Shark,给熟悉RDBMS但又不理解MapReduce的技术人员提供快速上手的工具,Hive应运而生,它是当时唯一运行在Hadoop上的SQL-on-Hadoop工具。但是MapReduce计算过程中大量的中间磁盘落地过程消耗了大量的I/O,降低的运行效率,为了提高SQL-on-Hadoop的效率,

yyy 1212

【论文笔记】Reaching agreement in the presence of faults (EIG)

1 问题定义 2 交互一致性 3 单点故障 m=1 n=4 4 多点故障(n>=3m+1) 计算过程 m=2 n=7 5 n<3m+1不能达成协定 6 带认证的算法 7 总结 这篇论文在1980年发表,是1982年著名的拜占庭将军问题论文的前身。作者Leslie Lamport是2013图灵奖得主,两篇论文引用次数分别为5000+和2000+。该论文提出的算法现在被...

zjwreal 2995

SparkSql实现小案例——代码部分(一)

一、案例介绍

weixin_45568892的博客 843

ThingsBoard实战指南:RPC命令下发与设备交互详解

本文深入解析了ThingsBoard平台中RPC命令下发的核心机制与实战应用。通过对比客户端与服务端RPC模式,详细阐述了从仪表盘控件配置到设备端Python代码响应的完整双向交互流程,并提供了常见问题排查与进阶优化技巧,帮助开发者构建可靠、实时的物联网设备控制系统。

weixin_29168153的博客 213

Windows平台高效BLE调试工具开发指南

本文为开发者提供了一份在Windows平台上开发高效BLE调试工具的详细指南。文章深入探讨了使用32feet.NET库进行蓝牙低功耗设备扫描、连接、数据通信及进阶功能开发的实战经验,旨在帮助开发者打造功能自定义、性能优化的专属调试利器,显著提升物联网和嵌入式设备的调试效率。

weixin_29201933的博客 260

hive实战

本文转自:http://www.cnblogs.com/xuqiang/archive/2011/06/15/2081796.html   1. 安装hive 2. hive实战 3. hive存储模型 4. 深入hql查询语言 5. 参考资料及代码下载  <1>. 安装hive  下载hive,下载地址http://mirror.bjtu.edu.cn/a...

有时间就有历史,有历史就有传奇。 470

echarts 生成中国陕西省份(或其他省份)的地图,大屏使用

效果图: 一、首先第一步需要下载echarts和获取到陕西身份的地图信息。 1.下载echarts链接(官网): Apache ECharts 2.生成指定省份的地图数据信息,数据可以在阿里云获取。 DataV.GeoAtlas地理小工具系列 如图,点击左圈需要的省份,这里我选择的是陕西省,然后点击右圈复制下载链接,得到一个json格式的数据,可以在json转换网站转成js格式。 Json在线解析格式化-Json在线校验Json格式化压缩-Jsons在线工具 转成js格.

PrimaryColor 3890

HIVE 原理总结及实战项目

目录 课程大纲(HIVE增强) 3 1. Hive基本概念 4 1.1 Hive简介 4 1.1.1 什么是Hive 4 1.1.2 为什么使用Hive 4 1.1.3 Hive的特点 4 1.2 Hive架构 5 1.2.1 架构图 5 1.2.2 基本组成 5 1.2.3 各组件的基本功能 5 1.3 Hive与Hadoop的关系 6 1.4 Hive与传统数据库对比 6 1.5 Hive的数...

LouisLee 的博客 2517

EFR32BG22 Thunderboard开发板 使用SPI 读取加速度计

Simplicity Studio v5 创建Silicon Labs蓝牙SoC EFR32BG22 Thunderboard模块的加速度计工程,模块上有一个ICM-20648 6轴运动跟踪设备,集成3轴加速度计和3轴陀螺仪功能,使用SPI接口跟EFR32BG22芯片连接。 我尽量以图片的形式展示(少打字): 将EFR32BG22的Thunderboard模块通过USB线插入到电脑,打开Simplicity Studio v5软件。 下面看重点: 点击搜索到的IO Stream: USART,点击Ins

qq_25727979的博客 1496

A B C三个气象站的小波分析结果解读

在小波分析的过程中,信号的不同频率分量会在不同的尺度上显现,而纵轴上的数值表示信号在相应尺度上的强度或能量。2. **小波方差的横轴(水平轴)**:横轴上的尺度表示用于分析的小波函数的尺度。1. **共同趋势:** 在所有三个点的小波方差图中,随着尺度的增加,方差逐渐增大,尤其是在较大的时间尺度上。3. **尺度30的特殊性:** 在所有点的小波方差图中,尺度30似乎是一个特殊的点,对应着一个较长的时间尺度上的波动或变化。2. **方差的大小:** 方差的大小反映了在相应尺度下信号的波动强度。

weixin_44259522的博客 861

hive项目实战参考

hive项目实战参考

蒯厅博客 433

【微信小程序】微信小程序 manifest.json 配置 ES6 转 ES5 开关:3步让你的代码兼容性更强

ES6(ECMAScript 6)是 JavaScript 的最新标准,引入了许多新的语法和特性,如箭头函数、模板字符串、解构赋值等。然而,不是所有的环境都支持 ES6,特别是旧版本的浏览器和一些特定的运行环境。为了确保代码的兼容性,我们需要将 ES6 代码转换为 ES5 代码。通过本文的详细讲解,相信你已经学会了如何在文件中配置微信小程序的 ES6 转 ES5 开关。这个小小的配置步骤能够显著提高代码的兼容性和稳定性。如果你有任何问题或需要进一步的帮助,欢迎随时留言交流。

java专栏 1362

Hive实战

Hive实战训练 准备工作: 1)目标表分析 创建原始数据表:gulivideo_ori,gulivideo_user_ori, 创建最终表:gulivideo_orc,gulivideo_user_orc 2)创建原始数据表: create table gulivideo_ori( videoId string,uploader string,age int,category array<string>,length int,views int,rate float,ratings int

yingzi的技术博客 418

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

本地电脑Hive语句实战

Hive是大数据平台的查询语句,其语法基本与SQL类似,小编在自己笔记本电脑上VirtualBox虚拟机上通过docker安装了一个docker-hive-on-tez容器,就可以练习了...

咔咔响 561

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

大数据基础之Hive(五)——Hive实战(统计电影排名的各种问题)

Hive实现电影排名、热度等数据分析和统计

Duktig的博客 4167

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

上一篇: Spring Boot 应用是如何找到Redis服务的
下一篇: 如何判断Linux是32位还是64位
程序员椰子橙
博客等级 码龄9年 46粉丝 163原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值