- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我阅读了关于加盐以及如何在顺序键的情况下将其用于负载平衡的内容。基本上,salt 应该将顺序行分发到不同的区域服务器。
我也读过这个article这解释了如何在加盐的表上运行 MR 作业。
因此,它建议将盐生成为:
StringUtils.leftPad(Integer.toString(Math.abs(keyCore.hashCode() % numberOfRegions)), 3, "0") + "|" + logicalKey
所以您基本上采用原始 key 的哈希值并进行模除法以获得盐分。
您还需要指定基于 salt 的预拆分,以便每个区域包含具有相同 salt 的行。
这一切似乎都合情合理。我的问题是,当您添加更多区域服务器时会发生什么?
预计您还会增加区域数量,因此您必须更改拆分策略,以便新区域遵循“one-salt-for-all-rows-in-region”规则。您还需要通过增加的 numberOfRegions 执行模除法。
所有这一切意味着,当我试图获取在区域数量较少时添加的行时,我可能会搞乱查询。例如,一开始您可以除以模 10(10 个区域),然后您可以除以模 50(现在是 50 个区域)。
谁能解释一下这个加盐/预 split 的完整过程?
最佳答案
Salt 用于避免单个区域的热点。在您的情况下, numberOfRegions
被视为涉及使用顺序键进行批量写入的区域数量。此数字不必与集群中的区域总数一致。例如,如果 10 个区域可以处理您的写入量,则您应该在公式中使用等于 10 的 numberOfRegions
,或者 20 以防将来您建议将写入次数加倍。而且您不需要对区域中的所有行都遵循一种盐的规则。您需要找到足以处理您的写入量的区域数量。
此外,现在您不需要像博客文章中提到的那样编写自定义输入表格式。您可以为单个 map reduce 作业指定多个扫描。在这种情况下,数据局部性将自动处理。每次扫描都会产生几个输入分割,每个区域对应一次扫描中的数据。请参阅下面的示例
List<Scan> scans = new ArrayList<>();
for(int i = 0; i < numberOfRegions; i++){
Scan scan = new Scan();
scan.setBatch(500);
scan.setAttribute(Scan.SCAN_ATTRIBUTES_TABLE_NAME, YOUR_TABLE_NAME);
String regionSalt = StringUtils.leftPad(Integer.toString(i), 3, "0");
scan.setStartRow( Bytes.toBytes(regionSalt + "|" + scanStart));
scan.setStartRow( Bytes.toBytes(regionSalt + "|" + scanStop);
scans.add(scan);
}
TableMapReduceUtil.initTableMapperJob(
scans,
YourMapper.class,
Text.class,
Text.class,
job);
关于hadoop - 加盐时添加 RegionServers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34352657/
我正在阅读有关如何对 key 进行加盐以使您的加密安全的教程,但无法充分利用它。我不太了解密码学,需要一些帮助。我正在使用 commoncrypto 来加密文件,并且完成了,除了它不安全的事实....
我是一个加密新手,但需要在存储到数据库之前对敏感的个人数据进行加密。我计划将 AES 与 CBC 结合使用,但也想使用盐。然而,我找不到一种方法来做到这一点(除了 BouncyCaSTLe,我的主机由
升级到 php7 后,BCryptPasswordEncoder 抛出以下错误,例如在使用 FOSUserBundle 标准注册页面注册时: "Use of the 'salt' option to
这个简单的代码接受用户输入并将给定字符串的 sha256 打印到标准输出。 #include #include #include #include int main() { SHA256_C
我想知道以下设置的严重问题是什么: 用户名/密码登录方案Javascript/ajax 从服务器请求盐值(我们在前面的问题中已经确定盐不是 secret 值)Javascript 对密码和盐执行 SH
我一直在 ruby 应用程序中创建加盐密码,我认为这是标准方式: password_salt = BCrypt::Engine.generate_salt password_hash = BCry
我听说过有人在使用这种方法,想知道这意味着什么。我只是知道这是个坏主意! 据我所知,在将哈希存储到数据库之前对密码进行加盐处理的主要目的是使每个哈希算法都独一无二,因此在尝试破解它时需要为每个用户提供
我需要编码/加密数据库 ID 并将它们附加到我的 URL。安全性不是我要处理的问题,但我正在寻找具有适度安全性的东西。主要目标是拥有唯一且 URL 安全的短 ID。 下面的代码片段似乎可以满足我的需要
〇、前言 了解行业术语是一个程序猿的基本素养,只有更深入的了解才能与其他人畅快沟通,下面来简单汇总下,会持续更新。 欢迎评论区补充,博主会逐个加入后续文章。 1、“没有银弹” 从字面意思来看
我正在使用 RC4 C++ 程序进行更多工作,以与命令行参数兼容。 我想知道是否有人可以指出一些关于命令行 openssl rc4 在加密和解密时如何使用盐的体面文档的方向,这样我就可以在我的程序中加
我有一个字符串需要在 C# 中使用 salt 进行哈希处理并匹配它在 PHP 中的结果。 C#代码如下: string stringToHash = "123"; st
这个问题在这里已经有了答案: 关闭 9 年前。 Possible Duplicate: Secure hash and salt for PHP passwords 我在 stackoverflow
我有一个项目,显然该软件的设计者没有考虑安全性。 密码以明文形式存储并通过明文传输。所以我剩下的任务就是解决这个问题。 我对安全性有点生疏,所以我的问题是:对于在线用户密码身份验证,使用散列/加盐技术
盐的新手,我添加了第一个服务器(wx-1),它可以工作,但是当我添加不同的服务器时,test.ping 没问题,但是当执行 salt 'qing' state.highstate 时,失败,错误信息为
我使用此 openssl 命令创建了一条加密消息: openssl enc -aes-256-cbc -salt -in plaintext.txt -out cipher.enc 我尝试过 Cryp
我正在对许多列执行联接,这些列有时可能包含数十亿行空值,因此我想对列加盐以防止联接后出现倾斜,如 Jason Evan 的帖子中提到的:https://stackoverflow.com/a/4339
我是一名优秀的程序员,十分优秀!