2013-10-28 8 views
6

Ich exportiere Informationen von HDFS in MS-SQL mit SQOOP. Ich führe SQOOP durch OOZIE. Im Moment habe ich die UID, PWD für die JDBC-Verbindung im OOZIE-Workflow fest programmiert. Sobald ich auf prod umschalte, kann ich das nicht mehr machen. Was ist der beste Weg, Authentifizierungsinformationen in einer solchen Situation weiterzugeben?Wie kann ich SQOOP ein Passwort über OOZIE zur Verbindung mit MS-SQL geben?

<sqoop xmlns="uri:oozie:sqoop-action:0.2"> 
      <job-tracker>${jobTracker}</job-tracker> 
      <name-node>${nameNode}</name-node> 
      <arg>export</arg> 
      <arg>--connect</arg> 
      <arg>jdbc:sqlserver://$sqlServerIP:1433</arg> 
      <arg>--table</arg> 
      <arg>tableName</arg> 
      <arg>--export-dir</arg> 
      <arg>/user/sqoop/file</arg> 
      <arg>--username</arg> 
      <arg>me</arg> 
      <arg>--password</arg> 
      <arg>password</arg> 
</sqoop> 

Ich könnte sie als Parameter übergeben wie $ userName, $ password. Aber die tatsächliche UID/Pwd würde immer noch in der Oozie Webkonsole zeigen.

UPDATE

ich zwei Möglichkeiten ausprobiert habe (wie unten vorgeschlagen), dies zu tun ... In VIM ich PWD erstellt müssen nur das Passwort (keine Leer- oder irgendetwas anderes). Nannte dieses pwd.

1) Ich habe versucht, das Dateisystem zu verwenden. Ich habe jedoch eine IOException, die besagt, dass die Datei nicht existiert. Nach dem Durchsehen des Codes sieht es aus, dass sqoop conf verwendet, um auf die fs zuzugreifen. Also nehme ich an, wenn Oozie durchgelaufen ist, wird es nur Zugriff auf HDFS haben.

2) Ich habe die Passwortdatei an einen zufälligen Speicherort auf hdfs geladen./users/mein-name/pwd (pwd ist die Datei). Jetzt kann es auf die Datei zugreifen (da ich keine IOException bekomme). Es kann jedoch keine Verbindung zum SQL Server hergestellt werden. Ich bin mir nicht sicher, was ich tun muss, um es zum Laufen zu bringen.

UPDATE 2 Ich mag so die Passwort-Datei wurde zu erstellen: echo "pwd" > my.password Dies fügt ein EOL in die Datei my.password ich echo -n "pwd" > my.password geändert und jetzt funktioniert es.

+0

Ich wollte nur bemerken, dass (zumindest auf CentOS 7) '' echo -n "pw_d"> mein.passwort'' das '' _'' Symbol auslässt, wenn es existiert, schreibe nur '' pwd'' in die Datei. Das heißt, '' vi'' kann eine bessere Alternative sein – Nutle

Antwort

4

Ich denke, dass Sie das Argument --password-file nutzen können, so dass Oozie das Passwort nie sehen wird. Werfen Sie einen Blick in die Sqoop User Guide für weitere Details.

+0

danke dafür. Mit Blick auf den Code sieht es so aus, als könnte ich die Passwortdatei nur auf hdfs setzen, wenn ich durch oozie laufe. In dem Dokument behaupten sie, dass es entweder auf hdfs oder der Festplatte sein könnte. Weißt du wie ich es erzwingen kann auf die HD zu gehen? – hba

+0

Das Laden der Datei von einem lokalen Laufwerk ist in der Tat machbar, aber da die Oozie Sqoop auf einer beliebigen Maschine in Ihrem Hadoop-Cluster ausführt, ist die Verwendung dieser Fähigkeit von Oozie nutzlos. Ich würde empfehlen, die Kennwortdatei auf HDFS hochzuladen und die Berechtigungen zu ändern, damit nur Sie es lesen können. –

+0

@Thx Jarek bitte siehe oben ... – hba