是否可以 运行 HADOOP 并将文件从本地 fs 复制到 JAVA 中的 HDFS 但无需在文件系统上安装 Hadoop?
Is that possible to run HADOOP and copy a file from local fs to HDFS in JAVA BUT without installing Hadoop on file system?
我没有在我的 Linux 文件系统上安装 hadoop
。我想 运行 hadoop
并将文件从 local file system
复制到 HDFS
,而不在我的 Linux 文件系统上安装 hadoop
。我创建了一个示例代码,但它显示 "wrong FS, expected file:///"。有什么帮助吗?
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/
您需要安装 hadoop 才能将文件复制到 HDFS 或从中复制文件。
如果您的系统在同一网络中的远程系统上安装了 hadoop,您可以将远程 hdfs 文件复制到本地文件系统(没有 hadoop需要在本地系统上安装)。只需将您的 IP 替换为远程系统的 IP。
无论如何,您至少需要一个安装了 hadoop 的系统才能使用 hadoop 功能。
我没有在我的 Linux 文件系统上安装 hadoop
。我想 运行 hadoop
并将文件从 local file system
复制到 HDFS
,而不在我的 Linux 文件系统上安装 hadoop
。我创建了一个示例代码,但它显示 "wrong FS, expected file:///"。有什么帮助吗?
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/
您需要安装 hadoop 才能将文件复制到 HDFS 或从中复制文件。
如果您的系统在同一网络中的远程系统上安装了 hadoop,您可以将远程 hdfs 文件复制到本地文件系统(没有 hadoop需要在本地系统上安装)。只需将您的 IP 替换为远程系统的 IP。
无论如何,您至少需要一个安装了 hadoop 的系统才能使用 hadoop 功能。