# sqoop **Repository Path**: bxy_2000/sqoop ## Basic Information - **Project Name**: sqoop - **Description**: 大数据sqoop - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-09-14 - **Last Updated**: 2026-09-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Sqoop 1.4.7 模块(Apache Atlas 集成,修复版) 本目录是 **Apache Atlas + Sqoop 集成** 的完整模块:sqoop 源码工程(含修复补丁)、一键编译脚本、一键安装脚本、离线部署素材。**为什么要编译修复、为什么要这些配置,集中记录在本文件;具体的操作步骤见两个过程文档**: | 文档 | 内容 | |---|---| | [docs/BUILD.md](docs/BUILD.md) | 打包:如何编译出修复版 jar、归集部署素材 | | [docs/DEPLOY.md](docs/DEPLOY.md) | 部署:生成物在哪 → 上传 → 安装、运行、验证 | ## 为什么要这个工程 官方 sqoop 1.4.7 二进制包存在**两个问题**,都会阻断 Atlas 元数据上报,因此需要源码级修复 + 环境配置: ### 问题 1:源码 bug(官方包自带,需编译修复) `SqoopOptions.writeProperties()` 通过反射遍历 SqoopOptions 的所有 Map 字段,无 null 检查直接调 `SqoopJsonUtil.getJsonStringforMap(map)`(见 [SqoopOptions.java](sqoop-1.4.7/src/java/org/apache/sqoop/SqoopOptions.java#L781-L785))。当某个 Map 字段为 null 时,`new JSONObject(null)` 在 `map.entrySet()` 处抛 NPE,导致 `SqoopJobDataPublisher$Data` 构造失败,Atlas SqoopHook 的 publish 阶段崩溃,元数据发不到 Atlas。 **补丁**:在 `SqoopJsonUtil.getJsonStringforMap()` 增加 null → `"{}"` 防御(见 [SqoopJsonUtil.java](sqoop-1.4.7/src/java/org/apache/sqoop/util/SqoopJsonUtil.java)),只影响该工具类,不改动 Sqoop 其他逻辑。 ### 问题 2:环境问题(JDK policy 未授权,需配置) sqoop 主进程自带基类 SecurityManager,而 JDK 默认 policy 不授权 `javax.management.MBeanTrustPermission "register"`。Atlas 通知依赖 kafka producer,构建时注册 JMX MBean 被拒 → `Failed to construct kafka producer`,消息发不到 Atlas。**解决**:向 `$JAVA_HOME/jre/lib/security/java.policy` 追加授权(安装脚本自动完成)。 ### 配套说明 - **只有 `--hive-import` / hcat 作业才触发 Hook publish**([ImportJobBase.java:281](sqoop-1.4.7/src/java/org/apache/sqoop/mapreduce/ImportJobBase.java#L281)),普通 import 不上报。 - Atlas 通知走 Kafka(外部 Kafka 默认 `192.168.1.151:9092`,与 Atlas `deploy/install-src/config.sh` 的 `KAFKA_BOOTSTRAP_SERVERS` 保持一致;sqoop 侧通过 `atlas-application.properties` 指向它)。 ## 目录结构 ``` sqoop/ ├── README.md 本文件(原因/背景) ├── docs/ │ ├── BUILD.md 打包流程(过程) │ └── DEPLOY.md 部署流程(过程) ├── build-sqoop.sh 一键编译脚本(下载源码 → 打补丁 → 编译 → 出修复 jar) ├── package-install.sh 制作离线安装包(install-src/ → deploy/sqoop-install.tar.gz) ├── install-src/ 安装包源目录(解压即所得,上传部署用) │ ├── install.sh 一键安装(解压 → 配置 → Atlas 集成 → 验证) │ ├── config.sh 部署配置(只改这里) │ └── 素材(bin 包 / 补丁 jar / hook 包 / mysql 驱动) ├── sqoop-1.4.7/ sqoop 1.4.7 源码树(已打补丁) ├── sqoop-1.4.7.tar.gz 官方源码包(build 用,首次缺失自动下载) ├── build/ 编译中间产物(class,不入库) ├── dist/ 编译生成物(修复版 jar,不入库) └── deploy/ 安装包产物(sqoop-install.tar.gz,不入库,见 docs/DEPLOY.md) ``` ## 部署操作速查 | 步骤 | 操作 | |---|---| | **1. 构建** | 在 atlas 源码工程根目录执行 `bash sqoop/build-sqoop.sh`,产出 `sqoop/dist/sqoop-1.4.7-patched.jar` | | **2. 打安装包** | `bash sqoop/package-install.sh`,产出 `sqoop/deploy/sqoop-install.tar.gz` | | **3. 上传** | `scp sqoop/deploy/sqoop-install.tar.gz hadoop@<服务器IP>:/appcom/` | | **4. 解压** | `cd /appcom && tar xzf sqoop-install.tar.gz`(包内顶层即 `sqoop-install/`,自动与 Atlas 分开) | | **5. 改配置** | 编辑 `/appcom/sqoop-install/install-src/config.sh`,按现场修改 `HADOOP_HOME`、`HIVE_HOME`、`ATLAS_REST_URL`、`ATLAS_KAFKA_BOOTSTRAP` 等 | | **6. 安装** | `cd /appcom/sqoop-install/install-src && bash install.sh`(脚本自动完成解压、配置、Atlas Hook 部署、JDK 授权、验证) | 安装完成后执行 `source /etc/profile.d/sqoop_env.sh`(或重新登录),然后直接使用 `sqoop` 命令。Sqoop 无守护进程,不需要启动。