首页 > 解决方案 > 使用来自 HDFS NFS 挂载的 mssql-tools bcp

问题描述

尝试bcp从包中运行(使用 centos7)从通过NFS Gatewaymssql-tools挂载到本地 FS 的 HDFS 位置导出 tsv 文件数据,但遇到类似...的错误

SQLState = S1000,NativeError = 0

错误 = [Microsoft][ODBC Driver 17 for SQL Server]无法打开 BCP 错误文件

或者

SQLState = S1000,NativeError = 0

错误 = [Microsoft][ODBC Driver 17 for SQL Server]无法打开 BCP 主机数据文件

正在运行的 bcp 命令看起来像...

/opt/mssql-tools/bin/bcp "$TABLE" in \
        "$filename" \
        $TO_SERVER_ODBCDSN \
        -U $USER -P $PASSWORD \
        -d $DB \
        $RECOMMEDED_IMPORT_MODE \
        -t "\t" \
        -e ${filename}.bcperror.log

# with the actual commmand w/ variables resolved looks like...
/opt/mssql-tools/bin/bcp "ACCOUNT" in \
    "/HDFS_NFS/path/to/tsv/1_0_0.tsv" \
    -D -S MyMSSQLServer \
    -U myuser -P mypassword \
    -d SOME_MSSQL_DB \
    -c \
    -t \t \
    -e /HDFS_NFS/path/to/store/errlogs/1_0_0.tsv.bcperror.log

所有这一切对我来说似乎都很好,但有时也会出现错误,例如......

/opt/mssql-tools/bin/bcp:未知选项

用法:/opt/mssql-tools/bin/bcp {dbtable | 查询} {在 | 出| 查询 | 格式}数据文件...

所以也不确定那是什么。我的/etc/odbc.ini文件看起来像...

[MyMSSQLServer]
Driver=ODBC Driver 17 for SQL Server
Description=My MS SQL Server
Trace=No
Server=<the server's IP>

任何人都知道任何进一步的调试技巧或修复?

标签: hdfsbcp

解决方案


问题似乎是该-e选项指定的错误日志文件已经存在于指定的位置,并且HDFS(是否通过 NFS 挂载)不喜欢bcp 命令试图覆盖它。你通常会做类似的事情

hadoop fs -put -f /some/local/file /hdfs/location/for/file

我假设 bcp 正在通过 NFS 网关尝试其他不是这个的东西。我想 bcp 访问 HDFS NFS 位置也可能存在延迟问题。-e在最初发布的示例中运行不带该选项的 bcp 命令。

** 作为一种解决方法,基于另一个SO 帖子,我将文件下载 ( hadoop fs -get ...) 到本地临时目录/home/user/tmp/<some uuid>/,然后在那里做需要做的事情hadoop fs -put ...


推荐阅读