在 EMR 上安装 JDBC 驱动程序以供 Sqoop 使用的正确方法是什么?

What is the correct way of installing a JDBC driver on EMR for Sqoop to use?

我正在 运行在 AWS EMR 5.21.1 上使用 Sqoop 1.4.7 并尝试从数据库导入数据。我已经成功地手动执行此操作,我创建了一个通过 EMR 控制台安装了 Sqoop 的 EMR 实例。

以下是我为 运行 sqoop on EMR

执行的初步步骤
  1. 下载 JDBC 驱动程序
  2. 将 JDBC 驱动程序移动到 /usr/lib/sqoop/lib 目录

当我使用以下命令 sshd 进入 EMR 集群时,我能够成功 运行 sqoop 导入:

wget -O mssql-jdbc.jar https://repo1.maven.org/maven2/com/microsoft/sqlserver/mssql-jdbc/8.4.0.jre8/mssql-jdbc-8.4.0.jre8.jar
sudo mv mssql-jdbc.jar /usr/lib/sqoop/lib/

当我尝试从 EMR bootstrap 脚本 运行 这些命令时,我得到了错误:

usr/lib/sqoop/lib/ No such file or directory

经过一番调查后,我意识到这是因为“Bootstrap 操作在核心服务(例如 Hadoop 或 Spark)安装之前执行”,发现 here

所以当我 运行 我的 bootstrap 步骤时 /usr/lib/sqoop/lib 目录不存在。

这里有一些可行的解决方案,但感觉像是变通办法

  1. 在我的 bootstrap 脚本中创建 /usr/lib/sqoop/lib 目录,然后将 jar 文件放入其中
  2. 将 jar 添加到此目录作为 EMR 步骤。 (事实证明这是正确的方法,请看下面接受的答案)

在 EMR 上安装此 JDBC 驱动程序的正确方法是什么?

第二个选项是正确的做法。 documentation 将 运行 bash 脚本解释为 EMR 步骤。

您还可以使用 jar command-runner.jar 和参数

bash -c "wget -O mssql-jdbc.jar https://repo1.maven.org/maven2/com/microsoft/sqlserver/mssql-jdbc/8.4.0.jre8/mssql-jdbc-8.4.0.jre8.jar;sudo mv mssql-jdbc.jar /usr/lib/sqoop/lib/"