在JAVA中运行HADOOP并将文件从本地fs复制到HDFS,但不在文件系统上安装HADOOP,这是可能的吗?

在JAVA中运行HADOOP并将文件从本地fs复制到HDFS,但不在文件系统上安装HADOOP,这是可能的吗?,java,linux,maven,hadoop,Java,Linux,Maven,Hadoop,我还没有在Linux文件系统上安装hadoop。我想运行hadoop并将文件从本地文件系统复制到HDFS,而无需在我的Linux文件系统上安装hadoop。我创建了一个示例代码,但它显示“错误的FS,预期的文件://”。有什么帮助吗 import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.*; import java.io.BufferedInputStream; import java.io.File;

我还没有在Linux文件系统上安装hadoop。我想运行
hadoop
并将文件从
本地文件系统
复制到
HDFS
,而无需在我的Linux文件系统上安装
hadoop
。我创建了一个示例代码,但它显示“错误的FS,预期的文件://”。有什么帮助吗

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.net.URI;

/**
 * Created by Ashish on 23/4/15.
*/
public class SampleHadoop {

    public static void main(String[] args) throws Exception {
        try {

            Configuration configuration = new Configuration();
            FileSystem fs = FileSystem.get(new URI("hdfs://192.168.1.170:54310/"),configuration);
            fs.copyFromLocalFile(new Path("./part-m-00000"), new Path("hdfs://192.168.1.170:54310/user/hduser/samplefile"));
            fs.close();
        } catch (Exception ex) {
          System.out.println("Exception "+ex.toString());
        }
    }
}
POM.XML

<dependencies>
    <dependency>
        <groupId>org.postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <version>9.3-1102-jdbc41</version>
    </dependency>
    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.3.4</version>
    </dependency>
    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-client</artifactId>
        <version>1.0.4</version>
    </dependency>
    <dependency>
        <groupId>org.apache.sqoop</groupId>
        <artifactId>sqoop-client</artifactId>
        <version>1.99.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.sqoop</groupId>
        <artifactId>sqoop</artifactId>
        <version>1.4.0-incubating</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.34</version>
    </dependency>
    <dependency>
        <groupId>org.apache.sqoop</groupId>
        <artifactId>sqoop-tools</artifactId>
        <version>1.99.4</version>
    </dependency>
    <dependency>
        <groupId>commons-httpclient</groupId>
        <artifactId>commons-httpclient</artifactId>
        <version>3.1</version>
    </dependency>
</dependencies>

但是在我的情况下,我不想在我的liunx文件系统上安装
hadoop
,所以我不能指定像“home/user/hadoop”这样的路径。我更喜欢只使用jar文件运行它

您的用例的正确选择将是使用WebHDFSapi。它支持在Hadoop集群之外运行的系统访问和操作HDFS内容。它不需要客户端系统安装hadoop二进制文件,您可以使用CURL本身通过http操作远程HDF

请参阅


您需要安装hadoop,以便在HDFS之间复制文件

如果在同一网络中的远程系统上安装了带有hadoop的系统,可以将远程hdfs文件复制到本地文件系统(本地系统上不需要安装hadoop)。只需将您的IP替换为远程系统的IP即可


无论如何,您至少需要一个安装了hadoop的系统才能使用hadoop功能。

我也这么做了。正如您在我上面的示例代码中所看到的,
hadoop
安装在网络中ip为192.168.1.170的另一个系统上,但它显示“错误的FS,预期的文件://”。core-site.xml和hdfs-site.xml的路径是什么?如何在配置中指向site.xml和hdfs-site.xml的远程路径?非常感谢。我是java程序员,你能给我提供链接Hadoop WebHDFS REST API的java客户端吗?欢迎。事实上,WebHDFS服务是在Hadoop集群内部管理的,客户端不需要任何Hadoop库。请检查WebHDFS是否已启用,如果未启用,请参阅上面的url以启用它。一旦它运行,您可以使用apache httpclient从Java代码与WebHDFS rest服务交互。。
...
Configuration conf = new Configuration();
conf.addResource(new Path("/home/user/hadoop/conf/core-site.xml"));
conf.addResource(new Path("/home/user/hadoop/conf/hdfs-site.xml"));