當前位置:首頁 » 文件管理 » hdfsftp

hdfsftp

發布時間: 2022-07-17 10:28:50

Ⅰ 如何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工具繼續改善集群中塊的分布。

Ⅱ 如何使用Spooling Directory Source

最近在弄一個信令數據匯聚的事情,主要目的是把FTP上的信令數據匯聚到HDFS上去存儲。 邏輯是這樣的:把FTP伺服器上的文件下載到一台主機上,然後SCP到另外一台主機上的Spooling Directory Source所監控的目錄下面去,sink是hdfs(這里解釋一下,由於網路環境的因素,另一台不能訪問到內網的FTP伺服器,所以只能這樣中轉一下)。 嗯,想法不錯,邏輯上看上去也應該沒啥問題,於是就開始吭哧吭哧寫腳本了。FTP上每個信令數據的每個文件的大小差不多都有300M左右。SCP到遠端伺服器也沒出現問題,可就是agent老是會掛掉,報這個異常: 2014-11-26 12:30:16,942 ERROR org.apache.flume.source.SpoolDirectorySource: FATAL: Spool Directory source source1: { spoolDir: /var/log/apache/flumeSpool }: Uncaught exception in SpoolDirectorySource thread. Restart or reconfigure Flume to continue processing. java.nio.charset.MalformedInputException: Input length = 1 at java.nio.charset.CoderResult.throwException(CoderResult.java:277) at org.apache.flume.serialization.ResettableFileInputStream.readChar(ResettableFileInputStream.java:195) at org.apache.flume.serialization.LineDeserializer.readLine(LineDeserializer.java:134) at org.apache.flume.serialization.LineDeserializer.readEvent(LineDeserializer.java:72) at org.apache.flume.serialization.LineDeserializer.readEvents(LineDeserializer.java:91) at org.apache.flume.client.avro..readEvents(.java:241) at org.apache.flume.source.SpoolDirectorySource$SpoolDirectoryRunnable.run(SpoolDirectorySource.java:224) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:304) at java.util.concurrent.ScheledThreadPoolExecutor$ScheledFutureTask.access$301(ScheledThreadPoolExecutor.java:178) at java.util.concurrent.ScheledThreadPoolExecutor$ScheledFutureTask.run(ScheledThreadPoolExecutor.java:293) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:745) 然後讓我重啟agent才會把Spooling Directory Source所監控的目錄下面的文件抽取到HDFS上去,感覺很莫名,網上搜索了一下這個錯誤的原因,很多都是說可能傳輸的文件字元集的原因,不以為然,因為我反復測試了一下,如果是字元集的原因,那麼為什麼我重啟一下agent又可以成功的抽取數據了。 於是我想了想是不是由於同時讀寫導致的問題,因為我SCP文件過去,文件較大,需要一定的時間,而flume監測到有文件馬上就開始逐行讀取文件轉化成EVENT發送到HDFS上去,這中間肯定存在同時讀寫一個文件了,然後就產生的這個異常問題? 目前僅僅是猜測,於是我修改了Spooling Directory Source的配置,加了這么一個配置: tier1.sources.source1.ignorePattern = ^(.)*\\.tmp$ 就是忽略監控目錄下面的.tmp文件。然後我修改了scp的邏輯,拷貝到另一台主機上時,先命名為:原文件名.tmp(由於是.tmp文件,agent不會採集此類文件),等SCP執行成功之後,在mv這個.tmp文件,去掉.tmp後綴,這樣agent又會抽取這個文件的數據了,通過這么一處理,就巧妙的避免了同時讀寫一個文件的問題。 腳本調整好之後,重新運行腳本,驚喜的發現成功了,這次agent沒有掛掉,大功告成了。 總結:使用Spooling Directory Source的時候,一定要避免同時讀寫一個文件的情況。採用上面提到的方法就可以巧妙的避開這個問題。

Ⅲ FTP server和分布式文件系統的區別

分布式文件系統(dfs)和分布式資料庫都支持存入,取出和刪除。但是分布式文件系統比較暴力,可以當做key/value的存取。分布式資料庫涉及精煉的數據,傳統的分布式關系型資料庫會定義數據元組的schema,存入取出刪除的粒度較小。
分布式文件系統現在比較出名的有GFS(未開源),HDFS(Hadoop
distributed
file
system)。分布式資料庫現在出名的有Hbase,oceanbase。其中Hbase是基於HDFS,而oceanbase是自己內部實現的分布式文件系統,在此也可以說分布式資料庫以分布式文件系統做基礎存儲。

linux培訓課程內容哪個好

仁者見仁智者見智,情況不同選擇不同,linux培訓課程哪家好的話,這個需要自己去試聽判斷,根據自己的情況選擇合適的才是最好的。

Ⅳ ftp能連接上,但是不顯示文件,怎麼解決

摘要 用戶可以使用Loader將數據從SFTP伺服器導入到HDFS。本章節適用於MRS 3.x之前版本。已准備業務數據。已創建分析集群。登錄集群詳情頁面,選擇「服務管理」。選擇Hue,在Hue概述的Hue WebUI,單擊Hue (主),打開Hue的WebUI。選擇Data BrowsersSqoop。默認顯示Loader頁面中的作業管理界面。

熱點內容
剪力牆壓腳筋大小怎麼配置 發布:2025-01-23 00:50:53 瀏覽:534
騰訊雲cos雲伺服器 發布:2025-01-23 00:46:47 瀏覽:63
如何給安卓平板刷上MIUI系統 發布:2025-01-23 00:45:51 瀏覽:73
2開方演算法 發布:2025-01-23 00:27:21 瀏覽:16
如何看自己steam伺服器 發布:2025-01-23 00:07:21 瀏覽:710
armlinux命令 發布:2025-01-23 00:01:08 瀏覽:137
戰地4亞洲伺服器為什麼被攻擊 發布:2025-01-22 23:45:42 瀏覽:671
javascript反編譯 發布:2025-01-22 23:37:57 瀏覽:432
夏天來了你的巴氏奶存儲對嗎 發布:2025-01-22 23:37:56 瀏覽:206
求最大值c語言 發布:2025-01-22 23:22:35 瀏覽:250