1. 程式人生 > >採用檔案流寫HDFS大檔案

採用檔案流寫HDFS大檔案

最近有個需求,要把筆記本上的一個近30GB的檔案寫到HDFS上去。無奈虛擬機器伺服器的本地硬碟都只有20GB的容量,原始檔案無法採用copyFromLocal。試了一下筆記本通過copyFromLocal寫到HDFS,無奈龜速。最後想到一個辦法:

  • 壓縮檔案,gz檔案大概到7G的樣子;
  • 拷貝gz檔案至伺服器vm1;
  • 在vm1上寫程式,讀取gz檔案資料流,寫到HDFS檔案上去;

結果看起來還不錯,程式碼如下:

import java.io.FileInputStream
import java.util.zip.GZIPInputStream
import java.io.File
import org.apache
.hadoop.fs.FileSystem import org.apache.hadoop.conf.Configuration import org.apache.hadoop.fs.Path import java.net.URI object CopyZipFile { def main(args: Array[String]) = { val fn = args(0); val hfn = args(1); println(s"open file: $fn, save file: $hfn"); val in = new FileInputStream(new File(fn));
val conf = new Configuration(); val fs = FileSystem.get(URI.create(hfn), conf); val out = fs.create(new Path(URI.create(hfn))); val ungzip = new GZIPInputStream(in); var buffer = new Array[Byte](102400); var n = 0; while (n >= 0) { n = ungzip.read
(buffer); if (n >= 0) out.write(buffer, 0, n); } out.close(); in.close; } }

程式碼一般,記下來,沒準會有一點參考價值。第一次真心體會到gzip資料流的優勢,哈哈~~

由於這是個maven專案,最後在伺服器上的執行命令是:

mvn exec:java -Dexec.mainClass="CopyZipFile" -Dexec.args="/root/dblp.rdf.gz hdfs://vm122:9000/dblp.rdf"

相關推薦

採用檔案HDFS檔案

最近有個需求,要把筆記本上的一個近30GB的檔案寫到HDFS上去。無奈虛擬機器伺服器的本地硬碟都只有20GB的容量,原始檔案無法採用copyFromLocal。試了一下筆記本通過copyFromLocal寫到HDFS,無奈龜速。最後想到一個辦法: 壓縮檔案,

位元組與字元,位元組和字元的使用哪個多? java 讀操作檔案 BufferedReader和RandomAccessFile

一 首先我們要知道 在程式中所有的資料都是以流的方式進行傳輸或儲存的   而流有兩種 位元組流用來處理位元組或二進位制物件 字元流主要用來處理字元或字串,一個字元佔兩個位元組 而上一篇的java 讀寫操作大檔案 BufferedReader和RandomAccessFile Buf

yuv與rgb資料成jpeg檔案模板

YUV轉圖片如果偏藍色,則證明是nv12,nv12 與nv21的資料反了生成的圖片與rgb與bgr反了效果一樣。 YUV生成檔案圖片 private void toJPG(byte[] bytes, int nWidth, int nHeigh) {

ASP.NET使用檔案的方式下載檔案

               //以字元流的形式下載檔案                 string filePath = "D://

C 檔案(二進位制檔案

  我們將介紹 C 程式設計師如何建立、開啟、關閉文字檔案或二進位制檔案。 一個檔案,無論它是文字檔案還是二進位制檔案,都是代表了一系列的位元組。C 語言不僅提供了訪問頂層的函式,也提供了底層(OS)呼叫來處理儲存裝置上的檔案。本章將講解檔案管理的重要呼叫。 開啟檔案 您可

Git突破檔案限制上傳檔案

文章目錄 一、工作環境 二、大檔案上傳 參考文獻 一、工作環境 作業系統:Windows10 64bits Git版本: Git-2.19.1 二、大檔案上傳 如果發現檔案過大不能上傳到github可以安裝LFS(Large

利用 Blob 處理 node 層返回的二進位制檔案字串並下載檔案

部落格地址:https://ainyi.com/#/65 解釋 | 背景 看到標題有點懵逼,哈哈,實際上是後端將檔案處理成二進位制流,返回到前端,前端處理這個二進位制字串,輸出檔案或下載 最近公司有個需求是使用者在點選下載檔案(==pdf==)的時候,下載地址不能暴露在介面的返回值,前端不要通過這個地址

android檔案,ndk檔案

                1 android檔案讀寫相關文章 http://sunzone.iteye.com/blog

檔案複製資料到檔案 , 將檔案1.txt的內容複製到2.txt 中

#include <iostream> #include <fstream> using namespace std; int main(){ifstream f1;char

檔案FileInputStream 把一個檔案的內容轉到另一個檔案

import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOE

MFC檔案之ini檔案

什麼是ini檔案? initialization File,即為初始化檔案,是windows的系統配置檔案所採用的儲存格式,統管windows的各項配置。或者作為專案中的配置檔案,為整個專案所共用。 檔案格式為 節、鍵、值。其中節為[Section name], 引數

檔案操作--將一個檔案複製到另外一個地方

class Program { static void Main(string[] args) { //源 string source = @"C:\Users\Steve\Deskto

Hadoop程式設計學習(四):使用FileSystem類進行檔案及檢視檔案資訊

http://www.cnblogs.com/beanmoon/archive/2012/12/11/2813235.html 在這一節我們要深入瞭解Hadoop的FileSystem類——這是與與hadoop的檔案系統互動的重要介面。雖然我們只是著重於HDFS的實現,但

c# 去掉檔案讀取的txt檔案中的空格

百度沒有查到,試驗出一個簡單的方法如下dr[0] = data[0].Trim();//去除字串中的空格private void button1_Click(object sender, EventArgs e) { //建立一個開啟檔

Python 備份檔案,以及備份檔案

今天分享一個很有用的小程式碼~ 就是關於檔案的備份 import os #匯入os模組 ori_file_name = r'E:\PYTHON\mayday.mp3' #輸入檔案路徑 if os.path.isfile(ori_file_name): #判斷該

檔案(記憶體到檔案檔案到記憶體,記憶體到螢幕)

功能,輸入到檔案,從檔案輸出到螢幕,然後統計輸出結果。 #include <iostream>#include <fstream>#include <string>

就算萌新也能看得懂的gulp教程(1):①讀檔案②修改③到新檔案

1、安裝gulp 核心點是gulp檔案的檔名一定是:gulpfile.js。 task就是一個任務(要做的一系列事) 執行通過gulp來執行預設的task或者通過gulp task名來執行指定的task(因為一個gulp檔案裡可能有多個互相獨立的t

C++檔案之獲取檔案大小的幾種常見的方式

對檔案操作時有時獲得檔案的大小時必要的.下面是獲得其大小小的較簡單方法. #include<io.h> //C語言標頭檔案 #include<iostream> //for s

NetCore3.0 檔案上傳與檔案上傳的限制

NetCore檔案上傳兩種方式   NetCore官方給出的兩種檔案上傳方式分別為“緩衝”、“流式”。我簡單的說說兩種的區別,   1.緩衝:通過模型繫結先把整個檔案儲存到記憶體,然後我們通過IFormFile得到stream,優點是效率高,缺點對記憶體要求大。

學習筆記:從0開始學習資料-5.hadoop hdfs檔案api操作

學習測試,網上下的程式碼,測試通過,助於理解讀寫程式流程 package com.linbin.testmaven; import java.net.URI; import java.text.SimpleDateFormat; import java.util.Date; import or