Je vais archiver un réseau social, incorporant diverses fonctionnalités, de nombreuses charge de travail intensives de grandes données (telles que l'apprentissage automatique). E.G.: Systèmes recommandés, moteurs de recherche et séquences de série de séries chronologiques. P>
étant donné que j'ai actuellement 5 En regardant Postgres comme moyen de réduire la pression de portage entre elle et étincelle (utilisez une couche d'abstraction SQL qui fonctionne sur les deux). Spark semble assez intéressante, peut imaginer diverses questions ML, SQL et graphique qu'il peut être apportée pour répondre rapidement. MongoDb est ce que j'utilise habituellement, mais j'ai trouvé ses caractéristiques de mise à l'échelle et de map-réduite pour être limitative. P>
6 Réponses :
Je suppose que vous devriez séparer le stockage de données et le traitement des données. En particulier "Spark ou MongoDB?" n'est pas une bonne chose à demander, mais plutôt "étincelle ou hadoop ou tempête?" et aussi "MongoDB ou Postgres ou HDFS?" P>
Dans tous les cas, je m'abstiendrais de faire le traitement de la base de données. P>
Je faisais donc l'enquête sur HBASE avec Phoenix. En outre, sur la séparation, je suis d'accord logiquement mais je suis dans deux esprits sur physiquement. Ne serait-il pas préférable de stocker toutes les données dans la seule couche, par exemple: HDFS? - ou est la vitesse juste pas là? - Puis-je penser à Spark comme cette couche rapide au sommet?
Dis par toutes les données de processus finissent dans vos HDFS. C'est bien, mais vous voulez faire i> quelque chose avec les données, non? HDFS ne vous fournit pas le traitement, avec un moyen d'accéder rapidement aux données. Peut-être que si vous pouvez partager un cas d'utilisation réelle ("L'apprentissage automatique" n'est pas un cas d'utilisation), il est plus facile pour nous de comprendre ce que vous recherchez.
"Systèmes de recommandation, Moteurs de recherche et série de séries chronologiques.", Par exemple, optimisent les temps de la conférence dans plus de 10 000 participants potentiels basés à leurs planificateurs / calendriers individuels.
10 000 n'est pas exactement un grand nombre, je dirais. En particulier, lors de l'utilisation de HDFS, je suppose que toutes les données peuvent s'inscrire dans un bloc HDFS, ce qui signifie que vous ne pouvez pas bien exploiter la localité de données. Mais disent que votre application utilise PostgreSQL, vous pouvez utiliser la JDBCRDD de Spark pour importer les données à partir de là, puis utiliser les opérations de RDD pour calculer vos résultats. Mais vérifiez d'abord le modèle informatique de Spark pour voir si elles correspondent aux calculs que vous souhaitez faire et si vous avez besoin de sa distribution.
Compte tenu n = 10000 code> et
r = 17472 code> (emplacements demi-heure par an) alors la complexité temporelle [naïf] est $ \ mathcal {o} (nr) $. I.e.:
17 472 000 code>. Je pourrais peut-être obtenir $ \ mathcal {o} (n \ journal r) $ si pas $ \ journal \ Connectez-vous de lire la littérature sur la correspondance de séquence, mais cela est incertain. Peu importe que vous puissiez maintenant le voir comme un gros problème de données.
Je dois admettre que je suis un peu biaisé, mais si vous voulez apprendre quelque chose de nouveau, vous avez de sérieux temps libre, vous êtes prêt à lire beaucoup et que vous avez les ressources (en termes d'infrastructure), Allez pour HBASE *, vous ne le regretterez pas. Un tout nouvel univers de possibilités et de fonctionnalités intéressantes s'ouvre lorsque vous pouvez avoir + milliards de compteurs atomiques en temps réel. P>
* À côté de Hadoop, Hive, Spark ... P>
À mon avis, cela dépend davantage de vos besoins et du volume de données que vous aurez que le nombre d'utilisateurs - qui est également une exigence-. Hadoop (Aka Hive / Impala, Hbase, Mapreduce, Spark, etc.) fonctionne bien avec de grandes quantités -GB / To par jour de données et de balances horizontalement. P>
Dans les grands environnements de données, j'ai travaillé avec j'ai toujours utilisé Hadoop HDFS pour stocker des données brutes et tirer parti du système de fichiers distribués pour analyser les données avec Apache Spark. Les résultats ont été stockés dans un système de base de données comme Mongodb pour obtenir des requêtes de latence faible ou des agrégats rapides avec de nombreux utilisateurs simultanés. Ensuite, nous avons utilisé Impala pour obtenir sur Demmand Analytics. La principale question lors de l'utilisation de tellement de technologies est de bien augmenter l'infrastructure et les ressources données à chacune d'elles. Par exemple, Spark et Impala consomment beaucoup de mémoire (elles sont dans des moteurs de mémoire), il est donc une mauvaise idée de mettre une instance de MongoDB sur la même machine. P>
Je vous suggère également de vous une base de données graphique puisque vous construisez une architecture de réseau social; Mais je n'ai aucune expérience avec cette ... p>
cherchez-vous à rester purement ouverte? Si vous allez aller en entreprise à un moment donné, beaucoup de distributions d'entreprise de Hadoop incluent Spark Analytics groupés dans. P>
J'ai un biais, mais il existe également le produit de DataStax Enterprise, qui regroupe Cassandra, Hadoop et Spark, Apache Solr et d'autres composants ensemble. Il est utilisé dans de nombreuses grandes entités Internet, en particulier pour les applications que vous mentionnez. http://www.datastax.com/what-we-offer / Produits-Services / Datastax-Enterprise P>
Vous voulez penser à la façon dont vous l'organiserez également. P>
Si vous séjournez dans le nuage, vous ne serez pas à choisir, vous pourrez (en fonction de votre environnement nuage, mais avec AWS, par exemple), utilisez Spark pour un processus continu-lot, Hadoop Mapreduce pour longtemps. Analyse de la chronologie (analyse des données accumulées sur une longue période), etc., car le stockage sera découplé de la collecte et du traitement. Mettre des données en S3, puis le traiter plus tard avec le moteur dont vous avez besoin. P>
Si vous hébergez le matériel, la construction d'un cluster Hadoop vous permettra de mélanger du matériel (matériel hétérogène supporté par le cadre), vous donnera une plate-forme de stockage robuste et flexible et un mélange d'outils d'analyse, y compris Hbase and Hive, et possède des ports pour la plupart des autres choses que vous avez mentionnées, telles que Spark sur Hadoop (pas un port, en fait la conception originale de l'étincelle.) C'est probablement la plate-forme la plus polyvalente et peut être déployée / développée à moindre coût, car le matériel n'a pas besoin d'être le même pour chaque nœud. p>
Si vous êtes auto-hébergement, vous allez avec d'autres options de cluster pour lesquelles vous obligera à des exigences matérielles qui peuvent être difficiles à évoluer avec plus tard. P>
Oui, j'essaie de me concentrer sur une source purement ouverte. MAPR semble plutôt bien cependant, de même que HortonWorks ... ne sont pas examinés dans DataStax. Votre recommandation est donc d'utiliser Cassandra pour Générique CRUD, SOLR pour la recherche, Spark pour Analytics en temps réel et Hadoop Mapreduce pour l'analyse de la timeline à long terme?
Eh bien, cela dépend vraiment de votre cas d'utilisation. Cassandra a les écritures les plus rapides et la diffusion en continu, mais est une boutique de valeur clé, similaire à HBASE, mais avec une implémentation plus spécifique. Votre modèle de données peut fonctionner très bien pour cela, ou quelque chose d'autre pourrait être meilleur. Solr a / gagne une juste quantité de traction en tant que recherche, Spark est la tâche actuelle pour analyser la quasi réel et mapréduce, ou ses abstractions de cochon et de la ruche, ou les variantes de ceux qui comme Impala, vous permettent de faire conventionnel Les opérations de la DBMS-Sentiment à l'échelle économique.
Ok, bien si je choisissiais entre Cassandra et Spark pour mes composants CRUD génériques, comment ferais-je mon choix? - Rien n'est faux avec Solr, Elasticsearch et Luscene, mais je ne suis pas précipité pour ajouter de la recherche à mon projet, je vais donc laisser cela d'un côté pour l'instant. - Le support de transaction serait bien, mais à la fin de la journée, je doute que j'aurai besoin que de nombreux composants.
Comme je l'ai dit, dépend de votre cas d'utilisation, qui devrait déterminer votre modèle de données, qui dirigera votre méthode d'ingestion, qui devrait diriger votre stockage. Honnêtement, la façon dont ces piles sont construites, tout est couplé de manière lâche, de sorte que vous pouvez échanger des objets. Pour répondre au commentaire immédiat, Spark n'est pas vraiment une méthode de collecte. Vous écrivez un code d'étincelle pour apporter des données dans des informations. Donc, pas le C du tout. Cassandra est un choix solide pour un magasin de valeurs de clé. Donc, hbase. Un magasin de colonnes pourrait mieux fonctionner pour vous. Ou peut-être un magasin ORM. Impossible de faire cet appel jusqu'à ce que votre modèle de données soit plus développé.
Parlons donc des modèles les plus simples extrêmement génériques. Authentification et profils d'utilisateurs. Stocker les jetons d'accès à Redis. Les modèles ne devraient pas être en étincelle, c'est ce que vous dites? - Donc, je devrais utiliser Hbase ou Cassandra pour ça?
Spark est en train de traiter, comme une carte / réduction plus rapide. Pas stockage. Vous avez toujours besoin d'un niveau de collection et de stockage / organisation. Si vous pouvez modéliser vos données dans un formulaire colonnaire clairsemé, des abstractions de la valeur de clé de clé ou une valeur de clé imbriquée, alors Cassandra est durable et rapide, mais nécessite du matériel de la même manière, ce qui est donc bon pour les solutions hébergées comme AWS ou d'autres. Il y a aussi une image Docker. HBASE a plus de défaillance possible grâce à la conception principale / esclave, mais plus de flexibilité matérielle. Ce serait votre niveau de stockage / organisation. Pour la collecte, vous avez besoin de quelque chose aussi, comme, POST HTTP -> Storm / Kafka.
Nous utilisons Spark + HBase + Apache Phoenix + Kafka + ElasticaSearch and Structure a été facile jusqu'à présent. P>
* Phoenix est un pilote JDBC pour HBASE, il permet d'utiliser Java.SQL avec HBASE, Spark (via JDBCRDD) et ElasticSearch (via JDBC River), il simplifie vraiment l'intégration. P>
Intéressant. Pouvez-vous élargir sur votre cas d'utilisation, et peut-être inclure des points de repère de latence pour les analyses communes (CRUD), Realtime Analytics, la recherche, les analyses de lots et similaires? - Je dois aussi noter que j'utilise Python plutôt que dans une langue sur la JVM.
Phoenix a quelques numéros de performance ici: phoenix.apache.org/performance.html
Je sens que je me penche plus sur Apache Phoenix de nos jours. FYI: Il y a une bibliothèque pour parler à JDBC de Python.
Je pense que vous êtes dans la bonne direction pour rechercher une pile / une architecture logicielle qui peut: p>
À ces mérites, Hadoop + Spark peut vous donner les bords dont vous avez besoin. Hadoop est relativement mature pour maintenant gérer des données à grande échelle de manière lot. Il prend en charge un stockage fiable et évolutif (HDF) et un calcul (MapReduce / Fil). Avec l'ajout d'étincelle, vous pouvez exploiter le stockage (HDFS) et l'informatique en temps réel (performances) ajoutées par Spark. P>
En termes de développement, les deux systèmes sont pris en charge de manière native par Java / Scala. Support de bibliothèque, le réglage des performances de ceux-ci sont abondants ici dans Stackoverflow et partout ailleurs. Il y a au moins quelques bibliothèques d'apprentissage de la machine (Mahout, MLib) travaillant avec Hadoop, Spark. P>
Pour le déploiement, AWS et d'autres fournisseurs de cloud peuvent fournir une solution d'hôte pour Hadoop / Spark. Pas un problème là non plus. P>
Merci, je dois noter que j'utilise Python (que je sais est également soutenu par Spark et propose divers emballages sur divers projets Hadoop). Dans quelle mesure gère-t-il les requêtes de latence de latence? - réduit à 1 noeud (au début). - J'ai remarqué un peu de support graphique et SQL, ainsi que des discussions sur le déplacement entre paradigmes + les avantages qui apportent. - Peux-tu élaborer?
Avec Python, à Hadoop, il s'agit principalement d'interface en streaming où les données sont transmises à STDIN de Code Python et le résultat est envoyé à STDOUT pour mélanger ou réduire. Avec Spark, via des wrappers ou Python FFI, des données pourraient être interrogées de la même manière que Java le fait. L'interface de traitement des données de Spark est une programmation très fonctionnelle. :) Les programmeurs Python devraient se sentir chez eux. Il existe diverses performances de référence comparant Spark (~ 100X plus rapide) et Hadoop. Cela devra être testé sur votre propre jeu de données. Dans l'ensemble, les deux systèmes doivent bien fonctionner avec un seul nœud et fournir une évolutivité à long terme à l'avenir.
Merci, j'ai voté. Pour les trucs de Crud générique Devrais-je utiliser Spark's SQL et pour les composants de réseau social Spark's GraphX et pour l'analyse MLIB, Mahout etc.? - Ou suis-je trop simplifiant / compliquer-le?
Oui. Je crois comprendre que c'est la directive générale. Avec différents dialectes de la langue de traitement, il est facile de travailler avec des systèmes / données externes ou de tirer parti des compétences existantes de l'équipe. Sous la couverture, la structure de données est principalement de RDD dans Spark. Cette architecture aide à construire un système hétérogène à interagir avec une source ou des systèmes externes beaucoup plus facilement.
Merci, vient de vous attribuer la prime. Toujours en revue d'autres réponses cependant, par exemple: Quelles sont vos pensées sur ce que @SuiterDev n'a pas dit d'utiliser Spark comme couche de crud générique?
Merci A.t.! Ma prendre de Crud of Spark est la suivante: la puissance de Spark est d'interroger "Big Data" à la vitesse rapide. La structure de données de base - RDD est résiliente (en d'autres termes - "Lecture seule"). Si RDD doit être mis à jour, toutes les RDD connexes en cache doivent être recalculées. C'est pourquoi l'apprentissage / recommandation de la machine ETL + convient à l'étincelle. Une fois que les données ETL sont entrées, l'entrée peut ne pas changer lors du traitement itératif. Si l'entrée change, le calcul doit redémarrer. Je suppose que c'est pourquoi le mélange de cru de "petites" données avec de nombreuses analyses de données peut sembler gênant.
Alors, que dois-je utiliser pour ma couche de crud générique? - quelque chose de HBASE basé, tel que Vanilla Hbase, Phoenix ou quelque chose d'autre sur HDFS tels que Impala ou Cascading (E.G.: Lingual est entièrement conforme à l'ANSI SQL)? - Comment puis-je choisir entre eux? - [Et devrais-je demander à cela dans une nouvelle question Stackoverflow ?!]
Je ferais écho à d'autres réponses. Une fois que la pile d'analyses est définie, vous pouvez ajouter un système de stockage différent pour répondre à vos besoins de CRUD. Par exemple, un SGBDM tel que MySQL pourrait fournir un fort soutien de l'acide. Bien que les SQLS ne vous apporte l'évolutivité et la disponibilité avec moins de cohérence. Étant donné que Spark / Hadoop a des connecteurs à différents types de données, il interagirait avec d'autres solutions de stockage. En fin de journée, la structure naturelle / utilisation des données peut être la clé pour décider où ces données résident.
Toutes ces technologies ont bien échelonnez à plus de 5 utilisateurs :). Il est probablement préférable d'aller avec ce que vous savez mieux. Dans ce stade, le développement des caractéristiques est beaucoup plus important que la mise à l'échelle. Cela dit, Spark est vraiment génial pour le traitement par lots.
@Danieldarabos: Je ne pouvais pas être plus en désaccord. Choisir la mauvaise technologie simplement parce qu'il est familier peut vous coûter grand temps dans des étapes ultérieures du développement. Demandez à Facebook, je SAVOIR I> Ils peuvent vous dire des histoires confirmant cela. En outre, en tant que développeur, vous devez utiliser le bon outil pour le travail au lieu de frapper dans un clou avec un tournevis.
Mon impression est que ce projet est à la phase de prototypage. Tout ce qui est écrit maintenant sera jeté de toute façon. Vous pouvez faire de meilleures décisions techniques après i> cette étape, lorsque vous comprenez les exigences plus clairement. C'est mon avis, mais bien sûr que je n'ai pas écrit facebook :).
Je préférerais utiliser cette opportunité pour apprendre une pile technologique la mieux adaptée à la résolution de ce problème. L'exemple Facebook est un bon. Donc, pour répondre à ma pile, que dois-je aller avec?