2013-07-25 81 views
2

我試圖將我的本地機器上的文件複製到我的hdfs。但是,我不確定如何在scala中執行此操作,因爲我正在編寫的腳本當前寫入本地CSV文件。如何使用scala將此文件移動到HDFS?使用scala將文件複製到hadoop hdfs?

編輯: 什麼我現在已經完成:

val hiveServer = new HiveJDBC 
    val file = new File(TMP_DIR, fileName) 
    val firstRow = getFirstRow(tableName, hiveServer) 
    val restData = getRestData(tableName, hiveServer) 
    withPrintWriter(file) { printWriter => 
     printWriter.write(firstRow) 
     printWriter.write("\n") 
     printWriter.write(restData)} 

我現在要存儲的 「文件」 在HDFS

+1

你能告訴我們你做了什麼嗎? – Tariq

+0

@Tariq完成!往上看 :) – vsingal5

回答

2

斯卡拉可以直接調用API的Hadoop。例如,

val conf = new Configuration() 
    val fs= FileSystem.get(conf) 
    val output = fs.create(new Path("/your/path")) 
    val writer = new PrintWriter(output) 
    try { 
     writer.write(firstRow) 
     writer.write("\n") 
     writer.write(restData) 
    } 
    finally { 
     writer.close() 
    } 
0

在運行方法中添加代碼內容。

val conf = getConf() 
val hdfs = FileSystem.get(conf) 
val localInputFilePath = arg(0) 
val inputFileName = getFileName(localInputFilePath) 

var hdfsDestinationPath = arg(1) 
val hdfsDestFilePath = new Path(hdfsDestinationPath + File.separator + inputFileName) 

try { 
    val inputStream: InputStream = new FileInputStream(localInputFilePath); 
    val fsdos: FSDataOutputStream = hdfs.create(hdfsDestFilePath); 
    IOUtils.copyBytes(inputStream, fsdos, conf, true); 

} catch { 
    case fnfe: FileNotFoundException => fnfe.printStackTrace(); 
    case ioe: IOException   => ioe.printStackTrace(); 
} 
相關問題