草庐IT

hadoop - Hadoop 上的临时查询

coder 2024-01-07 原文

我们在美国处理 2400 万家企业。我们现在在 HDFS 和 Hadoop 上使用 Pig。我们希望加快调试的临时查询。例如。现在,从我们的 5 个服务器集群中的 2400 万个业务中提取一个业务需要几分钟。

Hbase 似乎是我发现的唯一可以完成这项工作的系统。 Hive 似乎没有这样做。

这是我们的模式,目前在 HDFS 中存储为制表符分隔的纯文本文件。

place_id name value
1  Title    Bamboo Garden
1  Title    Bamboo Garden Restaurant
1  Phone 425-555-555
1  Phone 425-444-444
1  Address 123 Bellevue Way
2  Title    Burger King
2  Phone 425-333-3333

我们选择这个名称值对是为了灵活地组装附加数据和字段。例如。如果我们想联合两个数据集,我们可以轻松地“cat”它们。此外,添加更多新字段也非常容易。这个模式是很久以前设计的,几乎没有机会改变它。

我们发现很难在 Hbase 中对其进行建模,因为 Hbase 不支持重复键。正如您在上面的示例中看到的,每个企业可以有多个电话号码、职位、评论等。

所以我的问题

  1. 有什么想法可以加快这样的临时查询 Hadoop?
  2. 存储字符串数组的最佳做法是什么 HBase?
  3. 如何用重复的键对这个键值对建模 HBase?

阅读评论中的问题后编辑: 最常见的临时查询 是返回具有给定 ID 的企业的所有信息。还有其他很好的临时查询支持,例如返回给定邮政编码和标题的企业。

评论中关于使用RDBMS支持ad hoc query的建议很好。但我希望有一个系统来支持流式查询和临时查询。我们的临时查询主要用于调试。如果我们在数据中发现错误,我们仍然需要验证它是否是我们的 Hadoop 数据中的错误,因此查询 RDBMS 是不够的。

最常见的流式处理查询是join两个大数据集,匹配两个数据集之间的业务。流处理查询支持需求比即席查询多得多,因此我们选择 Hadoop。我们的临时查询主要用于调试。

最佳答案

在 Hadoop 中加速这样的临时查询有什么想法?

我认为你不应该尝试。 Hadoop 用于批处理分析,而不是记录获取。


在 HBase 中存储字符串数组的最佳做法是什么?

有几种方法可以做到这一点。如果您没有很多更新,请以序列化方式将字符串数组存储在一个字符串中。在名为“电话”的单元格中,类似于 425-555-5555^425-444-444。在 Pig 和 Hive 中,您可以使用一些简单的字符串拆分实用程序将其转换回数组。

如果您经常添加数字,那么您可以将单元格称为 “phone1”“phone[2]” 等。这使得使用 Pig 和 Hive 进行处理很难。


如何在 HBase 中用重复的键对这个键值对建模?

基本上,您在 SQL 模式中实现的是一个双重嵌套映射,这正是 HBase 的本质。因此,对数据建模应该非常容易。

您不需要在此处复制 key 。将公司名称作为关键,因为它似乎是单一的。不过,您确实想找到一种方法让它与众不同,因为我认为“汉堡王”可能存在于多个地方。我建议的一件事是将公司名称作为 key 的一部分,但添加一些使其独一无二的内容。

示例:“Bambo Garden^1”“Burger King^2”“Bamboo Garden^123 Bellvue Way”

在这些键下,有电话号码、地址和其他任何内容。

您仍然可以像以前一样添加列,因为您不再指定架构。您所有的旧代码仍然有效,并且只会在出现新列时忽略它们。

关于hadoop - Hadoop 上的临时查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12681486/

