如何选择hadoop工具以获得更快的性能

rvpgvaaj  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(350)

我对解决问题的技术和方法感到困惑。
我有5000个测试文件,其中包含从rdbms生成的大约4tb的数据,准备所有5k文本文件需要大约4天的时间。为了解决这个时间问题,我正在考虑将我所有的5k文本文件数据移动到hadoop系统中,以便从那里可以更快地读取数据并以更快的速度生成文本文件。
我必须做这个活动的第一次之后,数据将增加,但每个月我必须生成5k的文本文件。
通常我要做全表扫描,可能要执行一些连接,以准备5 k文件。
有谁能建议我应该考虑哪种工具来解决这个问题吗。mapreduce和hbase或hive表或其他东西。

webghufk

webghufk1#

有点不清楚您要做什么,因为您想将文本文件移动到hadoop,然后生成文本文件?我会试着用几点来回答。
您采用的方法和使用的技术取决于几个因素,例如您希望如何使用数据:将所有数据导出到另一个系统?做分析?随机存取会读取数据的一小部分吗?或者只是存档(如法律要求)?
导入数据的一些选项:
如果输入数据已经是文本文件,并且它们具有良好定义的结构(例如分隔),那么您可以直接将它们移动到hdfs中,并在需要时创建一个hive外部表来读取它们。这应该比其他方法更快地实现。
如果输入是文本文件,但使用hiveql很难处理结构,请考虑使用spark导入、重新格式化和导出数据。然后,如果您想使用if from hive,或者您可以将数据加载到hbase中,那么可以将数据作为分隔文件存储在hdfs上。
如果输入数据来自rdms,并且您可以访问rdms:可以使用hive或spark—查看spark jdbc。如果要转换数据,配置单元将更简单,但灵活性较低。使用连接添加简单的维度信息可以在hive中完成。如果数据不容易连接,但编写起来更复杂,那么spark代码提供了更高的灵活性。spark还可以处理实时流,这在源代码生成流数据时非常有用。
要对数据进行复杂的转换,可能很难在hive中完成,或者需要多次传递数据(速度慢),那么可以考虑使用spark,它可以在内存中进行处理。spark可以快速处理数据-添加维度和格式化数据是快速和灵活的。缺点是您需要开发和维护定制代码来实现这一点,例如java、python或scala。转换后,如果您想从配置单元访问数据,可以将数据作为分隔文件写入hdfs。或者,如果希望快速、随机地访问数据,请加载到hbase。
如果您想从rdms中提取数据,并且提取逻辑相当简单(例如基于更新的\u date列进行提取),那么sqoop是一个选项。sqoop不是非常可定制的,所以任何比这更复杂的东西都应该考虑其他选项
使用数据的一些选项:
hive为您提供了一种类似sql的语言,如果您的团队或最终用户熟悉sql,这种语言可能更易于使用。hive可以进行连接、摘要等。您可以使用oozie将其安排为每天/每周/每月运行。注意,hive在集群上执行mapreduce作业,这就像在每个节点的磁盘上运行的“批处理”。不适合快速交互式查询,但适合一次处理大量数据。听起来你可能想做批处理。您还可以向分析用户提供对配置单元的访问权限,以便对您定义的表进行分析。最后,您可以使用odbc从excel连接到配置单元,根据您的用例,odbc可能非常有用。
hbase是快速、随机访问海量数据的好选择。例如从数百万顾客那里查询一个顾客的信息。但是,跨hbase表进行分析不太理想,因为hbase不会像hive那样高效地进行全表扫描。
一个混合选项:如果希望偶尔执行批处理查询并通过hbase进行随机访问,可以将数据存储在hbase中并创建一个配置单元外部表。由于使用hbase扫描,配置单元查询通常会比使用分隔文件而不是hbase时慢。
如果您不想将查找信息添加到每个记录中,并且由于需要随机访问而不希望使用hive,那么可以考虑在请求数据时使用storm drpc动态添加维度。这对于数据的随机访问非常有效,因为在hdfs中存储每个记录的所有维度信息的效率较低。比Hive更复杂更灵活。

相关问题