Hadoop 是否有将web资源下载到hdfs的命令?

Hadoop 是否有将web资源下载到hdfs的命令?,hadoop,hdfs,Hadoop,Hdfs,我想写一个程序,将web资源推送到hadoop上。我使用hadoop 2.2.0,发现“put”不是这样工作的: hadoop fs -put http://localhost/test.log hdfs://localhost:9000/log/ 有没有办法将文件放入hdfs,而不先下载 PS:假设我没有hadoop服务器和web资源服务器的Permission。我认为你可以使用linux管道和curl下载文件并将其存储到hdfs中我认为你可以使用linux管道和curl下载文件并将其存储

我想写一个程序,将web资源推送到hadoop上。我使用hadoop 2.2.0,发现“put”不是这样工作的:

hadoop fs -put http://localhost/test.log hdfs://localhost:9000/log/ 
有没有办法将文件放入hdfs,而不先下载


PS:假设我没有hadoop服务器和web资源服务器的Permission。

我认为你可以使用linux管道和curl下载文件并将其存储到hdfs中

我认为你可以使用linux管道和curl下载文件并将其存储到hdfs中

通过使用curl,我们可以将数据存储到hdfs中。看看下面使用Java的示例

public static void main(String[] args) throws IOException {
      URL url = new URL("http://example.com/feed/csv/month");
      HttpURLConnection conn = (HttpURLConnection)url.openConnection();
      conn.connect();
      InputStream connStream = conn.getInputStream();

      FileSystem hdfs = FileSystem.get(new Configuration());
      FSDataOutputStream outStream = hdfs.create(new Path(args[0], "month.txt"));
      IOUtils.copy(connStream, outStream);

      outStream.close();
      connStream.close();
      conn.disconnect();
}

通过使用curl,我们可以将数据存储到HDFS中。看看下面使用Java的示例

public static void main(String[] args) throws IOException {
      URL url = new URL("http://example.com/feed/csv/month");
      HttpURLConnection conn = (HttpURLConnection)url.openConnection();
      conn.connect();
      InputStream connStream = conn.getInputStream();

      FileSystem hdfs = FileSystem.get(new Configuration());
      FSDataOutputStream outStream = hdfs.create(new Path(args[0], "month.txt"));
      IOUtils.copy(connStream, outStream);

      outStream.close();
      connStream.close();
      conn.disconnect();
}

按照Jigar的建议对文件进行管道化处理:

curl http://stackoverflow.com/questions/22188311/is-there-a-command-for-downloading-a-web-resource-to-hdfs | hadoop fs -appendToFile - question.html

从技术上讲,这个用例需要一个唯一的客户端,该客户端作为一个流连接到远程URL,并将其内容泵入HDFS。此命令可以直接从一个HDFS数据节点执行,以避免字节传输到辅助客户端主机。下载时HDFS节点之间的网络通信无论如何都无法避免,因为文件将物理存储在多个节点中

按照Jigar的建议管道化文件:

curl http://stackoverflow.com/questions/22188311/is-there-a-command-for-downloading-a-web-resource-to-hdfs | hadoop fs -appendToFile - question.html

从技术上讲,这个用例需要一个唯一的客户端,该客户端作为一个流连接到远程URL,并将其内容泵入HDFS。此命令可以直接从一个HDFS数据节点执行,以避免字节传输到辅助客户端主机。下载时HDFS节点之间的网络通信无论如何都无法避免,因为文件将物理存储在多个节点中

我不希望文件通过我的客户端传递..有解决方案吗?我认为绕过hadoop客户端可能不可能,因为它将负责将文件写入不同的数据节点。我不希望文件通过我的客户端传递..有解决方案吗?我认为绕过hadoop客户端可能不可能,因为它将负责将文件写入不同的数据节点。