hive同步到pg

博客主要讲述将hive库的数据同步到PostgreSQL库中,涉及大数据处理和数据库操作,为数据迁移提供了一种可行方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

将hive库的数据同步到PostgreSQL库中

#!/bin/bash
# 参数校验
if [ $# -lt 1 ] ; then
  echo "期待1个参数"
  exit 1
fi

#时间处理
dt="$(date -d "$1 1 day ago" +'%Y-%m-%d')"

# pg库的配置连接信息
rdb="postgresql"
host="**********************"
port="**********************"
user="**********************"
password="******************"
database="******************"

export LANG="en_US.UTF-8"
export PGPASSWORD=${password}

hive_table="****************"
hive_partition="dt='${dt}'"
pg_table="******************"

#路径
current_path="$(cd $(dirname $0);pwd)"
tmp_file="$current_path/data"

hive_sql="
  select 
    name,
    sex,
    age
  from 
    ${hive_table}
  where dt='${dt}';
"
sudo -u root /home/apache-hive-2.1.1-bin/bin/hive -e "  ${hive_sql} " > $tmp_file || exit 1

pg_sql="
  begin;                                                 -- 回滚用
  truncate table ${pg_table};                            -- 清空表数据
  alter sequence ${pg_table}_id_seq restart with 1;      -- 表的自增id 置为1 
  copy ${pg_table}(name,sex,age) from stdin;             -- 将数据导入到pg中
  commit;                                                -- 回滚用 中间任意一步出错就回滚
"
# id_seq 一般会在前面加上table名  ${pg_table}_id_seq
# 如果 alter sequence ${pg_table}_id_seq restart with 1; 报以下错:
# ERROR: must be owner of sequence ${pg_table}_id_seq
# 就将其改成  select setval('${pg_table}_id_seq'::regclass,1);
# setval不需要owner权限

cat $tmp_file | psql -h${host} -p${port} -d${database} -U${user}  -c " ${pg_sql} " || exit 1
### DataX 实现从 Hive 到 PostgreSQL 的数据同步 #### 背景介绍 DataX 是阿里巴巴开源的一款离线数据同步工具,支持多种异构数据源之间的高效数据传输。其核心设计理念是通过 Framework + Plugin 架构将复杂的数据同步过程简化为星型结构[^4]。这意味着只要新增一种数据源插件,即可实现与其他已有数据源的无缝对接。 对于从 Hive 到 PostgreSQL 的数据迁移需求,可以利用 DataX 提供的 `HiveReader` 和 `PostgresqlWriter` 插件完成这一任务。以下是详细的配置方法和技术要点: --- #### 配置步骤详解 ##### 1. 安装与环境准备 确保已经安装并正确配置了 DataX 工具及其依赖项。具体来说: - 下载最新版本的 DataX 并解压至指定目录。 - 确认目标数据库(PostgreSQL)以及源端 Hive 表均已创建完毕,并具备访问权限。 ##### 2. JSON 配置文件编写 DataX 使用 JSON 文件定义数据同步的任务参数。以下是一个典型的从 Hive 导出到 PostgreSQL 的 JSON 配置模板: ```json { "job": { "content": [ { "reader": { "name": "hivereader", "parameter": { "defaultFS": "hdfs://namenode:8020", // 替换为实际 HDFS 地址 "path": "/user/hive/warehouse/db_name/table_name", // 替换为目标表路径 "fieldDelimiter": "\t", // 字段分隔符,默认制表符 "column": ["id", "name", "age"], // 明确列名列表 "encoding": "utf-8" } }, "writer": { "name": "postgrewriter", "parameter": { "username": "your_username", // PostgreSQL 用户名 "password": "your_password", // PostgreSQL 密码 "connection": [ { "jdbcUrl": "jdbc:postgresql://localhost:5432/target_db", // JDBC URL 连接字符串 "table": ["target_table"] // 目标表名称 } ], "writeMode": "insert", // 写入模式:insert 或 update "batchSize": 100, // 批量提交大小 "preSql": [], // 可选预执行 SQL 命令 "postSql": [] // 可选后执行 SQL 命令 } } } ], "setting": { "speed": { "channel": 3 // 设置并发通道数 } } } } ``` 上述配置中需要注意的关键点如下: - **默认文件系统 (`defaultFS`):** 如果 Hive 存储在分布式存储上,则需提供对应的 Namenode 地址。 - **字段映射 (`column`):** 必须显式声明需要同步的字段集合,顺序应保持一致。 - **JDBC URL 格式化:** 对于 PostgreSQL 来说,通常形式为 `"jdbc:postgresql://host:port/database"`[^2]。 --- #### 技术细节说明 ##### 数据一致性保障 为了保证数据的一致性和完整性,在同步过程中可采取以下措施: - 添加校验逻辑以验证两端记录数量是否匹配; - 若存在更新操作场景下,合理设置唯一键约束以便精准定位修改行[^3]。 ##### 性能优化建议 针对大规模批量作业可能带来的性能瓶颈问题,可以从以下几个方面入手改善效率: - 调整 channel 数目来平衡资源占用率与处理速度的关系; - 减少不必要的网络交互开销比如压缩传输数据流等手段提升吞吐能力[^1]。 --- ### 注意事项 尽管 DataX 功能强大且灵活易用,但在实践当中仍有一些常见陷阱值得注意规避: - 确保所有涉及敏感信息如密码等内容均妥善保管不泄露给无关人员知晓; - 测试阶段务必从小规模样本集开始逐步扩大范围直至完全满足生产级别要求为止; ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TriumPhSK

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值