【问题标题】:Incremental Sqoop on Dataproc gives "util.AppendUtils: Cannot append files to target dir; no such directory"Dataproc 上的增量 Sqoop 给出“util.AppendUtils:无法将文件附加到目标目录;没有这样的目录”
【发布时间】:2020-06-25 21:05:43
【问题描述】:

我可以通过 hadoop/google dataproc 上的 sqoop 作业运行 postgresql 表的完整导出,以导出到 google 存储桶。但是当我尝试增量导出时,它会失败。

gcloud dataproc jobs submit hadoop \
  --cluster="$CLUSTER_NAME" \
  --class=org.apache.sqoop.Sqoop \
  --properties=mapreduce.job.classloader=true \
  --jars="$UBER_JAR" \
  --region="$CLUSTER_REGION" \
  -- job --create "$job_name" \
  -- import \
  --connect="${CONNECTION_STRING}" \
  --username="${SOURCE_USER}" \
  --password="${SOURCE_PASSWORD}" \
  --target-dir="gs://$WAREHOUSE_BUCKET_NAME/${EXPORT_DIRNAME}/${job_name}" \
  --table="$table_name" \
  --as-avrodatafile \
  --incremental=append \
  --split-by="${split_by}" \
  --check-column created \
  --last-value "2017-01-01 00:00:00.000000" \
  --verbose

日志表明它能够导出数据,但谷歌存储桶中没有任何内容。我看到警告“util.AppendUtils:无法将文件附加到目标目录;没有这样的目录”

...
20/03/13 20:52:18 INFO mapreduce.ImportJobBase: Transferred 4.6844 MB in 15.9306 seconds (301.106 KB/sec)
20/03/13 20:52:18 INFO mapreduce.ImportJobBase: Retrieved 27783 records.
20/03/13 20:52:18 DEBUG util.ClassLoaderStack: Restoring classloader: sun.misc.Launcher$AppClassLoader@7dc36524
20/03/13 20:52:18 WARN util.AppendUtils: Cannot append files to target dir; no such directory: _sqoop/df1bc552c9754b5aa2db3a6c04b03a75_insights_action
20/03/13 20:52:18 INFO tool.ImportTool: Incremental import complete! To run another incremental import of all data following this import, supply the following arguments:
20/03/13 20:52:18 INFO tool.ImportTool:  --incremental append
20/03/13 20:52:18 INFO tool.ImportTool:   --check-column created
20/03/13 20:52:18 INFO tool.ImportTool:   --last-value 2020-03-13 14:54:01.997784
20/03/13 20:52:18 INFO tool.ImportTool: (Consider saving this with 'sqoop job --create')
Job [1673b419f6c042d18dd8124f06e9c412] finished successfully.

知道是否有解决方法吗?

【问题讨论】:

  • 如果在运行作业之前手动创建目标目录会怎样?
  • ...我不知道如何在 Hadoop 集群上做到这一点。作业执行之间似乎不一致
  • gsutil cp placeholder.txt gs://$WAREHOUSE_BUCKET_NAME/${EXPORT_DIRNAME}/${job_name}/ 呢?
  • 那不是内部sqoop目录,那是我的输出目录。

标签: hadoop sqoop google-cloud-dataproc


【解决方案1】:

This is 不是错误只是警告,不应导致 Sqoop 作业失败:

// This occurs if there was no source (tmp) dir. This might happen
// if the import was an HBase-target import, but the user specified
// --append anyway. This is a warning, not an error.

【讨论】:

  • 它在一个名为append 的方法中,该警告条件调用return 而不附加任何内容。所以它对我来说仍然是一个错误。也许错误在于它是警告而不是错误。无论如何,这项工作确实失败了,因为target-dir 中没有显示任何内容。
  • 如果您将--target-dir 设置为HDFS 而不是GCS,它的行为是否相同?另外,您使用什么 Sqoop 版本以及如何安装它?
猜你喜欢
  • 1970-01-01
  • 2017-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-18
  • 2017-08-27
相关资源
最近更新 更多