Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.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
Performance Accumulo高速摄取选项_Performance_Hadoop_Accumulo - Fatal编程技术网

Performance Accumulo高速摄取选项

Performance Accumulo高速摄取选项,performance,hadoop,accumulo,Performance,Hadoop,Accumulo,简而言之,我有一位客户希望将包含在一堆ASCII文本文件(也称为“输入文件”)中的数据输入Accumulo 这些文件从各种数据馈送设备输出,并将在非Hadoop/非Accumulo节点(也称为“馈送节点”)上连续生成。所有提要的总体数据吞吐量预计将非常高 为了简单起见,假设所有数据都将在Accumulo中的一个正向索引表和一个反向[反向]索引表中结束 我已经使用pyaccumulo编写了一个Accumulo客户端模块,它可以通过Thrift代理与Accumulo建立连接,从本地文件系统(而不是H

简而言之,我有一位客户希望将包含在一堆ASCII文本文件(也称为“输入文件”)中的数据输入Accumulo

这些文件从各种数据馈送设备输出,并将在非Hadoop/非Accumulo节点(也称为“馈送节点”)上连续生成。所有提要的总体数据吞吐量预计将非常高

为了简单起见,假设所有数据都将在Accumulo中的一个正向索引表和一个反向[反向]索引表中结束

我已经使用pyaccumulo编写了一个Accumulo客户端模块,它可以通过Thrift代理与Accumulo建立连接,从本地文件系统(而不是HDFS)读取和解析输入文件,在代码中创建适当的正向和反向索引,并使用BatchWriter将突变写入正向和反向索引表。到目前为止,一切顺利。但还有更多

从各种来源,我了解到至少有几种Accumulo高速摄取的标准方法可能适用于我的场景,我想了解一些关于哪些选项在资源使用、实施和维护的方便性方面最有意义的建议。以下是一些选项:

  • 提要节点上的BatchWriter客户端:在提要节点上运行我的Accumulo客户端。此选项的缺点是通过网络发送正向和反向索引突变。此外,feed节点上需要提供Accumulo/Thrift库以支持Accumulo客户端。但是,此选项的优点是它并行解析输入文件和创建突变,并且与下面的选项相比,它似乎可以最小化Hadoop集群上的磁盘I/O
  • Accumulo主节点上的BatchWriter客户端:scp/sftp将输入文件从feed节点发送到Accumulo主节点,放入本地文件系统上的某个目录。然后仅在Accumulo主节点上运行Accumulo客户端。此选项的优点是,它不会通过网络将正向和反向索引突变从源节点发送到Accumulo主节点,并且不需要在源节点上提供Accumulo/Thrift库。但是,它的缺点是它使Accumulo master节点完成解析输入文件和创建突变的所有工作,并且它使用Accumulo master的本地磁盘作为输入文件的航路点
  • MapReduce with AccumuloOutputFormat:scp/sftp将输入文件从源节点发送到Accumulo主节点。然后定期将它们复制到HDFS并运行MapReduce作业,该作业从HDFS读取和解析输入文件,创建突变,并使用AccumuloOutputFormat写入它们。此选项具有上述#2的优点,并且它并行化了解析输入文件和创建突变的工作。但是,它的缺点是它会不断地启动和分解MapReduce作业,并调用这些进程所涉及的所有开销。它还有一个缺点,即它使用两个磁盘路径点(本地和HDF)和相关的磁盘I/O。要实现和维护连续接收,听起来有些痛苦
  • 带有AccumuloOutput*文件*格式(rfiles)的MapReduce:scp/sftp将输入文件从源节点发送到Accumulo主节点。然后定期将它们复制到HDFS并运行MapReduce作业,该作业从HDFS读取和解析输入文件,创建突变,并使用AccumuloOutputFileFormat写入rfiles。然后使用Accumulo外壳“摄取”这些文件。此选项具有上述第3项的所有优点,但我不知道它是否还有其他优点(是吗?Accumulo手册说明了批量接收:“在某些情况下,通过这种方式加载数据可能比通过使用BatchWriter的客户端接收数据更快。”什么情况。除了使用三个磁盘路径点(本地、HDFSx2)和相关的磁盘I/O外,它还具有上述#3的所有缺点。为连续接收而实施和维护听起来很痛苦
  • 就我个人而言,我最喜欢选项#2,只要Accumulo主节点能够自行处理所涉及的处理负载(非并行输入文件解析)。#2的变体,我可以在每个Accumulo节点上运行我的Accumulo客户端,并将不同feed节点的输出发送到不同的Accumulo节点,或循环发送,但其缺点仍然是通过云网络将正向和反向索引突变发送到Accumulo主节点,但是,它的优点是更并行地执行输入文件解析

    我需要知道的是:我是否错过了任何可行的选择?我是否错过了每个选项的优点/缺点?无论我的问题背景如何,特别是网络带宽/CPU周期/磁盘I/O权衡,这些优点/缺点是否微不足道或非常重要?与BatchWriter相比,带或不带rfiles的MapReduce值得这么麻烦吗?有人有“战争故事”吗


    谢谢

    即使在每个用例中,人们对于如何实现特定用例的解决方案都有自己的偏好。实际上,我会在提要节点上运行flume代理,在HDFS中收集数据,并使用RFile方法定期对到达HDFS的新数据运行MapReduce。

    您的问题与用例相关,这就是为什么您可能没有得到好的响应。然而,为了帮助你,你提到的选择是可行的。我建议尝试使用BatchWriter,看看这是否解决了您的问题。用于批量摄取的MapReduce管道可能更快,但在操作上更难维护。@DonaldMiner感谢您的回复!我们还没有访问我们的生产环境,尽管一旦我们有了访问权限,我同意一些实验将是必要的,以了解什么最有效。使用BatchWriter的管道设计变量将为fi