Hive实战

Hive Web可视化 phpHiveAdmin
一:Hive的本质是什么?

1,Hive是分布式数据仓库,同时又是查询引擎,所以Spark SQL取代只是Hive查询引擎,在企业实际生产环境下Hive+Spark SQL是目前最为经典的数据分析组合;

2,Hive本身就是一个简单单机版本的软件,主要负责:

a)把HQL翻译成Mapper(s)-Reducer-Mapper(s)的代码;并且可能产生很多MapReduce的Job;

b)把生产的MapReduce代码及相关资源打包成Jar并发布到Hadoop集群中并且进行运行(这一切都是自动的)

3,Hive本身的架构如下所示:
这里写图片描述
Hive的体系结构可以分为以下几部分:

(1)用户接口主要有三个:CLI,Client 和 WUI。其中最常用的是CLI,Cli启动的时候,会同时启动一个Hive副本。Client是Hive的客户端,用户连接至Hive Server。在启动 Client模式的时候,需要指出Hive Server所在节点,并且在该节点启动Hive Server。 WUI是通过浏览器访问Hive。

(2)Hive将元数据存储在数据库中,如mysql、derby。Hive中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。

(3)解释器、编译器、优化器完成HQL查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在HDFS中,并在随后有MapReduce调用执行。

(4)Hive的数据存储在HDFS中,大部分的查询、计算由MapReduce完成(包含*的查询,比如select * from tbl不会生成MapRedcue任务)。

二:Hive安装和配置实战

1,我们使用Hive1.2.1版本;

2,Hive默认情况下存放数据是Derby,遗憾的是Derby是单用户,所以在生产环境下一般会采用支持多用户的数据库来进行Meta Store,且进行Master-Slaves主从读写分离和备份;我们最常使用MySQL;

3,在hive-site.xml中指定Hive数据仓库的具体存储:

<property>  

  <name>hive.metastore.warehouse.dir</name>  

  <value>/user/hive/warehouse</value>  

</property>

4,MySQL的安装和配置;

5,Hive的表有两种基本类型:一种内部表(这种表数据属于Hive本身,言外之意是如果原来的数据在HDFS的其他地方,此时数据会通过HDFS移动到Hive数据仓库所在的目录,如果删除Hive中的该表的话数据和元数据均会被删除)另外一种属于外部表(这种表数据不属于Hive数据仓库目录,但属于在HDFS中存在的数据,元数据中会表达具体数据在哪里,使用的时候和内部表是一样的,只是如果通过Hive去删除的话,此时删除的只是元数据并没有删除数据本身);

三:Hive扩展(Hive的数据存储-转载)

Hive是基于Hadoop分布式文件系统的,它的数据存储在Hadoop分布式文件系统中。Hive本身是没有专门的数据存储格式,也没有为数据建立索引,只需要在创建表的时候告诉Hive数据中的列分隔符和行分隔符,Hive就可以解析数据。所以往Hive表里面导入数据只是简单的将数据移动到表所在的目录中(如果数据是在HDFS上;但如果数据是在本地文件系统中,那么是将数据复制到表所在的目录中)。

Hive中主要包含以下几种数据模型:Table(表),External Table(外部表),Partition(分区),Bucket(桶)(本博客会专门写几篇博文来介绍分区和桶)。

1、表:Hive中的表和关系型数据库中的表在概念上很类似,每个表在HDFS中都有相应的目录用来存储表的数据,这个目录可以通过${HIVE_HOME}/conf/hive-site.xml配置文件中的 hive.metastore.warehouse.dir属性来配置,这个属性默认的值是/user/hive/warehouse(这个目录在 HDFS上),我们可以根据实际的情况来修改这个配置。如果我有一个表wyp,那么在HDFS中会创建/user/hive/warehouse/wyp 目录(这里假定hive.metastore.warehouse.dir配置为/user/hive/warehouse);wyp表所有的数据都存放在这个目录中。这个例外是外部表。

2、外部表:外部表指向已经在HDFS中存在的数据,可以创建Partition。它和内部表在元数据的组织上是相同的,而实际数据的存储则有较大的差异。内部表的创建过程和数据加载过程这两个过程可以分别独立完成,也可以在同一个语句中完成,在加载数据的过程中,实际数据会被移动到数据仓库目录中;之后对数据对访问将会直接在数据仓库目录中完成。删除表时,表中的数据和元数据将会被同时删除。而外部表只有一个过程,加载数据和创建表同时完成(CREATE EXTERNAL TABLE ……LOCATION),实际数据是存储在LOCATION后面指定的 HDFS 路径中,并不会移动到数据仓库目录中。当删除一个External Table时,仅删除该链接。

3、分区:在Hive中,表的每一个分区对应表下的相应目录,所有分区的数据都是存储在对应的目录中。比如wyp 表有dt和city两个分区,则对应dt=20131218,city=BJ对应表的目录为/user/hive/warehouse /dt=20131218/city=BJ,所有属于这个分区的数据都存放在这个目录中。

4、桶:对指定的列计算其hash,根据hash值切分数据,目的是为了并行,每一个桶对应一个文件(注意和分区的区别)。比如将wyp表id列分散至16个桶中,首先对id列的值计算hash,对应hash值为0和16的数据存储的HDFS目录为:/user /hive/warehouse/wyp/part-00000;而hash值为2的数据存储的HDFS 目录为:/user/hive/warehouse/wyp/part-00002。如果想应用很多的Map任务这样是不错的选择。