有关hadoop - Hadoop 上的临时查询的更多相关文章

  1. ruby - ECONNRESET (Whois::ConnectionError) - 尝试在 Ruby 中查询 Whois 时出错 - 2

    我正在用Ruby编写一个简单的程序来检查域列表是否被占用。基本上它循环遍历列表,并使用以下函数进行检查。require'rubygems'require'whois'defcheck_domain(domain)c=Whois::Client.newc.query("google.com").available?end程序不断出错(即使我在google.com中进行硬编码),并打印以下消息。鉴于该程序非常简单,我已经没有什么想法了-有什么建议吗?/Library/Ruby/Gems/1.8/gems/whois-2.0.2/lib/whois/server/adapters/base.

  2. ruby-on-rails - date_field_tag,如何设置默认日期? [ rails 上的 ruby ] - 2

    我想设置一个默认日期,例如实际日期,我该如何设置?还有如何在组合框中设置默认值顺便问一下,date_field_tag和date_field之间有什么区别? 最佳答案 试试这个:将默认日期作为第二个参数传递。youcorrectlysetthedefaultvalueofcomboboxasshowninyourquestion. 关于ruby-on-rails-date_field_tag,如何设置默认日期?[rails上的ruby],我们在StackOverflow上找到一个类似的问

  3. ruby-on-rails - openshift 上的 rails 控制台 - 2

    我将我的Rails应用程序部署到OpenShift,它运行良好,但我无法在生产服务器上运行“Rails控制台”。它给了我这个错误。我该如何解决这个问题?我尝试更新ruby​​gems,但它也给出了权限被拒绝的错误,我也无法做到。railsc错误:Warning:You'reusingRubygems1.8.24withSpring.UpgradetoatleastRubygems2.1.0andrun`gempristine--all`forbetterstartupperformance./opt/rh/ruby193/root/usr/share/rubygems/rubygems

  4. ruby-on-rails - 在 Rails 和 ActiveRecord 中查询时忽略某些字段 - 2

    我知道我可以指定某些字段来使用pluck查询数据库。ids=Item.where('due_at但是我想知道,是否有一种方法可以指定我想避免从数据库查询的某些字段。某种反拔?posts=Post.where(published:true).do_not_lookup(:enormous_field) 最佳答案 Model#attribute_names应该返回列/属性数组。您可以排除其中一些并传递给pluck或select方法。像这样:posts=Post.where(published:true).select(Post.attr

  5. ruby-on-rails - 相关表上的范围为 "WHERE ... LIKE" - 2

    我正在尝试从Postgresql表(table1)中获取数据,该表由另一个相关表(property)的字段(table2)过滤。在纯SQL中,我会这样编写查询:SELECT*FROMtable1JOINtable2USING(table2_id)WHEREtable2.propertyLIKE'query%'这工作正常:scope:my_scope,->(query){includes(:table2).where("table2.property":query)}但我真正需要的是使用LIKE运算符进行过滤,而不是严格相等。然而,这是行不通的:scope:my_scope,->(que

  6. hadoop安装之保姆级教程(二)之YARN的配置 - 2

    1.1.1 YARN的介绍 为克服Hadoop1.0中HDFS和MapReduce存在的各种问题⽽提出的,针对Hadoop1.0中的MapReduce在扩展性和多框架⽀持⽅⾯的不⾜,提出了全新的资源管理框架YARN. ApacheYARN(YetanotherResourceNegotiator的缩写)是Hadoop集群的资源管理系统,负责为计算程序提供服务器计算资源,相当于⼀个分布式的操作系统平台,⽽MapReduce等计算程序则相当于运⾏于操作系统之上的应⽤程序。 YARN被引⼊Hadoop2,最初是为了改善MapReduce的实现,但是因为具有⾜够的通⽤性,同样可以⽀持其他的分布式计算模

  7. sql - 查询忽略时间戳日期的时间范围 - 2

    我正在尝试查询我的Rails数据库(Postgres)中的购买表,我想查询时间范围。例如,我想知道在所有日期的下午2点到3点之间进行了多少次购买。此表中有一个created_at列,但我不知道如何在不搜索特定日期的情况下完成此操作。我试过:Purchases.where("created_atBETWEEN?and?",Time.now-1.hour,Time.now)但这最终只会搜索今天与那些时间的日期。 最佳答案 您需要使用PostgreSQL'sdate_part/extractfunction从created_at中提取小时

  8. ruby-on-rails - Ruby - 如何从 ruby​​ 上的 .pfx 文件中提取公钥、rsa 私钥和 CA key - 2

    我有一个.pfx格式的证书,我需要使用ruby​​提取公共(public)、私有(private)和CA证书。使用shell我可以这样做:#ExtractPublicKey(askforpassword)opensslpkcs12-infile.pfx-outfile_public.pem-clcerts-nokeys#ExtractCertificateAuthorityKey(askforpassword)opensslpkcs12-infile.pfx-outfile_ca.pem-cacerts-nokeys#ExtractPrivateKey(askforpassword)o

  9. 带有 attr_accessor 的类上的 Ruby instance_eval - 2

    我了解instance_eval和class_eval之间的基本区别。我在玩弄时发现的是一些涉及attr_accessor的奇怪东西。这是一个例子:A=Class.newA.class_eval{attr_accessor:x}a=A.newa.x="x"a.x=>"x"#...expectedA.instance_eval{attr_accessor:y}A.y="y"=>NoMethodError:undefinedmethod`y='forA:Classa.y="y"=>"y"#WHATTT?这是怎么回事:instance_eval没有访问我们的A类(对象)然后它实际上将它添加到

  10. ruby-on-rails - rails 上的 ruby : radio buttons for collection select - 2

    我有一个集合选择:此方法的单选按钮是什么?谢谢 最佳答案 Rails3中没有这样的助手。在Rails4中,它是collection_radio_buttons. 关于ruby-on-rails-rails上的ruby:radiobuttonsforcollectionselect,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/18525986/

随机推荐