使用Sqoop导入PostgreSQL表到HDFS时遇Ident认证失败错误求助
解决Sqoop导入PostgreSQL表时的Ident认证失败问题
这个错误是PostgreSQL默认的认证策略搞的鬼——当你从本地连接PostgreSQL时,它默认用Ident认证(靠操作系统用户匹配数据库用户),根本不买你输入的密码的账。下面一步步帮你搞定:
1. 修改PostgreSQL的认证配置文件(pg_hba.conf)
先找到这个配置文件的位置,打开终端用PostgreSQL超级用户执行:
psql -U postgres -c 'SHOW hba_file;'
输出会给你文件路径,比如/var/lib/postgresql/14/main/pg_hba.conf(版本号可能随你的安装不同变化)。
编辑这个文件,找到这两行:
local all all ident host all all 127.0.0.1/32 ident
把ident替换成md5(要是你的PostgreSQL版本支持,换成更安全的scram-sha-256也行),修改后变成:
local all all md5 host all all 127.0.0.1/32 md5
2. 重启PostgreSQL服务
保存配置后,重启服务让修改生效:
- Ubuntu/Debian系统用这个命令:
sudo systemctl restart postgresql
- CentOS/RHEL系统用这个:
sudo service postgresql restart
3. 给数据库用户加足够权限
登录PostgreSQL,给user授予连接数据库和读取表的权限:
psql -U postgres mytestdb
然后执行这两句SQL:
GRANT CONNECT ON DATABASE mytestdb TO "user"; GRANT SELECT ON employees TO "user"; \q
4. 重新跑Sqoop命令
现在再执行你的导入命令,输入正确密码应该就能成功了:
bin/sqoop import --connect 'jdbc:postgresql://127.0.0.1/mytestdb' --username user -P --table employees --target-dir /user/postgres
额外小提示
要是嫌每次输密码麻烦,可以直接在命令里加--password参数(但注意密码会明文显示在终端和命令历史里,生产环境别这么干):
bin/sqoop import --connect 'jdbc:postgresql://127.0.0.1/mytestdb' --username user --password your_actual_password --table employees --target-dir /user/postgres
内容的提问来源于stack exchange,提问作者usr
相关产品推荐
相关产品推荐

