Deepin系统安装大数据系列教程-第五部分(DataX 安装配置教程)

Deepin下DataX安装配置指南

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

解决方案:

  1. 检查 Hadoop 配置:

hdfs getconf -confKey fs.defaultFS
# 应该输出: hdfs://localhost:9000
  1. 修改 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值不能为空

原因: 同时配置了 bytechannel,但 byte 为空

解决方案: 只保留 channel 配置:

"speed": {
    "channel": 1
}

或者设置 byte 为 -1:

"speed": {
    "channel": 1,
    "byte": -1
}

问题5: MySQL 连接失败

检查项:

  1. 数据库是否运行

  2. 用户名密码是否正确

  3. 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 安装成功!

十二、重要提示

  1. HDFS 端口: 确保使用正确的端口 (9000,不是 8020)

  2. Python 版本: 必须使用 Python 3 兼容脚本

  3. 字段分隔符: Tab 字符需要正确转义

  4. 速度配置: 避免 bytechannel 冲突

  5. HDFS 路径: 确保目标目录存在且有写权限

十三、卸载 DataX

# 删除安装目录
sudo rm -rf /usr/local/datax

# 删除环境变量 (编辑 /etc/profile)
sudo vim /etc/profile
# 删除 DATAX_HOME 相关配置

# 重新加载
source /etc/profile

安装完成后,继续安装 DataX Web

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值