我没有在我的 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/