2012-01-04 63 views
3

我的問題是,爲什麼我們需要指定一個DEST。我在hdfs中放入的文件不一定完全位於本地機器上,那麼在命令中指定dest的用法是什麼。Hadoop的DFS -copyFromLocal SRC DEST

當我通過命令謊言運行命令,再後來做Hadoop的DFS -ls我可以看到我的文件中獲取列在HDFS但是當我創建文件親語法使用

FileSystem fs  = FileSystem.get(conf); 
Path filenamePath = new Path("hello.txt"); 
fs.create(filenamePath); 

再後來做hadoop dfs -ls我找不到這個文件。

在我的核心-site.xml中,我有以下...

<!-- In: conf/core-site.xml --> 
<property> 
    <name>hadoop.tmp.dir</name> 
    <value>/home/apurv/hadoop/hdfs</value> 
    <description>A base for other temporary directories.</description> 
</property> 

<property> 
    <name>fs.default.name</name> 
    <value>hdfs://localhost:54310</value> 
    <description>The name of the default file system. A URI whose 
    scheme and authority determine the FileSystem implementation. The 
    uri's scheme determines the config property (fs.SCHEME.impl) naming 
    the FileSystem implementation class. The uri's authority is used to 
    determine the host, port, etc. for a filesystem.</description> 
</property> 

直覺也並不意義,我哪裏複製的文件駐留,因爲它可能大到足以駐留在一臺機器。

回答

2

我們聊關於它對話,我有更多的時間來解釋這個給你。

如果你使用這個片段在代碼:

FileSystem fs  = FileSystem.get(conf); 
// stuff to create 

那麼,重要的是什麼conf對象內。如果你沒有任何東西,返回的FileSystem始終是本地的。

如果你把這個在你的conf:

conf.set("fs.default.name", "hdfs://localhost:54310"); 

,那麼你應該通過名稱節點連接到您的HDFS是「服務器」,你能夠寫入HDFS。

如果您想讓配置讀個XML,那麼你必須使用#addResource()方法。

查找到這裏的文檔: http://hadoop.apache.org/common/docs/current/api/org/apache/hadoop/conf/Configuration.html

樣例用法可能是:

Configuration conf = new Configuration(); 
conf.addResource(new Path("/usr/local/hadoop/conf/hdfs-site.xml")); 

然後所有的hdfs-site.xml映射將是你的conf裏面。

播放以防萬一有點它,它真的感覺直觀。至少對我來說;)

1

FileSystem#Create(Path)打開一個流到指定路徑。在文件可見之前,流必須關閉。

我的問題是,爲什麼我們需要指定一個DEST。我在hdfs中放入的文件不一定完全位於本地機器上,那麼在命令中指定dest的用法是什麼。

不確定您的意思,但destination指定目標位置。

+0

謝謝,我明白這一點。它以這種方式工作,因爲hdfs是一個我不知道的不可知的文件系統。 – Apurv 2012-01-31 07:59:27