You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Apache Sqoop与Dataproc从SQL Server导入数据到GCS报错

问题根因说明

你的核心报错是Dataproc集群无法和SQL Server实例建立TCP网络连接,后续的No columns to generate for ClassWriter只是连接失败后的衍生报错,和Sqoop本身的配置、JDBC依赖无关。

排查&解决步骤
  • 第一步确认网络可达性:
    你之前仅检查了SQL Server本身的TCP配置,还需要确认Dataproc集群所在的Google Cloud VPC和SQL Server所在的网络是打通的:
    • 如果SQL Server部署在本地IDC,需要先配置云专线或者VPN打通本地网络和Google Cloud VPC,或者给SQL Server配置公网可访问的固定IP
    • 如果你用主机名RUKSQLRS01访问SQL Server,需要确认Dataproc集群所在VPC的DNS服务可以正确解析这个主机名,建议先把JDBC连接串里的主机名替换为SQL Server的固定IP做测试
  • 第二步检查防火墙规则:
    • 确认SQL Server所在服务器的本地防火墙放行1433端口的入站请求,源地址范围包含Dataproc集群的节点IP段
    • 确认Google Cloud VPC的出口防火墙规则没有禁止到1433端口的出站请求
  • 第三步验证连通性:
    先登录Dataproc集群的主节点,执行telnet <SQL Server IP> 1433或者nc -zv <SQL Server IP> 1433测试网络连通性,如果这一步失败,说明是网络层面的问题,先解决网络问题再调试Sqoop作业
  • 第四步修正JDBC连接参数:
    如果网络连通正常,建议在JDBC连接串中增加encrypt=false参数,避免高版本SQL Server JDBC驱动默认要求加密连接导致连接失败。
测试命令示例
CLUSTERNAME="sqoop-cluster"
BUCKET="gs://sqoop-bucket-20092021"
libs=`gsutil ls $BUCKET/jars | paste -sd, --`
# 替换尖括号内容为你的SQL Server实际IP
JDBC_STR="jdbc:sqlserver://<SQL Server固定IP>:1433;databaseName=RUKDataWarehouse;encrypt=false"
SQL_USER="RUKSQLDataWarehouse_Reporting"
SQL_PASS="gs://sqoop-bucket-20092021/creds/sqoop.password"
TABLE="LBD_Task"
SCHEMA="dbo"

gcloud dataproc jobs submit hadoop \
    --region europe-west2 \
    --cluster="$CLUSTERNAME" \
    --jars=$libs \
    --class=org.apache.sqoop.Sqoop \
    -- \
    import \
    -Dorg.apache.sqoop.splitter.allow_text_splitter=true \
    -Dmapreduce.job.user.classpath.first=true \
    --connect "$JDBC_STR" \
    --username "$SQL_USER" \
    --password-file "$SQL_PASS" \
    --table "$SCHEMA.$TABLE" \
    --warehouse-dir "$BUCKET/output/$TABLE" \
    --num-mappers 1 \
    --as-avrodatafile

内容的提问来源于stack exchange,提问作者Muntasir Tusher

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 14:39:04