【问题标题】:Node Http Post argument to Spark Job ServerSpark 作业服务器的节点 Http Post 参数
【发布时间】:2016-09-21 17:06:54
【问题描述】:

以下 curl 命令完美地调用、传递参数和执行我的“jobified”火花程序

curl 'http://someserver:8090/jobs?appName=secondtest&classPath=Works.epJob&context=hiveContext' -d "inputparms=/somepath1 /somepath2"

这是火花程序

override def runJob(hive: HiveContext, config: Config):Any = {  
var inputParms = config.getString("inputparms").split(" "); //comes from node
var path1 = inputParms.apply(0)
var path2 = inputParms.apply(1)

我需要在 node.js 中做一个 http post,而不是 curl 命令。这是我所拥有的

var postData = JSON.stringify({
  "inputparms": paths
})

var options = {
hostname: 'someserver',
port: 8090,
path: '/jobs?appName=secondtest&classPath=Works.epJob context=hiveContext',
method: 'POST',
headers: {
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(postData , 'utf8')
}
};

 http.request(options, function(response) {...

但是上面的脚本不起作用。我错过了什么吗? 谢谢!

编辑 1:

 var myreq = http.request(options, function(response) { ...})
 myreq.write(postData);
 myreq.end();

我得到一个解析错误

Error: Parse Error
at Error (native)
at Socket.socketOnData (_http_client.js:361:20)
at emitOne (events.js:96:13)
at Socket.emit (events.js:188:7)
at readableAddChunk (_stream_readable.js:177:18)
at Socket.Readable.push (_stream_readable.js:135:10)
at TCP.onread (net.js:542:20) bytesParsed: 2, code: 'HPE_INVALID_CONSTANT' }

【问题讨论】:

  • 我看到您正在设置两个标头,Content-Type 和 Content-Length。但是你是如何设置身体的?
  • @noorul - 通过上述更新,显示上述错误。与此同时,这里是来自 SJS 消息的错误”:“org.apache.hadoop.mapreduce.lib.input.InvalidInputException:输入路径不存在:文件:/home/someid/workspace/sparkjobserver/spark-jobserver/\ "inputparms=/path1",

标签: node.js http curl spark-jobserver


【解决方案1】:

以下对我有用

var http = require("http");
var options = {
  hostname: 'localhost',
  port: 8090,
  path: '/jobs?appName=test&classPath=spark.jobserver.LongPiJob',
  method: 'POST',
  headers: {
      'Content-Type': 'application/json',
  }
};
var req = http.request(options, function(res) {
  console.log('Status: ' + res.statusCode);
  console.log('Headers: ' + JSON.stringify(res.headers));
  res.setEncoding('utf8');
  res.on('data', function (body) {
    console.log('Body: ' + body);
  });
});
req.on('error', function(e) {
  console.log('problem with request: ' + e.message);
});
// write data to request body
req.write('stress.test.longpijob.duration=120');
req.end();

【讨论】:

  • 嗨诺鲁尔。你能分享一下你是如何从你的作业化火花程序中检索输入的吗?就我而言,我这样做 ``` var inputParms = config.getString("inputparms").split(" "); //来自节点 var path1 = inputParms.apply(0) var path2 = inputParms.apply(1) ``
  • path1 打印为“inputparms=/path1 path2 打印为 /path2”
  • @user1384205 答案对您有帮助吗?
  • 谢谢@noorul。在 req.write 中发送 args 修复了它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-26
  • 2015-02-18
  • 1970-01-01
  • 1970-01-01
  • 2020-11-10
相关资源
最近更新 更多