Elaborazione dati memorizzati in Redshift
-
16-10-2019 - |
Domanda
Al momento stiamo utilizzando Redshift come il nostro data warehouse, che siamo molto soddisfatti. Tuttavia, ora abbiamo l'obbligo di fare machine learning contro i dati nel nostro magazzino. Tenuto conto del volume dei dati coinvolti, idealmente vorrei correre il calcolo nella stessa posizione in quanto i dati, piuttosto che spostare i dati in giro, ma questo non sembra possibile con Redshift. Ho guardato Madlib, ma questo non è un'opzione come Redshift non supporta le UDF (che Madlib richiede). Attualmente sto guardando spostare i dati verso EMR e l'elaborazione con la libreria Apache macchina Spark di apprendimento (o forse H20, o Mahout, o qualsiasi altra cosa). Quindi le mie domande sono le seguenti:
- c'è un modo migliore?
- se non, come devo rendere i dati accessibili a Spark? Le opzioni che ho identificato finora includono: uso Sqoop per caricarlo in HDFS, uso DBInputFormat, fare un'esportazione Redshift per S3 e hanno Spark afferrare da lì. Quali sono i pro / contro per questi diversi approcci (e tutti gli altri) quando si utilizza Spark?
Si noti che questo è off-line di apprendimento in batch, ma ci piacerebbe essere in grado di fare questo il più rapidamente possibile in modo che possiamo iterare esperimenti rapidamente.
Soluzione
Il nuovo Amazon Machine Learning Service può funzionare per voi. Si lavora direttamente con Redshift e potrebbe essere un buon modo per iniziare. http://aws.amazon.com/machine-learning/
Se stai cercando di processo utilizzando EMR, quindi è possibile utilizzare il comando UNLOAD di Redshift ai dati di terra su S3. Spark su EMR può quindi accedere direttamente senza dover tirare in HDFS.
Spark su EMR: https://aws.amazon.com/articles/Elastic- MapReduce / 4926593393724923
Altri suggerimenti
Si può provare questo. https://github.com/databricks/spark-redshift
In caso contrario, utilizzare la risposta di Rahul, i dati Scarica per s3 poi caricarlo in SPARK. EMR Spark è in cima filati e supporti di metodo file di testo del contesto Spark "S3 //" in modo nativo.