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 的配置步骤是什么?
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值