2016-06-13 14 views
0

Wir verwenden GoogleCloudPlatform für Big-Data-Analysen. Zur Verarbeitung verwenden wir derzeit das google cloud dataproc & spark-streaming.Dataproc: Senden eines Spark-Jobs über die REST-API

Ich möchte einen Spark-Auftrag mit der REST-API senden, aber wenn ich den URI mit dem API-Schlüssel aufrufen, erhalte ich den folgenden Fehler!

{ 
    "error": { 
    "code": 403, 
    "message": "The caller does not have permission", 
    "status": "PERMISSION_DENIED" 
    } 
} 

URI: - https://dataproc.googleapis.com/v1/projects/orion-0010/regions/us-central1-f/clusters/spark-recon-1?key=AIzaSyA8C2lF9kT ************* SGxAipL0

Ich habe die API von Google-Konsole> API-Manager

Antwort

2

Während API-Schlüssel verwendet werden, Zum Verknüpfen von Anrufen mit einem Entwicklerprojekt wird es nicht zur Autorisierung verwendet. Die REST-API von Dataproc verwendet wie die meisten anderen abrechenbaren REST-APIs in der Google Cloud Platform oauth2 zur Authentifizierung und Autorisierung. Wenn Sie die API programmgesteuert aufrufen möchten, möchten Sie wahrscheinlich eine der Clientbibliotheken verwenden, z. B. Java SDK for Dataproc, die Convenience-Wrapper für die JSON-Protokolle niedriger Ebene bereitstellt und Ihnen handy thick libraries for using oauth2 credentials gibt.

Sie können auch mit der direkten REST-API experimentieren, indem Sie API explorer von Google verwenden. Klicken Sie oben rechts auf die Schaltfläche "Anfragen mit OAuth 2.0 autorisieren".

Ich bemerkte auch, dass Sie us-central1-f unter dem Pfad regions/ für die Dataproc URI verwendet; Beachten Sie, dass Dataprocs Regionen nicht eins zu eins mit Compute Engine-Zonen oder -Regionen abgebildet werden. Die Regionen von Dataproc enthalten jeweils mehrere Compute Engine-Zonen oder -Regionen. Derzeit ist nur eine einzige Dataproc-Region verfügbar, die global heißt und Cluster in allen Compute Engine-Zonen bereitstellen kann. Für eine einfache Darstellung, die ein oauth2 Zugriffstoken zu verwenden, können Sie einfach curl zusammen mit gcloud verwenden, wenn Sie den gcloud CLI installiert haben:

PROJECT='<YOUR PROJECT HERE>' 
ACCESS_TOKEN=$(gcloud beta auth application-default print-access-token) 
curl \ 
    --header "Authorization: Bearer ${ACCESS_TOKEN}" \ 
    --header "Content-Type: application/json" \ 
    https://dataproc.googleapis.com/v1/projects/${PROJECT}/regions/global/clusters 

Beachten Sie, dass die ACCESS_TOKEN von gcloud gedruckt hier von der Natur (in etwa abläuft 5 Minuten, wenn ich mich richtig erinnere); Das Schlüsselkonzept ist, dass das Token, das Sie in HTTP-Headern für jede Anfrage weiterleiten, in der Regel ein "kurzlebiges" Token ist, und Sie haben Code, der neue Token jedes Mal separat abruft, wenn die Token mit einem "Refresh-Token" ablaufen "; Dies schützt vor dem versehentlichen Kompromittieren langlebiger Anmeldeinformationen. Dieser "Refresh" -Fluss ist Teil dessen, was die dicken Auth-Bibliotheken unter der Haube handhaben.

Verwandte Themen