从 HDFS NFS 安装使用 mssql-tools bcp

Using mssql-tools bcp from HDFS NFS mount

尝试 运行 bcpmssql-tools 包(使用 centos7)导出 tsv 文件数据从 通过 [= 安装到本地 FS 的 HDFS 位置18=],但 运行 会遇到类似...

的错误

SQLState = S1000, NativeError = 0

Error = [Microsoft][ODBC Driver 17 for SQL Server]Unable to open BCP error-file

SQLState = S1000, NativeError = 0

Error = [Microsoft][ODBC Driver 17 for SQL Server]Unable to open BCP host data-file

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: unknown option

usage: /opt/mssql-tools/bin/bcp {dbtable | query} {in | out | queryout | format} datafile ...

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

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

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

问题似乎是由 -e 选项指定的错误记录文件 已经存在 在指定的位置并且 HDFS (是否通过 NFS 安装)不喜欢 bcp 命令试图覆盖它。你通常会做类似

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

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

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