将 Spark 作业写入 NFSv3 安装卷的变音问题
Umlaut problems with Spark job writing to an NFSv3 mounted volume
我正在尝试在 spark 作业期间将文件复制到 nfsv3 安装卷。一些文件包含变音符号。例如:
格式错误的输入或输入包含无法映射的字符:
/import/nfsmountpoint/Währungszählmaske.pdf
错误发生在以下scala代码行中:
//targetPath is String and looks ok
val target = Paths.get(targetPath)
文件编码显示为 ANSI X3.4-1968,尽管 spark 机器上的 linux 语言环境设置为 en_US.UTF-8。
我已经尝试使用以下参数更改 spark 作业本身的语言环境:
--conf 'spark.executor.extraJavaOptions=-Dsun.jnu.encoding=UTF8 -Dfile.encoding=UTF8'
--conf 'spark.driver.extraJavaOptions=-Dsun.jnu.encoding=UTF8 -Dfile.encoding=UTF8'
这解决了错误,但目标卷上的文件名如下所示:
/import/nfsmountpoint/W?hrungsz?hlmaske.pdf
卷安装点是:
hnnetapp666.mydomain:/vol/nfsmountpoint on /import/nfsmountpoint type nfs (rw,nosuid,relatime,vers=3,rsize=65536,wsize=65536,namlen=255,hard,noacl,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=4.14.1.36,mountvers=3,mountport=4046,mountproto=udp,local_lock=none,addr=4.14.1.36)
有没有办法解决这个问题?
通过如上所述设置编码设置并手动与 UTF-8 相互转换来解决此问题:
Solution for encoding conversion
只使用支持 UTF-8 的 NFSv4 会是一个更简单的解决方案。
我正在尝试在 spark 作业期间将文件复制到 nfsv3 安装卷。一些文件包含变音符号。例如:
格式错误的输入或输入包含无法映射的字符: /import/nfsmountpoint/Währungszählmaske.pdf
错误发生在以下scala代码行中:
//targetPath is String and looks ok
val target = Paths.get(targetPath)
文件编码显示为 ANSI X3.4-1968,尽管 spark 机器上的 linux 语言环境设置为 en_US.UTF-8。
我已经尝试使用以下参数更改 spark 作业本身的语言环境:
--conf 'spark.executor.extraJavaOptions=-Dsun.jnu.encoding=UTF8 -Dfile.encoding=UTF8'
--conf 'spark.driver.extraJavaOptions=-Dsun.jnu.encoding=UTF8 -Dfile.encoding=UTF8'
这解决了错误,但目标卷上的文件名如下所示: /import/nfsmountpoint/W?hrungsz?hlmaske.pdf
卷安装点是:
hnnetapp666.mydomain:/vol/nfsmountpoint on /import/nfsmountpoint type nfs (rw,nosuid,relatime,vers=3,rsize=65536,wsize=65536,namlen=255,hard,noacl,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=4.14.1.36,mountvers=3,mountport=4046,mountproto=udp,local_lock=none,addr=4.14.1.36)
有没有办法解决这个问题?
通过如上所述设置编码设置并手动与 UTF-8 相互转换来解决此问题:
Solution for encoding conversion
只使用支持 UTF-8 的 NFSv4 会是一个更简单的解决方案。