来看下Hive数据抽象结构图
这里写图片描述
从上图可以看出,表是在数据库下面,而表里面又要分区、桶、倾斜的数据和正常的数据等;分区下面也是可以建立桶的。

<think>好的,用户想寻找关于Hive的实际应用案例或操作指南,特别是实战教程或应用场景。首先,我需要整理Hive常见的应用场景,比如日志分析、数据仓库构建等。然后,结合用户提供的引用内容,看看是否有相关的操作步骤或配置可以引用。 用户提供的引用中,引用[1]提到配置Hive的环境文件,引用[2]涉及查看操作历史,引用[3]是日志配置,引用[4]是推测执行机制。这些可以作为操作指南的一部分,比如在数据清洗或查询优化时调整配置。需要将这些引用自然地融入到回答中,例如在数据清洗步骤中建议配置日志以便追踪,或者在优化查询时启用推测执行。 接下来,思考实际应用案例。比如电商用户行为分析,可以分步骤说明如何创建表、加载数据、进行聚合查询和留存分析。每个步骤需要给出具体的HiveQL示例,并注意使用正确的LaTeX格式,如变量名用$符号包裹。同时,在操作指南部分,可以引用用户提供的配置步骤,如配置hive-env.sh或日志文件,以增强实用性。 还需要生成相关问题,这些问题应该围绕Hive的优化、配置、与其他工具的整合等,帮助用户深入探索。确保问题具体且有针对性,比如性能调优方法或Hive分区表的使用场景。 最后,检查回答是否符合系统级指令:行内公式用$...$,独立公式用$$...$$,正确的中文回答,引用标识正确添加。确保所有技术细节准确,并且引用来源与内容匹配。</think>### Hive 实际应用场景与操作指南 #### 一、Hive 典型应用场景 1. **日志分析** Hive 常用于处理大规模日志数据(如网站点击流、服务器日志)。例如,通过加载日志文件到 Hive 表后,可执行聚合查询统计每日活跃用户数(DAU)或页面访问量(PV)。 ```sql SELECT date, COUNT(DISTINCT user_id) AS dau FROM user_logs GROUP BY date; ``` 2. **数据仓库构建** 在数据仓库中,Hive 支持通过分区表(Partitioned Table)和分桶表(Bucketed Table)优化查询性能。例如按日期分区存储订单数据: ```sql CREATE TABLE orders ( order_id STRING, amount DOUBLE ) PARTITIONED BY (dt STRING); ``` 3. **ETL 数据清洗** 使用 Hive SQL 对原始数据进行清洗,例如过滤无效记录、填充缺失值: ```sql INSERT OVERWRITE TABLE cleaned_data SELECT user_id, COALESCE(ip, '0.0.0.0') FROM raw_data WHERE user_id IS NOT NULL; ``` #### 二、Hive 实战操作指南 1. **环境配置与日志管理** - 配置 `hive-env.sh` 文件以设置内存参数(参考引用[1]): ```bash cd /opt/hive-2.3.3/conf cp hive-env.sh.template hive-env.sh vi hive-env.sh # 修改 HADOOP_HEAPSIZE=2048 ``` - 日志文件配置(参考引用[3]): ```bash cp hive-log4j2.properties.template hive-log4j2.properties cp hive-exec-log4j2.properties.template hive-exec-log4j2.properties ``` 2. **查询优化技巧** - **启用推测执行**:避免因个别慢任务拖累整体作业(参考引用[4]): ```sql SET mapreduce.map.speculative=true; SET mapreduce.reduce.speculative=true; ``` - **使用 Tez 引擎**:替换 MapReduce 以加速查询: ```sql SET hive.execution.engine=tez; ``` 3. **实际案例:电商用户行为分析** **步骤 1:创建用户行为表** ```sql CREATE TABLE user_actions ( user_id STRING, action_time TIMESTAMP, page_url STRING ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'; ``` **步骤 2:加载数据** ```sql LOAD DATA INPATH '/user/input/actions.log' INTO TABLE user_actions; ``` **步骤 3:统计热门页面** ```sql SELECT page_url, COUNT(*) AS visit_count FROM user_actions GROUP BY page_url ORDER BY visit_count DESC LIMIT 10; ``` **步骤 4:计算用户留存率** ```sql SELECT first_day, COUNT(DISTINCT a.user_id) AS retained_users, COUNT(DISTINCT a.user_id)/COUNT(DISTINCT b.user_id) AS retention_rate FROM ( SELECT user_id, MIN(action_time) AS first_day FROM user_actions GROUP BY user_id ) a JOIN user_actions b ON a.user_id = b.user_id WHERE DATEDIFF(b.action_time, a.first_day) = 7 GROUP BY first_day; ``` #### 三、操作历史追踪(参考引用[2]) 通过查看 `.hivehistory` 文件可回溯执行过的命令: ```bash cat /home/hadoop/.hivehistory ``` --- §§ 1. Hive 如何通过分区表提升查询性能? 2. 如何通过 Hive 实现与 HBase 的数据集成? 3. Hive 在数据倾斜场景下的优化方法有哪些? 4. Hive on Spark 的配置步骤是什么?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值