當前位置:首頁 » 文件管理 » hdfs文件夾復制文件

hdfs文件夾復制文件

發布時間: 2022-08-15 08:36:49

1. Hadoop 自身提供將文件從文件系統復制到 HDFS 的功能,有人了解這方面的東東么

命令行 dfs -put 就可以
要是java程序的話 主要看FileSystem那個類相關介面 還有FIleUtil 這個裡面的一些介面!

2. 怎麼查者、刪除、移動、拷貝HDFS上的文件

刪除復制移動文件命令

Linux代碼
rm -rf /file

-r:遞歸處理參數
-f:強制刪除所有文件

Linux代碼
cp /test1/file1 /test3/file2
將file1復制到test3下,並改名為file2

Linux代碼
cp -a test test1
將test目錄下的所有子目錄復制到test1下

Linux代碼
mv /test1/file1 /test2/test2

將file1移動到test2下,並改名為test2

3. hadoop的幾個問題 1.將本地文件復制到hdfs中,那麼在hdfs中這個文件是存放在namenode還是分開放在datanode

試著回答:
先說明一下:
1. namenode負責管理目錄和文件信息,真正的文件塊是存放在datanode上。
2. 每個map和rece(即task)都是java進程,默認是有單獨的jvm的,所以不可能同一個類的對象會在不同節點上。
看你的描述是把namenode,datanode和jobtracker,tasktracker有點混了。

所以:
問題1. 分塊存放在datanode上
問題2.inputformat是在datanode上,確切的說是在tasktracker中。每個map和rece都會有自己的對象,當多個map讀入一個文件時,實際上不同的map是讀的文件不同的塊,rece也是一樣,各個任務讀入的數據是不相交的。
問題3.rece輸出肯定是在hdfs上,和普通文件一樣在datanode上。
問題4.每個recer會有自己的outputformat對象,與前面inputformat原因一樣。

4. 怎樣復制文檔到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>

5. 利用JAVA+API向HDFS文件系統上的文件寫入數據一共有哪三種方法,請敘述該三種

摘要 一.構建環境

6. 如何把hdfs上的多個目錄下的文件合並為一個文件

hdfs dfs -cat /folderpath/folder* | hdfs dfs -FromLocal - /newfolderpath/file
1
1
這樣可以把文件hdfs上 /folderpath目錄下的/folder開頭的文件,還不合並到/newfolderpath目錄下的file一個文件中 注意/folder*必須是文件,而不能是文件夾,如果是文件夾,可以/folder*/*

cat test.txt | ssh test@masternode "hadoop dfs -put - hadoopFoldername/"
1
1
可以這樣把本機的文件put到HDFS上面,而不用先復制文件到集群機器上

7. 如何hadoop distcp ftp目錄中部分文件

hadoop中有一個叫做distcp(分布式復制)的有用程序,能從hadoop的文件系統並行復制大量數據。

distcp一般用於在兩個HDFS集群中傳輸數據。如果集群在hadoop的同一版本上運行,就適合使用hdfs方案:

% hadoop distcp hdfs://namenode1/foo hdfs://namenode2/bar
這將從第一個集群中復制/foo目錄(和它的內容)到第二個集群中的/bar目錄下,所以第二個集群會有/bar/foo目錄結構。如果/bar不存在,則會新建一個。可以指定多個源路徑,並且所有的都會被復制到目標路徑。源路徑必須是絕對路徑。

默認情況下,distcp會跳過目標路徑已經有的文件,但可以通過提供的-overwrite選項進行覆蓋,也可以用-update選項來選擇只更新那些修改過的文件。第一個集群的子樹/foo下的一個文件與第二個集群的改變進行同步。

% hadoop distcp -update hdfs://namenode1/foo hdfs://namenode2/bar/foo
distcp是作為一個MapRece作業執行的,復制工作由集群中並行運行的map來完成。這里沒有recer。每個文件都由一個單一的map進行復制,並且distcp通過將文件分成大致相等的文件來為每個map數量大致相同的數據。

map的數量確定:

通過讓每一個map復制數量合理的數據以最小化任務建立所涉及的開銷,是一個很好的想法,所以每個map的副本至少為256MB。例如,1GB的文件被分成4個map任務。如果數據很大,為限制帶寬和集群的使用而限制映射的數據就變得很有必要。map默認的最大數量是每個集群節點(tasktracker)有20個。例如,復制1000GB的文件到一個100個節點的集群,會分配2000個map(每個節點20個map),所以平均每個會復制512MB。通過對distcp指定-m參數,會減少映射的分配數量。例如,-m 1000會分配1000個map,平均每個復制1GB。

如果想在兩個運行著不同版本HDFS的集群上利用distcp,使用hdfs協議是會失敗的,因為RPC系統是不兼容的。想要彌補這種情況,可以使用基於HTTP的HFTP文件系統從源中進行讀取。這個作業必須運行在目標集群上,使得HDFS RPC版本是兼容的。使用HFTP重復前面的例子:% hadoop distcp hftp://namenode1:50070/foo hdfs://namenode2/bar

注意,需要在URI源中指定名稱節點的Web埠。這是由dfs.http.address的屬性決定的,默認值為50070。

保持HDFS集群的平衡

向HDFS復制數據時,考慮集群的平衡相當重要。文件塊在集群中均勻地分布時,HDFS能達到最佳工作狀態。回顧前面1000 GB數據的例子,通過指定-m選項為1,即由一個單一的map執行復制工作,它的意思是,不考慮速度變慢和未充分利用集群資源,每個塊的第一個副本會存儲在運行map的節點上(直到磁碟被填滿)。第二和第三個副本分散在集群中,但這一個節點並不會平衡。通過讓map的數量多於集群中節點的數量,我們便可避免這個問題。鑒於此,最好首先就用默認的每個節點20個map這個默認設置來運行distcp。

然而,這也並不總能阻止一個集群變得不平衡。也許想限制map的數量以便一些節點可以被其他作業使用。若是這樣,可以使用balancer工具繼續改善集群中塊的分布。

熱點內容
分布式緩存部署步驟 發布:2025-05-14 13:24:51 瀏覽:609
php獲取上一月 發布:2025-05-14 13:22:52 瀏覽:89
購買雲伺服器並搭建自己網站 發布:2025-05-14 13:20:31 瀏覽:688
sqlserver建立視圖 發布:2025-05-14 13:11:56 瀏覽:484
搭建httpsgit伺服器搭建 發布:2025-05-14 13:09:47 瀏覽:255
新電腦拿回來我該怎麼配置 發布:2025-05-14 13:09:45 瀏覽:240
視頻伺服器新建ftp用戶 發布:2025-05-14 13:03:09 瀏覽:225
php花生 發布:2025-05-14 12:54:30 瀏覽:550
java人才 發布:2025-05-14 12:29:10 瀏覽:649
如何打開軟密碼 發布:2025-05-14 12:28:55 瀏覽:427