java - 是否可以在 JAVA 中运行 HADOOP 并将文件从本地 fs 复制到 HDFS 但无需在文件系统上安装 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;
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>

我寻找了所有可能的解决方案并找到了以下内容:

...
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"));

但在我的例子中,我不想在我的 liunx 文件系统上安装 hadoop,所以我无法指定像“home/user/hadoop”这样的路径。我更愿意只使用 jar 文件让它运行。

最佳答案

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

请引用,

https://hadoop.apache.org/docs/r1.2.1/webhdfs.html

http://hortonworks.com/blog/webhdfs-%E2%80%93-http-rest-access-to-hdfs/

关于java - 是否可以在 JAVA 中运行 HADOOP 并将文件从本地 fs 复制到 HDFS 但无需在文件系统上安装 Hadoop?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29840527/

相关文章:

java - 编译 : tools. jar 未找到的 fatal error - maven-compiler-plugin

java - 在 macOS 上将 JPL 与 SWI-Prolog 结合使用

java - mvn编译错误: error reading jar error in opening zip file

java - Spark 蓄能器复位

java - PagerSlidingTabStrip 打开时出错

java - 使 WSDL 文件保持最新

mysql - 如何调用此 shell 脚本将 mysqldump 转换为 SQLite 兼容语法

c - 尝试在 Linux 中编译 Pro*C 程序时出错

Linux 终端八进制形式的 chmod

java - Maven 强制包含其中没有 java 类的包