2015-10-31 118 views
0

我想從Windows服務器將文件寫入HDFS。 Hadoop集羣在Linux上。 我試圖到處研究我有一個可以使用「hadoop jar」運行的java代碼從Windwos服務器讀取/寫入文件到HDFS

有人可以幫助我理解如何從Windows運行HDFS文件編寫java代碼? Windows盒子上需要什麼?即使是一個適當的鏈接也可以。

回答

1

你只需要編寫一個簡單的java程序並像普通的.jar文件一樣運行它。

在項目中,您需要導入hadoop庫。

這是一個工作示例Maven項目(我測試了我的羣集上):

import org.apache.hadoop.conf.Configuration; 
import org.apache.hadoop.fs.FSDataOutputStream; 
import org.apache.hadoop.fs.FileSystem; 
import org.apache.hadoop.fs.Path; 

import java.io.IOException; 
import java.net.URI; 
import java.net.URISyntaxException; 


public class WriteFileToHdfs { 

    public static void main(String[] args) throws IOException, URISyntaxException { 

     String dataNameLocation = "hdfs://[your-namenode-ip]:[the-port-where-hadoop-is-listening]/"; 

     Configuration configuration = new Configuration(); 
     FileSystem hdfs = FileSystem.get(new URI(dataNameLocation), configuration); 
     Path file = new Path(dataNameLocation+"/myFile.txt"); 

     FSDataOutputStream out = hdfs.create(file); 
     out.writeUTF("Some text ..."); 
     out.close(); 

     hdfs.close(); 

    } 

} 

記得將依賴於你的pom.xml,並建立主類清單文件中的指令:

<properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <maven.compiler.source>1.7</maven.compiler.source> 
     <maven.compiler.target>1.7</maven.compiler.target> 
     <mainClass>your.cool.package.WriteFileToHdfs</mainClass> 
    </properties> 
    <dependencies> 
     <dependency> 
      <groupId>org.apache.hadoop</groupId> 
      <artifactId>hadoop-client</artifactId> 
      <version>2.6.1</version> 
     </dependency> 
    </dependencies> 
    <build> 
     <plugins>    
      <plugin> 
      <artifactId>maven-dependency-plugin</artifactId> 
      <executions> 
       <execution> 
        <phase>install</phase> 
        <goals> 
         <goal>copy-dependencies</goal> 
        </goals> 
        <configuration> 
         <outputDirectory>${project.build.directory}/lib</outputDirectory> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
     <plugin> 
      <artifactId>maven-jar-plugin</artifactId> 
      <configuration> 
       <archive> 
        <manifest> 
         <addClasspath>true</addClasspath> 
         <classpathPrefix>lib/</classpathPrefix> 
         <mainClass>${mainClass}</mainClass> 
        </manifest> 
       </archive> 
      </configuration> 
     </plugin> 
     </plugins> 
    </build> 

午飯用命令的程序:

java -jar nameOfTheJarFile.jar

當然的Y您需要使用您的軟件包名稱和namenode IP地址編輯代碼。

+0

嗨,你是對的,但我不想用「hadoop jar」命令運行它。是不是可以讓Java代碼與HDFS進行交互,只需使用「java」命令就可以運行? –

+0

是的,這正是我想告訴你的:)。您只需要導入hadoop庫,然後使用java命令運行程序 –

+0

非常感謝您,對不起,但我對Maven不太好,請您解釋一下「記住將依賴項放到您的pom.xml中」正好我需要放在這裏 –