DataX 安装配置教程 (Deepin/Ubuntu)
一、环境准备
1. 前置条件
-
✅ JDK 8 已安装
-
✅ Python 3.x 已安装 (推荐 Python 3.12)
-
✅ Hadoop 已安装并正常运行
-
DataX 版本: 最新稳定版
-
安装路径:
/usr/local/datax
2. 验证 Python 环境
python3 --version # 输出: Python 3.12.x
二、下载 DataX
1. 官方地址
# GitHub Release 页面 https://github.com/alibaba/DataX/releases # 下载最新版本 https://datax-opensource.oss-cn-hangzhou.aliyuncs.com/202309/datax.tar.gz
2. 使用 wget 下载
cd ~/Downloads wget https://datax-opensource.oss-cn-hangzhou.aliyuncs.com/202309/datax.tar.gz
三、安装 DataX
1. 解压并移动
# 解压 tar -zxvf datax.tar.gz # 移动到安装目录 sudo mv datax /usr/local/ # 设置所有权 sudo chown -R $USER:$USER /usr/local/datax
2. 配置环境变量
编辑系统环境变量:
sudo vim /etc/profile
在文件末尾添加:
# DataX Environment export DATAX_HOME=/usr/local/datax export PATH=$PATH:$DATAX_HOME/bin
使配置生效:
source /etc/profile
3. 验证安装
cd /usr/local/datax/bin python3 datax.py -v
四、替换 Python 3 兼容脚本 (重要!)
DataX 默认使用 Python 2,需要替换为 Python 3 兼容版本。
1. 从 DataX Web 获取 Python 3 脚本
如果你已经下载了 DataX Web 源码:
# 假设 DataX Web 源码在 ~/datax-web cd ~/datax-web/doc/datax-web/datax-python3 # 复制 Python 3 脚本到 DataX cp datax.py /usr/local/datax/bin/ cp datax_*.py /usr/local/datax/bin/
2. 或者手动修改 (如果没有 DataX Web)
主要修改点:
-
print语句改为print()函数 -
raw_input()改为input() -
字符串编码处理
建议直接使用 Python 3 兼容版本的 DataX Web 提供的脚本
五、配置 DataX 连接 Hadoop
1. 配置 Hadoop 环境变量
确保 DataX 可以访问 Hadoop:
编辑 ~/.bashrc 或 /etc/profile,确保包含:
export HADOOP_HOME=/usr/local/hadoop export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
2. 验证 Hadoop 连接
# 测试 HDFS 命令 hdfs dfs -ls / # 查看 HDFS 配置 hdfs getconf -confKey fs.defaultFS # 输出: hdfs://localhost:9000
重要: 确保是 hdfs://localhost:9000,不是 8020!
六、创建测试任务
1. 创建 MySQL -> HDFS 同步任务
mkdir -p ~/datax-jobs vim ~/datax-jobs/mysql_to_hdfs.json
配置内容:
{
"job": {
"setting": {
"speed": {
"channel": 1
}
},
"content": [
{
"reader": {
"name": "mysqlreader",
"parameter": {
"username": "zhzt",
"password": "zhzt123456",
"column": ["*"],
"connection": [
{
"table": ["orders"],
"jdbcUrl": ["jdbc:mysql://localhost:3306/zhzt_db?useSSL=false&useUnicode=true&characterEncoding=UTF-8"]
}
]
}
},
"writer": {
"name": "hdfswriter",
"parameter": {
"defaultFS": "hdfs://localhost:9000",
"fileType": "text",
"path": "/user/hive/warehouse/ods_zhzt.db/ods_orders",
"fileName": "orders",
"column": [
{"name": "order_id", "type": "string"},
{"name": "user_id", "type": "string"},
{"name": "product_id", "type": "string"},
{"name": "quantity", "type": "string"},
{"name": "price", "type": "string"},
{"name": "order_date", "type": "string"}
],
"writeMode": "append",
"fieldDelimiter": "\t",
"compress": "NONE"
}
}
}
]
}
}
2. 运行测试任务
cd /usr/local/datax/bin python3 datax.py ~/datax-jobs/mysql_to_hdfs.json
七、常见问题与解决方案
问题1: Python 语法错误
错误信息:
SyntaxError: invalid syntax
File "datax.py", line xxx
print "xxxx"
原因: 使用了 Python 2 的脚本
解决方案: 替换为 Python 3 兼容脚本 (见第四章)
问题2: HDFS 连接失败 (Connection refused to hadoop:8020)
错误信息:
java.net.ConnectException: Call From localhost to hadoop:8020 failed on connection exception
原因: HDFS 配置的端口是 9000,不是 8020
解决方案:
-
检查 Hadoop 配置:
hdfs getconf -confKey fs.defaultFS # 应该输出: hdfs://localhost:9000
-
修改 DataX 任务 JSON 中的 HDFS 地址:
"defaultFS": "hdfs://localhost:9000" // 不是 8020!
问题3: 字段分隔符问题 (数据全为 NULL)
现象: 数据同步成功,但 Hive 查询全是 NULL
原因: JSON 中的 \t 被当作两个字符 \ 和 t
解决方案: 在 JSON 中使用实际的 Tab 字符,或者:
"fieldDelimiter": "\t" // 确保是转义的 Tab,不是两个字符
测试数据:
# 查看 HDFS 文件内容,验证分隔符 hdfs dfs -cat /user/hive/warehouse/ods_zhzt.db/ods_orders/orders* | head -5
问题4: 速度配置冲突
错误信息:
在有总bps限速条件下,单个channel的bps值不能为空
原因: 同时配置了 byte 和 channel,但 byte 为空
解决方案: 只保留 channel 配置:
"speed": {
"channel": 1
}
或者设置 byte 为 -1:
"speed": {
"channel": 1,
"byte": -1
}
问题5: MySQL 连接失败
检查项:
-
数据库是否运行
-
用户名密码是否正确
-
JDBC 驱动是否存在
验证连接:
mysql -u zhzt -pzhzt123456 zhzt_db -e "SELECT * FROM orders LIMIT 5;"
问题6: HDFS 写入权限问题
错误信息:
Permission denied: user=xxx, access=WRITE
解决方案:
# 设置 HDFS 目录权限 hdfs dfs -chmod -R 777 /user/hive/warehouse
八、DataX Reader/Writer 支持列表
常用 Reader
-
mysqlreader - MySQL 数据库
-
oraclereader - Oracle 数据库
-
sqlserverreader - SQL Server
-
postgresqlreader - PostgreSQL
-
hdfsreader - HDFS 文件
-
streamreader - 流式数据 (测试用)
常用 Writer
-
mysqlwriter - MySQL 数据库
-
hdfswriter - HDFS 文件
-
hivewriter - Hive 表 (需要 HiveServer2)
-
streamwriter - 流式输出 (测试用)
九、性能优化配置
1. 调整并发数
"setting": {
"speed": {
"channel": 5 // 增加并发通道
}
}
2. 调整批量大小
"reader": {
"parameter": {
"fetchSize": 1024 // 每次读取行数
}
}
3. 内存优化
编辑 /usr/local/datax/bin/datax.py:
# 找到 JVM 参数配置,调整内存 -Xms1g -Xmx2g
十、DataX 常用参数说明
Reader 通用参数
| 参数 | 说明 | 示例 |
|---|---|---|
| username | 数据库用户名 | "root" |
| password | 数据库密码 | "123456" |
| column | 读取的列 | ["id", "name"] 或 ["*"] |
| where | 过滤条件 | "id > 100" |
| splitPk | 分片键 | "id" |
Writer 通用参数
| 参数 | 说明 | 示例 |
|---|---|---|
| writeMode | 写入模式 | "append", "truncate" |
| fieldDelimiter | 字段分隔符 | "\t" |
| compress | 压缩格式 | "NONE", "gzip", "bzip2" |
| fileType | 文件类型 | "text", "orc", "parquet" |
十一、测试 DataX 安装
1. 使用 Stream 测试
创建测试配置:
vim ~/datax-jobs/stream_test.json
内容:
{
"job": {
"content": [
{
"reader": {
"name": "streamreader",
"parameter": {
"sliceRecordCount": 10,
"column": [
{
"type": "long",
"value": "10"
},
{
"type": "string",
"value": "hello DataX"
}
]
}
},
"writer": {
"name": "streamwriter",
"parameter": {
"encoding": "UTF-8",
"print": true
}
}
}
]
}
}
运行测试:
python3 /usr/local/datax/bin/datax.py ~/datax-jobs/stream_test.json
如果能看到 10 行数据输出,说明 DataX 安装成功!
十二、重要提示
-
HDFS 端口: 确保使用正确的端口 (9000,不是 8020)
-
Python 版本: 必须使用 Python 3 兼容脚本
-
字段分隔符: Tab 字符需要正确转义
-
速度配置: 避免
byte和channel冲突 -
HDFS 路径: 确保目标目录存在且有写权限
十三、卸载 DataX
# 删除安装目录 sudo rm -rf /usr/local/datax # 删除环境变量 (编辑 /etc/profile) sudo vim /etc/profile # 删除 DATAX_HOME 相关配置 # 重新加载 source /etc/profile
安装完成后,继续安装 DataX Web
Deepin下DataX安装配置指南
3611

被折叠的 条评论
为什么被折叠?



