如何在 Amazon EMR 中安装 sqoop?
How to install sqoop in Amazon EMR?
我在 Amazon EMR 中创建了一个集群并使用 -emr-4.0.0。 Hadoop distribution:Amazon 2.6.0 和 Hive 1.0.0。需要安装 Sqoop 以便我可以在 Hive 和 Redshift 之间进行通信吗?在EMR集群中安装Sqoop的步骤是什么?求提供步骤。谢谢!
下载 sqoop 的压缩包并将其保存在 s3 存储桶中。创建执行以下 activity
的 bootstrap 脚本
- 将 sqoop tarball 下载到所需的实例
- 提取压缩包
- 设置SQOOP_HOME并将SQOOP_HOME添加到PATH。这些条目应该在 /etc/bashrc
- 将所需的连接器 jar 添加到 SQOOP 的库中。
将此脚本保存在 S3 中并将此脚本指向 bootstrap 操作。
请注意,在 EMR 4.0.0 中 hadoop fs -copyToLocal
会抛出错误。
改用aws s3 cp
。
比 Amal 更具体:
- 下载最新版本的 SQOOP 并将其上传到 S3 位置。我正在使用 sqoop-1.4.4.bin__hadoop-2.0.4-alpha 它似乎与 EMR 4.0.0
一起工作
- 下载 Redshift 的 JAR 连接器并将其上传到相同的 S3 位置。 This page 可能会有帮助。
将类似于下面的脚本上传到 S3
#!/bin/bash
# Install sqoop and mysql connector. Store in s3 and load
# as bootstrap step.
bucket_location='s3://your-sqoop-jars-location/'
sqoop_jar='sqoop-1.4.4.bin__hadoop-2.0.4-alpha'
sqoop_jar_gz=$sqoop_jar.tar.gz
redshift_jar='RedshiftJDBC41-1.1.7.1007.jar'
cd /home/hadoop
aws s3 cp $bucket_location$sqoop_jar_gz .
tar -xzf $sqoop_jar_gz
aws s3 cp $bucket_location$redshift_jar .
cp $redshift_jar $sqoop_jar/lib/
设置SQOOP_HOME 并将SQOOP_HOME 添加到PATH 以便能够从任何地方调用sqoop。这些条目应在 /etc/bashrc 中进行。否则你将不得不使用完整路径,在这种情况下:/home/hadoop/sqoop-1.4.4.bin__hadoop-2.0.4-alpha/bin/sqoop
我正在使用 Java 以编程方式启动我的 EMR 集群。要配置 Java 中的 bootstrap 步骤,我创建了一个 BootstrapActionConfigFactory:
public final class BootstrapActionConfigFactory {
private static final String bucket = Config.getBootstrapBucket();
// make class non-instantiable
private BootstrapActionConfigFactory() {
}
/**
* Adds an install Sqoop step to the job that corresponds to the version set in the Config class.
*/
public static BootstrapActionConfig newInstallSqoopBootstrapActionConfig() {
return newInstallSqoopBootstrapActionConfig(Config.getHadoopVersion().charAt(0));
}
/**
* Adds an install Sqoop step to the job that corresponds to the version specified in the parameter
*
* @param hadoopVersion the main version number for Hadoop. E.g.: 1, 2
*/
public static BootstrapActionConfig newInstallSqoopBootstrapActionConfig(char hadoopVersion) {
return new BootstrapActionConfig().withName("Install Sqoop")
.withScriptBootstrapAction(
new ScriptBootstrapActionConfig().withPath("s3://" + bucket + "/sqoop-tools/hadoop" + hadoopVersion + "/bootstrap-sqoop-emr4.sh"));
}
}
然后在创建作业时:
Job job = new Job(Region.getRegion(Regions.US_EAST_1));
job.addBootstrapAction(BootstrapActionConfigFactory.newInstallSqoopBootstrapActionConfig());
请注意,从 Emr-4.4.0 开始,AWS 向 EMR 集群添加了对 Sqoop 1.4.6 的支持。只需点击几下安装即可完成安装。无需手动安装。
参考文献:
我在 Amazon EMR 中创建了一个集群并使用 -emr-4.0.0。 Hadoop distribution:Amazon 2.6.0 和 Hive 1.0.0。需要安装 Sqoop 以便我可以在 Hive 和 Redshift 之间进行通信吗?在EMR集群中安装Sqoop的步骤是什么?求提供步骤。谢谢!
下载 sqoop 的压缩包并将其保存在 s3 存储桶中。创建执行以下 activity
的 bootstrap 脚本- 将 sqoop tarball 下载到所需的实例
- 提取压缩包
- 设置SQOOP_HOME并将SQOOP_HOME添加到PATH。这些条目应该在 /etc/bashrc
- 将所需的连接器 jar 添加到 SQOOP 的库中。
将此脚本保存在 S3 中并将此脚本指向 bootstrap 操作。
请注意,在 EMR 4.0.0 中 hadoop fs -copyToLocal
会抛出错误。
改用aws s3 cp
。
比 Amal 更具体:
- 下载最新版本的 SQOOP 并将其上传到 S3 位置。我正在使用 sqoop-1.4.4.bin__hadoop-2.0.4-alpha 它似乎与 EMR 4.0.0 一起工作
- 下载 Redshift 的 JAR 连接器并将其上传到相同的 S3 位置。 This page 可能会有帮助。
将类似于下面的脚本上传到 S3
#!/bin/bash # Install sqoop and mysql connector. Store in s3 and load # as bootstrap step. bucket_location='s3://your-sqoop-jars-location/' sqoop_jar='sqoop-1.4.4.bin__hadoop-2.0.4-alpha' sqoop_jar_gz=$sqoop_jar.tar.gz redshift_jar='RedshiftJDBC41-1.1.7.1007.jar' cd /home/hadoop aws s3 cp $bucket_location$sqoop_jar_gz . tar -xzf $sqoop_jar_gz aws s3 cp $bucket_location$redshift_jar . cp $redshift_jar $sqoop_jar/lib/
设置SQOOP_HOME 并将SQOOP_HOME 添加到PATH 以便能够从任何地方调用sqoop。这些条目应在 /etc/bashrc 中进行。否则你将不得不使用完整路径,在这种情况下:
/home/hadoop/sqoop-1.4.4.bin__hadoop-2.0.4-alpha/bin/sqoop
我正在使用 Java 以编程方式启动我的 EMR 集群。要配置 Java 中的 bootstrap 步骤,我创建了一个 BootstrapActionConfigFactory:
public final class BootstrapActionConfigFactory {
private static final String bucket = Config.getBootstrapBucket();
// make class non-instantiable
private BootstrapActionConfigFactory() {
}
/**
* Adds an install Sqoop step to the job that corresponds to the version set in the Config class.
*/
public static BootstrapActionConfig newInstallSqoopBootstrapActionConfig() {
return newInstallSqoopBootstrapActionConfig(Config.getHadoopVersion().charAt(0));
}
/**
* Adds an install Sqoop step to the job that corresponds to the version specified in the parameter
*
* @param hadoopVersion the main version number for Hadoop. E.g.: 1, 2
*/
public static BootstrapActionConfig newInstallSqoopBootstrapActionConfig(char hadoopVersion) {
return new BootstrapActionConfig().withName("Install Sqoop")
.withScriptBootstrapAction(
new ScriptBootstrapActionConfig().withPath("s3://" + bucket + "/sqoop-tools/hadoop" + hadoopVersion + "/bootstrap-sqoop-emr4.sh"));
}
}
然后在创建作业时:
Job job = new Job(Region.getRegion(Regions.US_EAST_1));
job.addBootstrapAction(BootstrapActionConfigFactory.newInstallSqoopBootstrapActionConfig());
请注意,从 Emr-4.4.0 开始,AWS 向 EMR 集群添加了对 Sqoop 1.4.6 的支持。只需点击几下安装即可完成安装。无需手动安装。
参考文献: