Hadoop-寫入資料的幾種方式
阿新 • • 發佈:2019-01-06
create(新建)
import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.InputStream; import java.io.OutputStream; import java.net.URI; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.IOUtils; import org.apache.hadoop.util.Progressable; public class FileCopyShowProgress { public static void main(String[] args) throws Exception{ String inPath="D:\\file1.txt";//本地路徑 String outPath="hdfs://master:9000/input/file1.txt";//hdfs的路徑 InputStream in =new BufferedInputStream(new FileInputStream(inPath)); Configuration conf=new Configuration(); //create在寫入檔案時會自動產生所有的父目錄 FileSystem fs=FileSystem.get(URI.create(outPath),conf); OutputStream out =fs.create(new Path(outPath),new Progressable() { @Override public void progress() { System.out.print("."); } }); IOUtils.copyBytes(in, out, 4096,true); } }
FSDataOutputStream不允許定位,因為HDFS只允許對一個開啟的檔案順序寫入,或向一個已有檔案新增(換句話說,不支援除尾部的其他位置的寫入)。
OutputStream out =fs.create(new Path(outPath),new Progressable() {
//替換為
FSDataOutputStream out =fs.create(new Path(outPath),new Progressable() {