迁移数据后,hive执行sql count统计语句报错

在迁移数据后,执行Hive的SQL count统计语句时,遇到了Tez任务执行异常,错误信息显示存在无效或冲突的GC选项。具体为-XX:+UseG1GC与-XX:+UseParallelGC不能同时使用。解决办法是修改Hive的tez.java.opts配置,移除-XX:+UseParallelGC参数。

ERROR : Failed to execute tez graph.
org.apache.tez.dag.api.TezUncheckedException: Invalid TaskLaunchCmdOpts defined for Vertex Map 1 : Invalid/conflicting GC options found, cmdOpts="-server -Djava.net.preferIPv4Stack=true -Dhdp.version=3.1.0.0-78 -XX:+PrintGCDetails -verbose:gc -XX:+PrintGCTimeStamps -XX:+UseNUMA -XX:+UseG1GC -XX:+ResizeTLAB -server -Xmx545m -Djava.net.preferIPv4Stack=true -XX:NewRatio=8 -XX:+UseNUMA -XX:+UseParallelGC -XX:+PrintGCDetails -verbose:gc -XX:+PrintGCTimeStamps -Dlog4j.configuratorClass=org.apache.tez.common.TezLog4jConfigurator -Dlog4j.configuration=tez-container-log4j.properties -Dyarn.app.container.log.dir=<LOG_DIR> -Dtez.root.logger=INFO,CLA "
    at org.apache.tez.dag.api.DAG.createDag(DAG.java:1005) ~[tez-api-0.9.1.3.1.0.0-78.jar:0.9.1.3.1.0.0-78]
    at org.apache.tez.client.TezClientUtils.prepareAndCreateDAGPlan(TezClientUtils.java:726) ~[tez-api-0.9.1.3.1.0.0-78.jar:0.9.1.3.1.0.0-78]
 &nb

### Hive SQL 语法教程 Hive SQL 是一种类似于传统 SQL 的查询语言,用于分析存储在 Hadoop 文件系统 (HDFS) 上的大规模数据集。以下是 Hive SQL 的一些核心概念和常用语法: #### 创建表 创建内部表(托管表): ```sql CREATE TABLE employees ( id INT, name STRING, salary FLOAT, department STRING ); ``` 创建外部表: ```sql CREATE EXTERNAL TABLE IF NOT EXISTS logs ( log_date DATE, message STRING ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LOCATION '/user/hive/external/logs'; ``` #### 加载数据 向内部表加载数据: ```sql LOAD DATA INPATH '/path/to/data' INTO TABLE employees; ``` 向外部表加载数据: ```sql INSERT INTO TABLE logs SELECT * FROM raw_logs WHERE date >= '2023-01-01'; ``` #### 查询数据 基本查询: ```sql SELECT id, name FROM employees WHERE department = 'HR'; ``` 聚合函数: ```sql SELECT department, COUNT(*) AS employee_count FROM employees GROUP BY department; ``` 连接查询: ```sql SELECT e.name, d.department_name FROM employees e JOIN departments d ON e.department = d.id; ``` 窗口函数: ```sql SELECT name, salary, RANK() OVER(ORDER BY salary DESC) as rank FROM employees; ``` #### 数据导出 将查询结果保存到文件中: ```sql INSERT OVERWRITE DIRECTORY '/output/path' ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' SELECT * FROM employees; ``` --- ### Hive 数据迁移至 MySQL 方案 Hive数据通常存储在一个关系型数据库中,最常见的是 MySQL。如果需要将 Hive 的元数据迁移到另一个 MySQL 实例,则可以按照以下方案操作。 #### 准备工作 确认源 Hive数据库的信息,包括主机地址、端口、用户名、密码以及数据库名称 `hivemetastore`[^1]。 #### 导出源 Hive数据库 使用 `mysqldump` 工具导出完整的 Hive数据库结构和数据: ```bash mysqldump -hX.X.X.X -u<username> -p<password> --single-transaction --set-gtid-purged=OFF hivemetastore > hivemetastore-src.sql ``` 注意: - 替换 `<username>` 和 `<password>` 为实际的数据库用户凭证。 - 如果未启用 GTID 功能,请移除参数 `--set-gtid-purged=OFF`。 #### 配置目标 MySQL 环境 确保目标 MySQL 实例已准备好接收新的元数据,并具有足够的权限来导入数据。 #### 导入元数据到目标 MySQL 登录到目标 MySQL执行导入脚本: ```bash mysql -hY.Y.Y.Y -u<target_username> -p<target_password> hivemetastore < hivemetastore-src.sql ``` 其中,`Y.Y.Y.Y` 是目标 MySQL 主机地址。 #### 更新 Hive 配置 修改 Hive 的配置文件 `hive-site.xml`,指向新迁移的目标 MySQL 地址: ```xml <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://Y.Y.Y.Y:3306/hivemetastore?createDatabaseIfNotExist=true</value> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.cj.jdbc.Driver</value> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value><target_username></value> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value><target_password></value> </property> ``` 重启 Hive 服务以使更改生效。 --- ### 性能优化建议 为了提高 Hive 查询性能,在迁移完成后可考虑以下优化策略: 1. **谓词下推**:通过设置 `hive.optimize.ppd=true` 尽可能早地过滤掉不需要的数据[^4]。 2. **MapJoin**:对于小表参与的 Join 操作,优先采用 MapJoin 提升效率。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值