Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hadoop 处理从facebook导入的海量数据_Hadoop_Parallel Processing_Bigdata_Batch Processing_Job Scheduling - Fatal编程技术网

Hadoop 处理从facebook导入的海量数据

Hadoop 处理从facebook导入的海量数据,hadoop,parallel-processing,bigdata,batch-processing,job-scheduling,Hadoop,Parallel Processing,Bigdata,Batch Processing,Job Scheduling,我目前正在创建一个程序,从Facebook导入用户想要的所有群组和订阅源。 我曾经将GraphAPI与OAuth一起使用,效果非常好 但我意识到一个请求无法处理1000组加上提要的导入 因此,我正在寻找一种在后台将这些数据(如cron作业)导入数据库的解决方案 要求 在后台运行 在Linux下运行 宁静的 问题 你对此有什么经验 hadoop是正确的解决方案吗 有趣的是,您已经自己设计了合适的解决方案。因此,实际上您需要以下组件: 关系数据库,因为您希望以结构化、快速的方式请求数据 ->

我目前正在创建一个程序,从Facebook导入用户想要的所有群组和订阅源。 我曾经将GraphAPI与OAuth一起使用,效果非常好

但我意识到一个请求无法处理1000组加上提要的导入

因此,我正在寻找一种在后台将这些数据(如cron作业)导入数据库的解决方案

要求

  • 在后台运行
  • 在Linux下运行
  • 宁静的
问题

  • 你对此有什么经验
  • hadoop是正确的解决方案吗

    • 有趣的是,您已经自己设计了合适的解决方案。因此,实际上您需要以下组件:

      • 关系数据库,因为您希望以结构化、快速的方式请求数据

        ->根据经验,我希望有一个完全规范化的数据模型(在你的例子中是表用户、组、用户2组),在facebook的较大键上也有4字节的代理键(对于反向引用,你可以将它们的键存储为属性,但内部关系在代理键上更有效)

        ->基于散列而不是字符串(例如crc32(较低的(字符串)))建立索引-一个示例选择不是这样的:从name=SEARCHSTRING和hash=crc32(较低的(SEARCHSTRING))的用户中选择一些有用的内容

        ->永远不要基于长度>8字节的字符串建立唯一的列;通过insert…select,可以基于哈希+字符串检查完成唯一的批量插入

        ->一旦你解决了这个问题,你还可以研究稀疏矩阵(见维基百科)和位图来优化你的用户2组(不过我知道这是一个额外的,不应该妨碍你尽快拿出第一个版本)

      • 定期运行的cron作业

        ->理想情况下,facebook会给你(因此,如果他们规定你的请求频率不超过每秒一次,请坚持这一点——不要超过每秒一次,但也要尽量接近上限)->如果需要触发不同类型的请求,请投入一些时间来解决这一问题(请求用户记录请求组记录,但可能受到相同上限的影响)

        ->大多数优化只能通过开发来完成——因此,如果我是你,我会坚持使用任何高级编程语言,这些语言不需要太多地处理var类型的杂耍,同时还广泛支持PHP等关联数组,我会自己编程

        ->我在将cron作业设置为带有停用输出缓冲的网页(对于php,请查看ob_end_flush(void))-易于测试,并且可以通过curl触发cron作业;如果您通过自己的函数(例如带有时间戳)传递状态输出这样也可以灵活地运行viw浏览器或通过命令行->这意味着高效测试+高效生产运行

      • 您的用户界面,它只请求您的数据库,而从不请求外部系统api

      • 大量内存,以保持高性能(最佳:所有数据+索引数据都适合数据库专用的数据库内存/缓存)

        ->如果您使用mysql作为数据库,您应该查看innodb\u flush\u log\u在\u trx\u commit=0,以及innodb\u buffer\u pool\u大小(如果有兴趣,只需谷歌)

      Hadoop是一个文件系统层,它可以帮助您提高可用性。但是,我将其归入“稀疏矩阵”类别,这并不能阻止您提出解决方案。根据我的经验,可用性不是数据公开项目中的主要约束

      --------------------------更新-------------------

      我喜欢另一个答案中的neo4j。因此,我想知道我可以为我的未来项目学到什么。我使用mysql的经验是,RAM通常是最大的限制。因此,增加RAM以能够加载完整的数据库可以使性能提高2-1000倍,这取决于您来自何处。其他一切比如索引改进和结构。所以,如果我需要建立一个性能优先级列表,应该是这样的:

    • MYSQL+足够的专用于数据库的RAM来加载所有数据
    • NEO4J+专用于数据库的足够RAM以加载所有数据
    • 我仍然更喜欢MYSQL,它高效地存储记录,但需要运行连接来派生关系(neo4j不需要这样扩展)。如果索引正确,连接成本通常较低,并且根据neo4j的说法,确实需要在属性分离中添加额外的管理数据。对于大数据项目,这些管理数据汇总和满负荷内存设置需要您购买更多内存。就性能而言,这两种选择都是终极选择。此外,您还需要进一步了解你会发现:

    • NEO4J+专用于数据库的RAM不足,无法加载所有数据
    • MYSQL+没有足够的专用于数据库的RAM来加载所有数据
    • 在最坏的情况下,MYSQL甚至会将索引放在磁盘上(至少部分放在磁盘上),这会导致巨大的读取延迟。与NEO4J相比,您可以执行“从节点到节点的直接跳转”练习,至少在理论上应该更快。

      您可以使用NEO4J。 Neo4j是一个图形数据库,用于管理和查询高度连接的数据,既可靠又快速

      1) 确定节点的结构、关系以及相应的属性 您需要创建API,从facebook获取数据并将其存储在Neo4j中

      我在3个大项目中使用过neo4j,它最适合图形数据

      2) 创建一个cron-jon,从facebook获取数据并存储到neo4j中

      我认为为图形数据库实现mysql不是一个好主意。对于大数据,neo4j是一个不错的选择。

      你能给出一些数字吗