在JAVA中运行HADOOP并将文件从本地fs复制到HDFS,但不在文件系统上安装HADOOP,这是可能的吗?
我还没有在Linux文件系统上安装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;
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"));