【问题标题】:How to install sqoop in Amazon EMR?如何在 Amazon EMR 中安装 sqoop?
【发布时间】:2016-11-07 15:08:41
【问题描述】:

我在 Amazon EMR 中创建了一个集群并使用 -emr-4.0.0。 Hadoop 发行版:Amazon 2.6.0 和 Hive 1.0.0。需要安装 Sqoop 以便我可以在 Hive 和 Redshift 之间进行通信吗?在 EMR 集群中安装 Sqoop 的步骤是什么?要求提供步骤。谢谢!

【问题讨论】:

标签: hive sqoop amazon-redshift amazon-emr


【解决方案1】:

请注意,在 EMR 4.0.0 中,hadoop fs -copyToLocal 会引发错误。

请改用aws s3 cp

比 Amal 更具体:

  1. 下载最新版本的 SQOOP 并将其上传到 S3 位置。我正在使用 sqoop-1.4.4.bin__hadoop-2.0.4-alpha,它似乎与 EMR 4.0.0 一起工作得很好
  2. 下载 Redshift 的 JAR 连接器并将其上传到相同的 S3 位置。 This page 可能会有所帮助。
  3. 上传类似下面的脚本到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/
    
  4. 设置 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 中配置引导步骤,我创建了一个 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());

【讨论】:

  • 安娜,你能解释一下如何将它作为引导步骤加载吗?
  • 我是用 Java 做的,我现在在我的示例中发布一些代码。
【解决方案2】:

下载 sqoop 的压缩包并将其保存在 s3 存储桶中。创建一个执行以下活动的引导脚本

  1. 将 sqoop tarball 下载到所需的实例中
  2. 解压压缩包
  3. 设置 SQOOP_HOME 并将 SQOOP_HOME 添加到 PATH。这些条目应在 /etc/bashrc 中进行
  4. 将所需的连接器 jar 添加到 SQOOP 的库中。

将此脚本保存在 S3 中并将此脚本指向引导操作。

【讨论】:

    【解决方案3】:

    请注意,AWS 从 Emr-4.4.0 开始向 EMR 集群添加了对 Sqoop 1.4.6 的支持。只需单击几下设置即可完成安装。无需手动安装。

    参考资料:

    【讨论】:

      猜你喜欢
      • 2013-11-15
      • 1970-01-01
      • 1970-01-01
      • 2015-05-06
      • 1970-01-01
      • 1970-01-01
      • 2018-03-04
      • 2015-10-10
      • 2021-05-26
      相关资源
      最近更新 更多