如何选择Hadoop工具以提高性能



我在决定解决问题的技术和方法时感到困惑。

我有5000个测试文件,其中包含大约4TB的数据,这些数据是从RDBMS生成的,准备所有5k的文本文件大约需要4天的时间。为了解决这个时间问题,我想把我所有的5k文本文件数据转移到Hadoop系统中,这样数据可以更快地读取,文本文件可以更快地生成。

我必须在数据增加后第一次做这个活动,但每个月我都必须生成5k个文本文件。

通常我必须进行全表扫描,并且可能必须执行一些联接才能准备5K文件。

有人能建议我应该考虑哪种工具吗。MapReduce和HBase或HIVE表或其他什么。

有点不清楚你想做什么,因为你想把文本文件移动到Hadoop,然后生成文本文件?我将试着回答一些需要考虑的问题。

您采取的方法和使用的技术取决于几个因素,例如您希望如何使用数据:将所有数据导出到另一个系统?做分析?随机访问是否读取数据的小部分?或者只是存档(如法律要求(?

导入数据的一些选项:

  1. 如果输入数据已经是文本文件,并且它们具有定义良好的结构(例如分隔(,则可以直接将它们移动到HDFS中,并创建一个Hive外部表以在需要时读取它们。这应该比其他方法实现得更快
  2. 如果输入是文本文件,但使用Hive QL很难处理结构,请考虑使用Spark导入、重新格式化和导出数据。然后,如果您想使用if from Hive,可以将数据存储在HDFS上作为分隔文件,或者可以将其加载到HBase中
  3. 如果输入数据来自RDMS,并且您可以访问RDMS:可以使用Hive或Spark-请查看Spark JDBC。如果你想转换数据,Hive会更简单,但灵活性较小。使用联接添加简单的维度信息可以在配置单元中完成。如果数据不容易联接,但编写起来更复杂,Spark代码会提供更高的灵活性。Spark还可以处理实时流,这在源生成流数据时非常有用
  4. 要对数据进行复杂的转换,可能很难在Hive中进行,或者需要多次传递数据(速度较慢(,请考虑使用Spark,它可以在内存中进行处理。Spark可以快速处理数据——在维度上添加&格式化数据既快捷又灵活;维护自定义代码来做到这一点,例如在Java、Python或Scala中。转换后,如果您想从Hive访问数据,可以将数据作为分隔文件写入HDFS。或者,如果您想快速、随机地访问数据,请加载到HBase
  5. 如果您想从RDMS中提取,Sqoop是一个选项,并且提取逻辑相当简单(例如基于Updated_date列的提取(。Sqoop不是很可定制,所以任何比这更复杂的东西,你都应该考虑其他选项

使用数据的一些选项:

  1. Hive为您提供了一种类似SQL的语言,如果您的团队或最终用户熟悉SQL,该语言可能更容易使用。Hive可以进行加入、总结等。您可以使用Oozie将这些活动安排为每天/每周/每月运行。请注意,Hive在集群上执行MapReduce作业,这就像在每个节点的磁盘上运行的"批处理"。不适合快速交互式查询,但适合同时处理大部分数据。在我看来,你可能想进行批量处理。您还可以让分析用户访问Hive,以便对您定义的表进行分析。最后,您可以使用ODBC从Excel连接到配置单元,这可能非常有用,具体取决于您的用例
  2. HBase是快速、随机访问海量数据的好选择。从数百万客户那里查找一个客户的信息。然而,在HBase表上进行分析是不太可取的,因为HBase不会像Hive那样高效地进行全表扫描
  3. 一个混合选项:如果你想偶尔进行批量查询并通过HBase进行随机访问,你可以将数据存储在HBase中,并创建一个Hive外部表。与使用分隔文件而不是HBase相比,由于使用HBase扫描,Hive查询通常会更慢
  4. 如果您不想向每个记录添加查找信息,并且由于希望随机访问而不希望使用Hive,请考虑在请求数据时使用Storm DRPC动态添加维度。这适用于对数据的随机访问,在这种情况下,将每个记录的所有维度信息存储在HDFS中的效率较低。比使用Hive做同样的操作更复杂、更灵活

相关内容

  • 没有找到相关文章

最新更新