<Zhuuu_ZZ>HIVE(十三)性能调优

本文介绍了Hive性能调优的各种工具和方法,包括EXPLAIN和ANALYZE工具的使用,以及分区表、桶表、索引和压缩算法等优化设计。还详细探讨了Job优化策略,例如本地模式、JVM重用、并行执行等,以及查询优化技巧。

一 Hive性能调优工具 - EXPLAIN

  • EXPLAIN:显示查询语句的执行计划,但不运行
  • 语法
EXPLAIN [EXTENDED|DEPENDENCY|AUTHORIZATION] hive_query
  • EXTENDED
    • 提供执行计划关于操作的额外信息,比如文件路径
  • DEPENDENCY
    • 提供JSON格式输出,包括查询所依赖的表和分区列表
  • AUTHORIZATION
    • 列出所有需要授权的实体,包括查询的输入输出和授权失败
  • 通过工具生成可视化执行计划
    在这里插入图片描述
explain select * from employee_partition;

在这里插入图片描述

二 Hive性能调优工具 - ANALYZE

  • ANALYZE:分析表数据,用于执行计划选择的参考
    • 收集表的统计信息,如行数、最大值等
    • 使用时调用该信息加速查询
  • 语法
analyze table employee compute statistics;

在这里插入图片描述

analyze table employee_partition 
partition(country="china",add="LiaoNing") compute statisti
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <!-- 指定Hive元数据要访问的地址 --> <property> <name>hive.metastore.uris</name> <value>thrift://master:9083</value> <description>Thrift URI for the remote metastore. Used by metastore client to connect to remote metastore.</description> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value> </property> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://master:3306/hive?createDatabaseIfNotExist=true&useSSL=false&useUnicode=true&characterEncoding=UTF-8</value> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>hive</value> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>hive</value> </property> <property> <name>hive.metastore.warehouse.dir</name> <value>/user/hive/warehouse</value> </property> <property> <name>hive.exec.local.scratchdir</name> <value>/usr/local/src/hive</value> </property> <property> <name>hive.exec.scratchdir</name> <value>/tmp/hive</value> </property> <property> <name>hive.downloaded.resources.dir</name> <value>/usr/local/src/hive</value> </property> <property> <name>hive.querylog.location</name> <value>/usr/local/src/hive</value> </property> <property> <name>hive.server2.logging.operation.log.location</name> <value>/usr/local/src/hive</value> </property> <property> <name>hive.server2.thrift.bind.host</name> <value>master</value> </property> <property> <name>hive.metastore.enent.db.notification.api.auth</name> <value>false</value> </property> <property> <name>hive.cli.print.header</name> <value>true</value> </property> <property> <name>hive.cli.encoding</name> <value>UTF-8</value> <description>Character-set encoding for various CLI output data such as console output, logs, reports.</description> </property> <property> <name>hive.charset</name> <value>utf8</value> <description>The character set encoding to use for data read/write operations.</description> </property> </configuration>
最新发布
07-16
### 配置 Hive Metastore 使用 MySQL 数据库 Hive 的元数据信息默认存储在内置的 Derby 数据库中,但这种方式仅适用于单机模式。为了支持多用户访问和高可用性,通常会将 Hive Metastore 配置为使用外部数据库,如 MySQL。 #### 1. 安装并配置 MySQL 数据库 首先确保已经安装了 MySQL 数据库,并创建了一个用于 Hive Metastore 的数据库实例。例如: ```sql CREATE DATABASE myhive; ``` 同时创建一个用于连接该数据库的用户,并授权访问权限: ```sql CREATE USER 'hiveuser'@'%' IDENTIFIED BY 'hivepassword'; GRANT ALL PRIVILEGES ON myhive.* TO 'hiveuser'@'%'; FLUSH PRIVILEGES; ``` #### 2. 配置 Hive 使用 MySQL 数据库 接下来需要编辑 `hive-site.xml` 文件,配置 Hive 连接 MySQL 所需的相关参数。 ```xml <configuration> <!-- JDBC 驱动类 --> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.cj.jdbc.Driver</value> </property> <!-- MySQL 数据库连接 URL --> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://192.168.100.1:3306/myhive?ssl=false&serverTimezone=UTC</value> </property> <!-- 数据库用户名 --> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>hiveuser</value> </property> <!-- 数据库密码 --> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>hivepassword</value> </property> <!-- 设置 Hive 仓库目录 --> <property> <name>hive.metastore.warehouse.dir</name> <value>/user/hive/warehouse</value> </property> <!-- 启用远程 Metastore 服务 --> <property> <name>hive.metastore.uris</name> <value>thrift://192.168.100.1:9083</value> <description>Thrift URI for the remote metastore service</description> </property> </configuration> ``` 上述配置中,`javax.jdo.option.ConnectionURL` 中的 IP 地址应指向 MySQL 数据库所在的服务器地址,端口保持为 MySQL 默认的 `3306`。此外,`hive.metastore.uris` 参数用于指定远程 Metastore 服务的地址,以便其他 Hive 客户端可以通过 Thrift 协议访问元数据[^4]。 #### 3. 安装 MySQL JDBC 驱动 确保将 MySQL 的 JDBC 驱动(如 `mysql-connector-java-8.0.x.jar`)放置在 Hive 的 `lib` 目录下,这样 Hive 在启动时才能正确加载驱动程序来连接 MySQL 数据库。 #### 4. 初始化 Metastore 数据库 在首次配置完成后,需要初始化 Hive Metastore 数据库。可以使用以下命令来完成初始化: ```bash schematool -dbType mysql -initSchema ``` 该命令会自动在 MySQL 数据库中创建 Hive Metastore 所需的所有表结构[^2]。 #### 5. 启动 Hive Metastore 服务 如果希望以远程模式运行 Hive Metastore,则可以在一台服务器上启动 Metastore 服务: ```bash hive --service metastore ``` 默认情况下,Metastore 服务会在 `9083` 端口监听请求。其他 Hive 客户端可以通过配置 `hive.metastore.uris` 来连接此服务[^2]。 #### 6. 验证配置是否生效 启动 Hive CLI 或 Beeline 并尝试创建数据库或表,验证是否能够正常与 MySQL 数据库交互: ```sql CREATE DATABASE test_db; USE test_db; CREATE TABLE test_table(id INT, name STRING); ``` 检查 MySQL 数据库中的 `myhive` 库,确认是否已生成相应的元数据记录[^1]。 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值