如何在 Hue 3.10 中提交 Sqoop1 作业?

前言

本来认为这块是很简单的事儿,不想单独记录下来,恐怖的是花了2小时时间才调通(之前踩过的坑又踩了一遍),所以想下还是用记录下来罢。

为什么使用 Sqoop1 而不是 Sqoop2?

这个,很尴尬,Hue 3.10 + Sqoop2 + SSL 一直没有调通,Sqoop Transfer 界面一直报:Sqoop error: Could not get connectors,避免耽误进度,所以没有使用。

准备工作

有两块需要注意,一个是 Mysql Connector Jar 需要在 Oozie / Sqoop 的对应库目录下存在,一个是 Yarn 相关的内存资源配置,否则提交任务后会一直进行 heartbeat。

A. Mysql Connector Jar 部署

如 Step by Step 实现基于 Cloudera 5.8.2 的企业级安全大数据平台 - 基础部署 一文所述,我们在部署 Oozie 服务的时候已经涉及部分:

pssh -h list_agents "sudo mkdir -p /opt/cloudera/parcels/CDH-5.8.2-1.cdh5.8.2.p0.3/lib/hive/lib/ /opt/cloudera/parcels/CDH-5.8.2-1.cdh5.8.2.p0.3/lib/oozie/lib/ /var/lib/oozie" 

pssh -h list_agents "sudo cp /tmp/mysql-connector-java-5.1.34.jar /opt/cloudera/parcels/CDH-5.8.2-1.cdh5.8.2.p0.3/lib/oozie/lib/" 

pssh -h list_agents "sudo cp /tmp/mysql-connector-java-5.1.34.jar /var/lib/oozie"

我们还需要在另外几个目录进行部署:

pssh -h list_agents "sudo cp /tmp/mysql-connector-java-5.1.34.jar /home/opt/cloudera/parcels/CDH-5.8.2-1.cdh5.8.2.p0.3/lib/oozie/libtools"

pssh -h list_agents "sudo cp /tmp/mysql-connector-java-5.1.34.jar /var/lib/oozie/mysql-connector-java-5.1.34.jar"

pssh -h list_agents "sudo cp /tmp/mysql-connector-java-5.1.34.jar /home/opt/cloudera/parcels/CDH-5.8.2-1.cdh5.8.2.p0.3/lib/sqoop/lib"

pssh -h list_agents "sudo cp /tmp/mysql-connector-java-5.1.34.jar /var/lib/sqoop"

另外也需要在 HDFS 的 Oozie sharlib 目录下存在该 jar,其中 TIMESTAMP 是 Oozie 启动时的时间戳(Date 格式),一般类似 20170318104137

hadoop fs -put mysql-connector-java-5.1.34.jar /user/oozie/share/lib/lib_${TIMESTAMP}/sqoop/

最后我们需要重启 Sqoop 。

B. 合理配置 YARN 内存

如果对以下配置不进行合理配置(比如使用 Cloudera 的默认配置),会出现 issue: https://community.cloudera.com/t5/Batch-Processing-and-Workflow/Oozie-sqoop-action-in-CDH-5-2-Heart-beat-issue/td-p/22181,所以我们需要修改并且加大它们:

  
    yarn.nodemanager.resource.memory-mb
    4096
  
  
    yarn.scheduler.maximum-allocation-mb
    4096
  

这块不需要手动修改配置文件,可以在 Cloudera Manager Web Console -> Cluster -> YARN -> Configuration 中设置。

修改完上述配置后,我们需要重启 YARN。

操作步骤

我们先抛开之前部署的 Kerberos + SSL 来说,不考虑这几个安全组件,怎么在基础裸集群内 run 起来 Sqoop1 作业。和从冰箱拿香蕉一样,开冰箱 -> 拿香蕉 -> 关冰箱,真的只要 3 步。

Step1. 建立测试用数据库

创建 MySQL 的步骤这里不阐述,各个网站随便搜,注意 CentOS 7.2 默认是 MariaDB,请参考类似文档。

Step2. 创建测试工作流

打开 Hue 的 Web 界面,进入 Workflows -> Editors -> Workflows ,点击 Create 按钮。从上方的标签中选择 Sqoop1 拖入 Drop your action here 的位置,在 Sqoop command 中输入:

import  --connect jdbc:mysql://${MYSQL_HOSTNAME}:${MYSQL_PORT}/${DN_NAME} --table ${TABLE_NAME} --target-dir hdfs://${NAMENODE_HOSTNAME}:${NAMENODE_PORT}/${PATH_TARGET} -m 1 --username ${USERNAME} --password ${PASSWORD}

命令中的变量请自行替换。完成后保存,点击 Save 按钮 。

Step3. 启动工作流

点击 Submit 按钮,提交作业。

注意: target-dir 必须本身不存在,否则会报错。

小结

本文介绍了如何在 Hue 3.10 中提交 Sqoop1 作业,以及如何避免常见问题。

你可能感兴趣的:(如何在 Hue 3.10 中提交 Sqoop1 作业?)