gpt4 book ai didi

apache-spark - 从JSON提取和分析数据-Hadoop与Spark

转载 作者:行者123 更新时间:2023-12-02 21:59:51 24 4
gpt4 key购买 nike

我正在尝试学习整个开源大数据堆栈,并且我从HDFS,Hadoop MapReduce和Spark开始。对于“ETL”,我或多或少地受到MapReduce和Spark(SQL?)的限制,用于存储的HDFS受到了其他限制。

我有这样的情况:

  • 我的数据源
  • 数据源1(DS1):大量数据-总计约1TB。我在每一行中都有ID(称为ID1)-用作键。格式:数千个JSON文件。
  • 数据源2(DS2):数据源1的附加“元数据”。每行内部都有一个ID(称为ID2)-用作键。格式:单个TXT文件
  • 数据源3(DS3):数据源1和2之间的映射。CSV文件中仅ID1,ID2对。
  • 我的工作区
  • 我目前有一个具有足够数据空间的VM,约有128GB的RAM和16个CPU来解决我的问题(整个项目是针对产品的研究,而不是生产用途的研究)。我安装了CentOS 7和Cloudera6.x。目前,我正在使用HDFS,MapReduce和Spark。
  • 任务
  • 我只需要数据源1的一些属性(ID和一些字符串)。我的猜测是数据大小不到10%。
  • 我需要将ID1从DS3(对:ID1,ID2)连接到DS1中的ID,并将ID2从DS3(对:ID1,ID2)对连接到DS2中的ID。
  • 我需要将DS2中的属性(使用上一个项目符号中的“映射”)添加到我从DS1中提取的属性
  • 我需要进行一些“查询”,例如:
  • 按年份查找最常用的单词
  • 查找最常见的单词,由某个作者使用
  • 在每年的基础上查找某位作者使用的最常用单词
  • 我需要在末尾可视化数据(即词云,直方图等)。

  • 我的问题:
  • 使用哪种工具最有效的方式从JSON文件提取数据? MapReduce还是Spark(SQL?)?
  • 我在JSON中有数组。我知道Spark中的爆炸功能可以转置我的数据。但是去这里最好的方法是什么?这是最好的方法
    从DS1提取ID并将爆炸数据放在它们旁边,然后将其写入新文件?还是结合一切更好?如何实现这一点-Hadoop,Spark?
  • 我当前的想法是创建如下所示的内容:
  • 使用Spark从DS1提取所需的属性(数组除外),并将它们写入CSV文件。
  • 使用Spark从DS1提取所需的属性(仅爆炸数组+ ID),并将它们写入CSV文件-每个爆炸属性都属于自己的文件。
  • 这意味着我已经提取了所有我需要的数据,并且我只需一个ID即可轻松连接它们。然后,我想查询特定问题并运行MapReduce作业。

  • 问题:这是个好主意吗?如果没有,我该怎么做呢?我应该将数据插入数据库吗?如果是,是哪一个?

    提前致谢!

    最佳答案

    感谢您的提问!作为过去1.5年的BigData开发人员,并且拥有MR和Spark的经验,我认为我可以指导您正确的方向。

    您可以同时使用MapReduce和Spark获得最终目标。出于可视化目的,您可以使用Apache Zeppelin,它可以在最终数据之上运行。

    Spark作业是占用大量内存的作业,即,Spark作业的整个计算都在内存(即RAM)上运行。仅将最终结果写入HDFS。另一方面,MapReduce使用较少的内存,而使用HDFS写入间歇阶段结果,因此进行更多的I / O操作和更多的时间。

    您可以使用Spark的Dataframe功能。您可以将数据从结构化数据(也可以是纯文本文件)直接加载到Dataframe中,这将帮助您以表格格式获取所需的数据。您可以将数据框写入纯文本文件,也可以将其存储到配置单元表中,以便在其中可视化数据。另一方面,使用MapReduce,您将必须首先存储在Hive表中,然后编写hive操作来操纵数据,并将最终数据存储到另一个Hive表中。编写本地MapReduce作业可能非常忙,因此我建议不要选择该选项。

    最后,我建议使用Spark作为处理引擎(128GB和16核足以满足spark),以便尽快获得最终结果。

    关于apache-spark - 从JSON提取和分析数据-Hadoop与Spark,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57234196/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com