Sqoop如何使用SSL加密访问MySQL ?



目前我们需要使用Sqoop建立一个基于ssl的连接,从MySQL提取数据到HDFS。根据AWS和Sqoop的相关文档,我们完成了以下命令的拼接:

sqoop-import 
--connect "jdbc:mysql://remote-db.amazonaws.com.cn:3306/TSTWOWDB?verifyServerCertificate=false&useSSL=true&requireSSL=true&sslMode=VERIFY_IDENTITY&trustCertificateKeyStoreUrl=/home/etl/ivan/ssl/clientkeystore.jks&trustCertificateKeyStorePassword=xxxxxx" 
--username "TEST_USER" --password "xxxxxx" 
--table "t_wrong_qrcodes" 
--target-dir /tmp/ivan/t_wrong_qrcodes 
-m 1

属性中,"/home/etl/ivan/ssl/clientkeystore"。Jks '是提交服务器的本地文件路径。

任务启动后,报错如下:Caused by: java.io.FileNotFoundException: /mnt/home/etl/ivan/ssl/clientkeystore.jks (No such file or directory),似乎是因为Sqoop启动了Map-Reduce任务,但是没有"/mnt/home/etl/ivan/ssl/clientkeystore"这样的文件路径。每个计算节点的Jks

如何设置准确的属性,是否有操作损失?

Sqoop Version - 1.4.7

引用:

  1. https://docs.amazonaws.cn/en_us/emr/latest/ReleaseGuide/emr-sqoop-considerations.html
  2. https://sqoop.apache.org/docs/1.4.7/SqoopUserGuide.html
  3. 连接MySQL数据库时SSL连接警告

到目前为止,我们已经解决了。注意以下三点:

  • 同步信任存储文件,命名为jks文件到每个计算节点。如果您正在使用Aws或其他云服务,则应该将信任存储文件放置到所有节点,如果使用实例舰队,则包括任务节点。
  • 属性trustCertificateKeyStoreUrl应该是有效的url,可以以file:/开头,例如trustCertificateKeyStoreUrl=file:/home/hadoop/ssl/clientkeystore.jks
  • 设置useSSL属性为true,否则将不转换为使用SSL加密连接。

最新更新