1

我正在尝试在 HTTP 源和 HDFS 接收器之间创建一个流。我的 springXD 和 HDFS 安装在不同的机器上**,但我能够hadoop fs ls /成功触发命令。

创建和部署流后,当我使用以下方式发布数据时:

http post --target http://{ipaddressofhdfsmachine:8020} -- data"hello"

它抛出错误:

未能将数据发送到 http 端点 http://{ipaddressofhdfsmachine:8020}

当我使用localhost with port 9000它成功完成但没有出现在 hdfs 中。

是否有必要在同一台机器上安装 hdfs 和 spring 来创建流?

4

2 回答 2

2

知道出了什么问题有点困难,但我会尝试做出有根据的猜测。我不知道您是在运行 XD 单节点还是分布式模式,您是否更改了默认配置以及您是如何创建流的。参考文档可以从Spring XD中找到

我是我的设置,我在我的主操作系统(localhost)上运行 XD,在我的 vm(node1)上运行 HDFS。

因为默认 hdfs 名称节点地址假定为 hdfs://localhost:8020 它需要更改。为此使用servers.yml文件和更改fsUri(注意此 yaml 文件格式中的空格)。

config/servers.yml

# Hadoop properties
spring:
  hadoop:
    fsUri: hdfs://node1:8020

我启动 XD 单节点:

./xd-singlenode

然后运行流命令,写一些东西并检查写了什么:

xd:>hadoop config fs --namenode hdfs://node1:8020

xd:>hadoop fs ls --recursive true --dir /xd
lsr: `/xd': No such file or directory

xd:>stream create --name test --definition "http|hdfs" --deploy
Created and deployed new stream 'test'

xd:>http post --data "hello" http://localhost:9000
> POST (text/plain;Charset=UTF-8) http://localhost:9000 hello
> 200 OK

xd:>hadoop fs ls --recursive true --dir /xd
drwxr-xr-x   - jvalkealahti supergroup          0 2014-07-14 21:33 /xd/test
-rw-r--r--   3 jvalkealahti supergroup          0 2014-07-14 21:33 /xd/test/test-0.txt.tmp

xd:>stream destroy --name test 
Destroyed stream 'test'

xd:>hadoop fs ls --recursive true --dir /xd
drwxr-xr-x   - jvalkealahti supergroup          0 2014-07-14 21:33 /xd/test
-rw-r--r--   3 jvalkealahti supergroup          6 2014-07-14 21:33 /xd/test/test-0.txt

xd:>hadoop fs cat --path /xd/test/test-0.txt
hello
于 2014-07-14T20:51:27.097 回答
0

您必须发布到您的 XD 机器,而不是您的 Hadoop HDFS 机器。

XD HTTP 接收器将为您获取 POST 并将其路由到 HDFS。

确保您的节点已为您的 Hadoop 设置,并且您的 shell 也是如此。

例如,如果您使用 Pivotal PHD 2.0:

xd-singlenode --hadoopDistro phd20

xd-shell --hadoopDistro phd20

xd:> had config fs --namenode hdfs://MyPivotalHDServer:8020

查看 Spring-XD 的 Github 文档以获取最新信息,并获取当前的 Spring XD,它不断变得更好。 https://github.com/spring-projects/spring-xd/wiki/Sources#http

使用 XD shell 在服务器中创建流定义

xd:> stream create --name httptest --definition "http | hdfs" --deploy

在默认端口 9000 上发布一些数据到 http 服务器

xd:> http post --target http://localhost:9000 --data "hello world to hadoop from springxd"

这个 youtube 视频将引导您完成一个示例:http: //youtu.be/41sIhawjHE0?t= 37m6s

您必须发布几次,这取决于您的文件何时足够满以滚动到新块,或者您需要停止流以检查文件。

首先将内容发送到日志,以便您可以在 XD 输出日志中看到它。适合调试。

于 2014-07-23T05:57:46.010 回答