2016-09-20 5 views
0

Die folgenden curl Befehl Spark perfekt funktioniert, rufen Argument übergeben und führen Sie meine "jobified" spark ProgrammKnoten Http Beitrag Argument Job Server

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

Hier ist der Funke Programm

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) 

Statt des curl-Befehls muss ich einen http-Post in node.js machen. Hier ist was ich habe

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) {... 

Wie auch immer das obige Skript nicht funktioniert. Fehle ich etwas? Danke!

Edit 1:

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

ich ein Parse-Fehler

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' } 
+0

Ich sehe, dass Sie zwei Header setzen, Content-Type und Inhaltslänge. Aber wie setzt du den Körper? – noorul

+0

@noulul - Mit dem obigen Update wird der obige Fehler angezeigt. Zusammen mit, hier ist der Fehler von SJS Nachricht ":" org.apache.hadoop.mapreduce.lib.input.InvalidInputException: Eingabepfad existiert nicht: file:/home/someid/workspace/spookjobserver/spark-jobserver/\ "inputparms =/path1", – user1384205

Antwort

0

Die folgenden Werke für mich

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(); 
+0

Hallo Noorul. Können Sie mitteilen, wie Sie die Eingabe von Ihrem beworbenen Spark-Programm abrufen? In meinem Fall mache ich das '' 'var inputParms = config.getString (" inputparms "). Split (" "); // kommt von Knoten var path1 = inputParms.apply (0) var path2 = inputParms.apply (1) '' ' – user1384205

+0

path1 druckt als "inputparms =/path1 path2 druckt als/path2" – user1384205

+0

https Siehe: // github.com/spark-jobserver/spark-jobserver/blob/master/job-server-tests/src/spark.jobserver/LongPiJob.scala – noorul