2017-05-24 36 views
0

无法找到将文件从HDFS附加到电子邮件MimeBodyPart的方式。 这是我迄今的尝试。我试图使用FileDataSource和URLDataSource,但没有运气。将文件从HDFS附加到javax.mail电子邮件

val attachmentPart = new MimeBodyPart() 
val filePath = "FILE_PATH" 
val fileName = s"FILE_NAME_${date}.html" 

val fs = FileSystem.get(sctx.hadoopConfiguration) 
val fullURL = fs.getFileStatus(new Path(filePath+fileName)).getPath.toUri.toURL 
//val fullFilePath = fs.getFileStatus(new Path(filePath+fileName)).getPath.toString 

val source = new URLDataSource(fullURL) 
//val source = new FileDataSource(fullFilePath) 
attachmentPart.setDataHandler(new DataHandler(source)) 
attachmentPart.setFileName("file name") 

我得到的一个URLDataSource的情况下,出现以下错误:

Exception in thread "main" java.net.MalformedURLException: unknown protocol: hdfs 
+0

尝试注册Hadoop的FsUrlStreamHandlerFactory处理 '进口org.apache.hadoop.fs.FsUrlStreamHandlerFactory URL.setURLStreamHandlerFactory(新FsUrlStreamHandlerFactory())' –

回答

0

尝试注册了Hadoop的FsUrlStreamHandlerFactory处理与架构HDFS的URL。

import org.apache.hadoop.fs.FsUrlStreamHandlerFactory 
import java.net.URL 
URL.setURLStreamHandlerFactory(new FsUrlStreamHandlerFactory()) 
+0

感谢@胭脂一个它的工作。 –