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

问题描述

我正在AWS EMR 5.21.1上运行Sqoop 1.4.7,并试图从数据库导入数据。在通过EMR控制台安装Sqoop的EMR实例中,我已经能够成功手动完成此操作。

这是我为了在EMR上运行sqoop而执行的初步步骤

  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引导脚本运行这些命令时,却收到错误消息:

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

进行调查后,我意识到这是因为“引导程序操作在安装诸如Hadoop或Spark的核心服务之前执行”,如here

因此,当我运行引导步骤时,/ usr / lib / sqoop / lib目录不存在。

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

  1. 在我的引导脚本中创建/ usr / lib / sqoop / lib目录,然后将jar放入其中
  2. 将罐子添加到此目录作为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/"