當前位置:首頁 » 服務存儲 » 怎麼把大文件存儲到hdfs
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

怎麼把大文件存儲到hdfs

發布時間: 2022-01-17 15:15:08

A. hadoop 中文件是怎麼存儲

1、存儲文件的時候需要指定存儲的路徑,這個路徑是HDFS的路徑。而不是哪個節點的某個目錄。比如./hadoopfs-putlocalfilehdfspat

一般操作的當前路徑是/user/hadoop比如執行./hadoopfs-ls.實際上就相當於./hadoopfs-ls/user/hadoop

2、HDFS本身就是一個文件系統,在使用的時候其實不用關心具體的文件是存儲在哪個節點上的。如果需要查詢可以通過頁面來查看,也可以通過API來實現查詢。

B. hdfs 大文件怎麼部署到不同的節點

部署到不同節點? 不需要呀,當你把文件上傳到hdfs後hdfs會自動將文件切分成很多塊,存放到不同節點,並且進行備份存儲,不需要人為地分開存放

C. hdfs 在存儲大文件是分塊存儲的,默認塊大小是128M ,那麼map 在讀取的時候為什麼還切片

小於128m為1個split,大於128m小於256m就是2個split,分成128m一個split和剩下的一個split

D. HDFS的文件存儲過程

在正式介紹HDFS小文件存儲方案之前,我們先介紹一下當前HDFS上文件存取的基本流程。
(1) 讀文件流程
1)client端發送讀文件請求給namenode,如果文件不存在,返回錯誤信息,否則,將該文件對應的block及其所在datanode位置發送給client
2) client收到文件位置信息後,與不同datanode建立socket連接並行獲取數據。
(2) 寫文件流程
1) client端發送寫文件請求,namenode檢查文件是否存在,如果已存在,直接返回錯誤信息,否則,發送給client一些可用namenode節點
2) client將文件分塊,並行存儲到不同節點上datanode上,發送完成後,client同時發送信息給namenode和datanode
3) namenode收到的client信息後,發送確信信息給datanode
4) datanode同時收到namenode和datanode的確認信息後,提交寫操作。

E. hdfs適合存儲多大的單個文件

首先hdfs是建立在多個機器文件系統上的一個邏輯上的文件系統。
它的底層數據以數據塊方式存儲,塊大小可進行調整。

F. Hadoop中大文件上傳後是否被分割存儲在NDFS中

hdfs存儲文件是按照塊來的,hdfs的塊大小默認是256M,可以自己設置,一個大文件會被切分成很多塊存儲到不同的地方,同時每個塊也會備份多份。

G. hadoop是怎麼存儲大數據的

Hadoop中有很多方法可以加入多個數據集。MapRece提供了Map端和Rece端的數據連接。這些連接是非平凡的連接,並且可能會是非常昂貴的操作。Pig和Hive也具有同等的能力來申請連接到多個數據集。Pig提供了復制連接,合並連接和傾斜連接(skewed join),並且Hive提供了map端的連接和完整外部連接來分析數據。

一個重要的事實是,通過使用各種工具,比如MapRece、Pig和Hive等,數據可以基於它們的內置功能和實際需求來使用它們。至於在Hadoop分析大量數據,Anoop指出,通常,在大數據/Hadoop的世界,一些問題可能並不復雜,並且解決方案也是直截了當的,但面臨的挑戰是數據量。在這種情況下需要不同的解決辦法來解決問題。

一些分析任務是從日誌文件中統計明確的ID的數目、在特定的日期范圍內改造存儲的數據、以及網友排名等。所有這些任務都可以通過Hadoop中的多種工具和技術如MapRece、Hive、Pig、Giraph和Mahout等來解決。這些工具在自定義常式的幫助下可以靈活地擴展它們的能力。

H. 怎樣復制文檔到hdfs默認目錄

在Hadoop中用作文件操作的主類位於org.apache.hadoop.fs包中。基本的文件操作有open、read、write和close。實際上,Hadoop的文件API是通用的,可用於HDFS以外的文件系統。
Hadoop文件API的起點是FileSystem類,這是一個與文件系統交互的抽象類,存在不同的具體實現子類來處理HDFS和本地文件系統,可以通過調用factory方法FileSystem.get(Configuration conf)來得到所需的FileSystem實例。Configuration類適用於保留鍵/值配置參數的特殊類。它的默認實例化方法是以HDFS系統的資源配置為基礎的。
如下,可以得到與HDFS介面的FileSystem對象:
Configuration conf = new Configuration();
FileSystem hdfs = FileSystem.get(conf);
要得到一個專用於本地文件系統的FileSystem對象:
FileSystem local = FileSystem.getLocal(conf);
Hadoop文件API用Path對象來編制文件和目錄名,使用FileStatus對象來存儲文件和目錄的元數據。使用listStatus()方法得到一個目錄中的文件列表:
Path inputDir = new Path(args[0]);
FileStatus[] inputFiles = local.listStatus(inputDir);
數組inputFiles的長度等於指定目錄中文件的個數,在inputFiles中每一個FileStatus對象均有元數據信息,如文件長度、許可權、修改時間等。

