前言
本来认为这块是很简单的事儿,不想单独记录下来,恐怖的是花了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,所以我们需要修改并且加大它们:
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>4096</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>4096</value>
</property>
这块不需要手动修改配置文件,可以在 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 作业,以及如何避免常见问题。