カスタムRマップを使ってHDFSにデータを書き込もうとしています。私はかなり早い段階でプロセスを読み込んでいますが、後処理にはかなりの時間を要します。私は、しかし、はwrite.table部分的にしか情報を書き込む(最初の数行と最後の数行)とwriteLinesが動作しない(ファイル接続に書き込むことができる機能)RからHDFSに書き込む最速の方法(パッケージ無し)
output <- file("stdout", "w")
write.table(base,file=output,sep=",",row.names=F)
writeLines(t(as.matrix(base)), con = output, sep = ",", useBytes = FALSE)
を試してみました。だから今私は試みている:
for(row in 1:nrow(base)){
cat(base[row,]$field1,",",base[row,]$field2,",",base[row,]$field3,",",base[row,]$field4,",",
base[row,]$field5,",",base[row,]$field6,"\n",sep='')
}
しかし、これは非常に遅い書き込み速度。ここについてのいくつかのログには、どのように遅い書き込み速度は次のとおりです。
2016年7月7日08:59:30557 INFO [スレッド-49] org.apache.hadoop.streaming.PipeMapRed:レコードR/W = 921203/406056 2016-07-07 08:59:40,567 INFO [Thread-49] org.apache.hadoop.streaming.PipeMapRed:レコードR/W = 921203/406422 2016-07-07 08:59:50,582 INFO [Thread-49] org.apache.hadoop.streaming.PipeMapRed:レコードR/W = 921203/406710 2016-07-07 09:00:00,947 INFO [スレッド49] org.apache.hadoop.streaming .PipeMapRed:レコードR/W = 921203/407001 2016-07-07 09:00:11,392 INFO [スレッド49] org.apache .hadoop.streaming.PipeMapRed:レコードR/W = 921203/407316 2016-07-07 09:00:21,832 INFO [スレッド49] org.apache.hadoop.streaming.PipeMapRed:レコードR/W = 921203/407683 2016-07-07 09:00:31,883 INFO [スレッド49] org.apache.hadoop.streaming.PipeMapRed:レコードR/W = 921203/408103 2016-07-07 09:00:41,892情報[スレッド49] org.apache.hadoop.streaming.PipeMapRed:レコードR/W = 921203/408536 2016-07-07 09:00:51,895 INFO [スレッド49] org.apache.hadoop.streaming.PipeMapRed :レコードR/W = 921203/408969 2016-07-07 09:01:01,903情報[Thread-49] org.apache.hadoop.streaming.PipeMapRed:レコードR/W = 921203/409377 2016-07- 07 09:01:12,187 INFO [スレッド49] org.apache.hadoop.streaming.PipeMapRed:レコードR/W = 921203/409782 2016-07-07 09:01:22,198 INFO [Thread-49] org.apache.hadoop.streaming.PipeMapRed:レコードR/W = 921203/410161 2016-07-07 09:01:32,293 INFO [Thread-49] org.apache.hadoop.streaming.PipeMapRed:レコードR/W = 921203/410569 2016-07-07 09:01 :42,509 INFO [Thread-49] org.apache.hadoop.streaming.PipeMapRed:レコードR/W = 921203/410989 2016-07-07 09:01:52,515 INFO [Thread-49] org.apache.hadoop 。Streaming.PipeMapRed:レコードR/W = 921203/411435 2016-07-07 09:02:02,525 INFO [Thread-49] org.apache.hadoop.streaming.PipeMapRed:レコードR/W = 921203/411814 2016-07-07 09:02:12,625情報[T hread-49] org.apache.hadoop.streaming.PipeMapRed:レコードR/W = 921203/412196 2016-07-07 09:02:22,988 INFO [スレッド49] org.apache.hadoop.streaming.PipeMapRed :レコードR/W = 921203/412616 2016-07-07 09:02:32,991 INFO [スレッド49] org.apache.hadoop.streaming.PipeMapRed:レコードR/W = 921203/413078 2016-07- 07 09:02:43,104 INFO [Thread-49] org.apache.hadoop.streaming.PipeMapRed:レコードR/W = 921203/413508 2016-07-07 09:02:53,115 INFO [Thread-49] 組織.apache.hadoop.streaming.PipeMapRed:レコードR/W = 921203/413975 2016-07-07 09:03:03,122 INFO [Thread-49] org.apache.hadoop.streaming。PipeMapRed:レコードR/W = 921203/414415 2016-07-07 09:03:13,128 INFO [スレッド49] org.apache.hadoop.streaming.PipeMapRed:レコードR/W = 921203/414835 2016-07 -07 09:03:23,131 INFO [Thread-49] org.apache.hadoop.streaming.PipeMapRed:レコードR/W = 921203/415210 2016-07-07 09:03:33,143 INFO [スレッド49] org.apache.hadoop.streaming.PipeMapRed:レコードR/W = 921203/415643 2016-07-07 09:03:43,153 INFO [スレッド49] org.apache.hadoop.streaming.PipeMapRed:レコードR/W = 921203/416031
私は何か間違っていると思います。私はdata.tableを使用しています。
おそらく['write.hdfs'](http://www.inside-r.org/packages/cran/rHadoopClient/docs/write.hdfs)。 – nrussell
おそらくwrite.hdfs 'write.hdfs < - のコードではありません(データ、hdfs.path、hadoop.cmd =" hadoop "、sep =" \ t "){ tmp.file < - sprintf(" tmp_hadoop_% (データ、ファイル= tmp.file、row.names = F、引用符= F、col.names = F、sep = sep) cmd < - sprintf( "cat%s |%s fs -put - %s"、tmp.file、hadoop.cmd、hdfs.path) 結果< - system(command = cmd) file.remove(tmp.file ) result } write.table(data、file = tmp.file'は、JVMメモリを消費し、中間ファイルを書き込んでHDFSにロードした後、良い解決策のように見えません。 – abhiieor