问题标签 [hadoop]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux - 设置 (Linux) Hadoop 集群
是否需要先设置 Linux 集群才能设置 Hadoop 集群?
sorting - 在将值发送到减速器之前对其进行排序
我正在考虑在 hadoop 中构建一个小型测试应用程序来掌握系统的窍门。
我想到的应用程序将在统计领域。我想从我的减速器函数中获得“每个键的 10 个最差值”(我必须假设某些键可能存在大量值)。
我的计划是进入我的减速器的值基本上是“实际值”和“实际值的质量/相关性”的组合。基于相关性,我“简单地”想要取 10 个最差/最好的值并将它们从减速器中输出。
我该怎么做(假设特定键有大量值)?有没有一种方法可以在将所有值发送到减速器之前对其进行排序(并且在我读取前 10 个时停止读取输入)或者必须以不同的方式完成?
有人可以指出我可以查看的一段示例代码吗?
更新:我发现了两个有趣的 Jira 问题HADOOP-485和HADOOP-686。
任何人都有关于如何在 Hadoop 0.20 API 中使用它的代码片段?
orm - 没有 JOIN 的生活......理解和常见做法
许多“BAW”(大网站)正在使用依赖于带有索引的大表的数据存储和检索技术,并使用不会/不能在其查询中使用 JOIN 的查询(BigTable、HQL 等)处理可伸缩性和分片数据库。当您拥有大量非常相关的数据时,它是如何工作的?
我只能推测这种连接的大部分必须在应用程序方面完成,但这不是开始变得昂贵吗?如果您必须对几个不同的表进行多次查询以获取要编译的信息怎么办?与首先使用连接相比,多次访问数据库会不会变得更加昂贵?我想这取决于你有多少数据?
而对于常用的 ORM,他们倾向于如何处理无法使用 join 的问题?在当今大量使用的 ORM 中是否对此提供支持?还是大多数必须接近这种数据水平的项目都倾向于自行推出?
所以这不适用于我正在做的任何当前项目,但这是我几个月来一直在想的事情,我只能推测什么是“最佳实践”。我从来没有需要在我的任何项目中解决这个问题,因为它们从未达到需要的规模。希望这个问题也能帮助其他人..
正如下面有人所说,没有连接的 ORM “不起作用”。是否有其他数据访问层可供开发人员使用此级别的数据?
编辑: 为了澄清一下,Vinko Vrsalovic说:
“我相信 snicker 想要谈论 NO-SQL,其中事务数据被非规范化并用于 Hadoop 或 BigTable 或 Cassandra 方案。”
这确实是我要说的。
那些获得 xkcd 参考的人的奖励积分。
hadoop - 将数据写入 Hadoop
我需要从 Windows 框等外部源将数据写入 Hadoop (HDFS)。现在我一直在将数据复制到名称节点并使用 HDFS 的 put 命令将其摄取到集群中。在我浏览代码时,我没有看到用于执行此操作的 API。我希望有人能告诉我我错了,并且有一种简单的方法可以针对 HDFS 对外部客户端进行编码。
java - Hadoop 适合运行我的模拟吗?
用 Java 编写了一个随机模拟,它从磁盘上的几个 CSV 文件(总共约 100MB)加载数据并将结果写入另一个输出文件(数据不多,只是一个布尔值和几个数字)。还有一个参数文件,对于不同的参数,模拟输出的分布预计会发生变化。为了确定正确/最佳的输入参数,我需要跨多个输入参数配置运行多个模拟,并查看每组中输出的分布。每个模拟需要 0.1-10 分钟,具体取决于参数和随机性。
我一直在阅读有关 Hadoop 的文章,想知道它是否可以帮助我运行大量模拟;在不久的将来,我可能可以访问大约 8 台联网的台式机。如果我理解正确,map 函数可以运行我的模拟并吐出结果,reducer 可能就是身份。
我担心的是 HDFS,它似乎适用于大文件,而不是一小部分 CSV 文件(没有一个大到足以构成 64MB 的最小推荐块大小)。此外,每个模拟只需要每个 CSV 文件的相同副本。
Hadoop 对我来说是错误的工具吗?
python - 如何将小飞象序列文件输入转换为制表符分隔的文本
我有输入,可以是单个基元,也可以是基元列表或元组。
我想将其展平为一个列表,如下所示:
正常情况会变平(someiterablethatisn'tastring)
但是如果 values = '1234',我会得到 ['1', '2', '3', '4'],但我想要 ['1234']
如果 values = 1,我会得到 TypeError: 'int' object is not iterable,但我想要 [1]
有没有一种优雅的方式来做到这一点?最后我真正想做的只是 '\t'.join(flatten(values))
编辑:让我更好地解释一下......
我希望使用小飞象将 hadoop 二进制序列文件转换为平面制表符分隔的文本文件。使用输出格式选项 -outputformat text
Dumbo 是一个围绕 hadoop 流的 python 包装器。简而言之,我需要编写映射器函数:
def mapper(key, values) #做一些事情 yield k, v
其中 k 是键中第一部分的字符串,value 是制表符分隔的字符串,包含键的其余部分和字符串形式的值。
例如:
或更复杂:
输入键或值可以是原语或原语列表/元组我想要一个可以处理任何东西并返回值列表的“扁平化”函数。
对于输出值,我会做这样的事情 v = '\t'.join(list(str(s) for s in flatten(seq)))
python - 在 Hadoop Streaming 中生成单独的输出文件
仅使用映射器(Python 脚本)而不使用减速器,如何为每一行输出输出一个以键为文件名的单独文件,而不是输出长文件?
mysql - 如果 HBase 不在分布式环境中运行,它是否有意义?
我正在建立一个数据索引,这将需要以(document, term, weight)
. 我将存储多达几百万个这样的行。目前我在 MySQL 中将其作为一个简单的表来执行。我将文档和术语标识符存储为字符串值,而不是其他表的外键。我正在重新编写软件并寻找更好的数据存储方式。
看看 HBase 的工作方式,这似乎非常适合模式。我可以映射document
到{term => weight}
.
我在单个节点上执行此操作,所以我不关心分布式节点等。我应该坚持使用 MySQL,因为它可以工作,还是尝试 HBase 是否明智?我看到 Lucene 将它用于全文索引(这类似于我正在做的事情)。我的问题实际上是单个 HBase 节点与单个 MySQL 节点相比如何?我来自 Scala,那么直接 Java API 是否比 JDBC 和 MySQL 解析等每个查询都具有优势?
我主要关心的是插入速度,因为这是以前的瓶颈。处理后,我可能最终会将数据放回 MySQL 进行实时查询,因为我需要做一些在 MySQL 中更好的计算。
我将尝试对两者进行原型设计,但我相信社区可以为我提供一些有价值的见解。
hadoop - 这是 HBase 的合适(或可能)使用吗?
我想将 HBase 用作存储,我可以在其中推送几百万个格式的条目,{document => {term => weight}}
例如“将术语 X 插入文档 Y,权重为 Z”,然后发出类似“选择此文档的前 1000 个术语”或“为每个文档选择前 1000 个术语”。这适用于我当前的 MySQL 实现,但也许该域更适合 HBase。我注意到 HBase 和 BigTable 用于全文索引,这是一个类似的问题域。
您可以说我只是在 HBase 上阅读了几页,但我希望您理解我的问题的要点。它与这个问题有关。
可能的障碍可能包括 HBase 不允许使用与LIMIT
子句等效的查询。鉴于我想按权重查询,我想关联{weight => term}
,这对于具有相同权重的两个术语来说是有问题的(我假设 HBase 只允许唯一键)。或者,我必须存储给定权重的术语集合,但这会限制我准确限制返回术语数量的能力。