可以用命令行bin/hadoop fs -put 把本地文件復制到HDFS,也可以自己實現。

下面的程序編譯打包後,可以直接運行如下的命令,實現自己的上傳功能:
hadoop jar file.jar FileCopy cite2.txt cite2.txt

下面是FileCopy的代碼。
[java] view plain
<span style="font-size:18px;">import java.net.URI;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
public class FileCopy
{
public static void main(String[] args) throws Exception
{
if(args.length != 2){
System.err.println("Usage : file <source> <target>");
System.exit(2);
}
Configuration conf = new Configuration();
InputStream input = new BufferedInputStream(new FileInputStream(args[0]));
FileSystem fs = FileSystem.get(URI.create(args[1]),conf);
OutputStream output = fs.create(new Path(args[1]));
IOUtils.Bytes(input,output,4096,true);
}
}</span>

I. 如何實現讓用戶在網頁中上傳下載文件到HDFS中

hadoop計算需要在hdfs文件系統上進行,文件上傳到hdfs上通常有三種方法:a hadoop自帶的dfs服務,put;b hadoop的API,Writer對象可以實現這一功能;c 調用OTL可執行程序,數據從資料庫直接進入hadoop

hadoop計算需要在hdfs文件系統上進行,因此每次計算之前必須把需要用到的文件(我們稱為原始文件)都上傳到hdfs上。文件上傳到hdfs上通常有三種方法:

a hadoop自帶的dfs服務,put;

b hadoop的API,Writer對象可以實現這一功能;

c 調用OTL可執行程序,數據從資料庫直接進入hadoop

由於存在ETL層,因此第三種方案不予考慮

將a、b方案進行對比,如下:

1 空間:方案a在hdfs上佔用空間同本地,因此假設只上傳日誌文件,則保存一個月日誌文件將消耗掉約10T空間,如果加上這期間的各種維表、事實表,將佔用大約25T空間

方案b經測試,壓縮比大約為3~4:1,因此假設hdfs空間為100T,原來只能保存約4個月的數據,現在可以保存約1年

2 上傳時間:方案a的上傳時間經測試,200G數據上傳約1小時

方案b的上傳時間,程序不做任何優化,大約是以上的4~6倍,但存在一定程度提升速度的餘地

3 運算時間:經過對200G數據,大約4億條記錄的測試,如果程序以IO操作為主,則壓縮數據的計算可以提高大約50%的速度,但如果程序以內存操作為主,則只能提高5%~10%的速度

4 其它:未壓縮的數據還有一個好處是可以直接在hdfs上查看原始數據。壓縮數據想看原始數據只能用程序把它導到本地,或者利用本地備份數據

壓縮格式:按照hadoop api的介紹,壓縮格式分兩種:BLOCK和RECORD,其中RECORD是只對value進行壓縮,一般採用BLOCK進行壓縮。

對壓縮文件進行計算,需要用SequenceFileInputFormat類來讀入壓縮文件,以下是計算程序的典型配置代碼:

JobConf conf = new JobConf(getConf(), log.class);
conf.setJobName(」log」);
conf.setOutputKeyClass(Text.class);//set the map output key type
conf.setOutputValueClass(Text.class);//set the map output value type

conf.setMapperClass(MapClass.class);
//conf.setCombinerClass(Rece.class);//set the combiner class ,if havenot, use Recuce class for default
conf.setRecerClass(Rece.class);
conf.setInputFormat(SequenceFileInputFormat.class);//necessary if use compress

接下來的處理與非壓縮格式的處理一樣

J. 1g的文件在hadoop是怎麼存儲的

hdfs是按塊進行存儲的。1GB文件會劃分成若干塊(默認64MB一個塊,也可以自己配置),然後分配到不同的存儲節點上存儲。
nameserver會記錄哪些塊存儲在哪個節點上,等讀的時候需要訪問nameserver,獲取到不同的數據節點,然後再訪問數據即可。