在3个表上应用联接后,我正在Google Cloud上运行sqoop作业以从psql数据库导入数据。但是,sqoop作业由于以下错误而失败,尽管它在15分钟内从表中导入了数据,但运行2小时后却失败了。我能够轻松提取其他表格。
数据大小:13GB
查询:gcloud compute ssh $ INSTANCE_NAME --project = $ PROJECT_ID --service-account = $ ACCOUNT --command =“”“ $ SQOOP_HOME / bin / sqoop-import -D mapreduce.output.basename ='$ TABLE_EXPORT'--connect jdbc:$ JDBC:// $ HOST_NAME:$ PORT / $ DATABASE-用户名$ USERNAME --password'$ PASSWORD'--target-dir $ BUCKET_STORAGE -m $ NUM_WORKERS-被$ SPLIT_BY分割--query'$ QUERY \ $ CONDITIONS'--map-column-java $ MAPPING_COLUMNS --fields-terminated-通过“ |” -空字符串''“”“ --zone = $ ZONE 2>&1
错误:
12/06/20 22:14:36 INFO mapreduce.Job:地图0%减少0%
12/06/20 22:14:49信息mapreduce。工作:地图50%减少0%
12/06/20 22:14:50信息mapreduce。工作:地图75%减少0%
packet_write_wait:连接到XX.XX.XXX.XXX端口XX:管道损坏
错误:(gcloud.compute.ssh)[/ usr / bin / ssh]退出并返回了代码 [255]。
以返回码1退出的命令
答案 0 :(得分:2)
packet_write_wait: Connection to XX.XX.XXX.XXX port XX: Broken pipe
错误通常表示连接已终止,因为它已经空闲了一段时间,考虑到您的命令在2小时后失败,这是有道理的。
为此,在another Stack post中建议通过配置ServerAliveInternal和ServerAliveCountMax来维持连接,我建议您阅读它们的用途。
本质上,ServerAliveInternal设置一个时间值,当达到该时间值时,它将使ssh发送消息以请求来自服务器的消息,而ServerAliveCountMax设置可发送的ServerAliveInternal消息的数量,而无需在终止之前从服务器收到回音连接。
您需要在客户端的〜/ .ssh / config文件中进行配置,然后可以选中this Stack post for reference或此thread with the same issue。