【问题标题】:best practice to load multiple client data into Hadoop将多个客户端数据加载到 Hadoop 中的最佳实践
【发布时间】:2016-01-28 19:08:26
【问题描述】:

我们正在使用 Cloudera CDH 在 Hadoop 框架上创建 POC。我们想将多个客户端的数据加载到 Hive 表中。

到目前为止,我们在 SQL Server 上为每个客户端都有单独的数据库。对于 OLTP,此基础架构将保持不变。 Hadoop 将用于 OLAP。 我们有一些对每个客户都相同的主要维度表。所有客户端数据库都具有完全相同的架构。这些表具有相同的主键值。到目前为止,这很好,因为我们为客户提供了单独的数据库。现在我们正在尝试将多个客户端数据加载到同一个数据容器(Hive 表)中。现在,如果我们通过 Sqoop 作业将数据从多个 SQL Server 数据库直接加载到 Hive 中,我们将拥有多个具有相同主键值的行。我正在考虑在 Hive 表中使用代理键,但 Hive 不支持自动增量,但可以使用 UDF 实现。

我们不想修改 SQL Server 数据,因为它正在运行生产数据。

一个。将多个客户端数据加载到 Hadoop 生态系统的标准/通用方式/解决方案是什么?

b. sql server 数据库表的主键如何轻松映射到 Hadoop Hive 表?

c。我们如何确保一个客户端永远无法看到其他客户端的数据?

谢谢

【问题讨论】:

  • 你真的希望在 Hive 中有一个“主键”吗?并在多个维度上运行具有多个连接的 R-OLAP 查询???祝你好运...
  • “所有客户端数据库都有架构” - 你的意思是完全相同的架构吗?
  • 你有什么真正的要求将来自不同客户端的数据合并到同一个数据库和同一个表中吗?在那种情况下,您是否考虑过为每个事实表中的每个客户端使用特定的分区?否则,为什么不为每个客户创建一个专用的 Fact DB 加上一个用于公共维度的公共 DB?
  • @SamsonScharfrichter 所有客户端数据库都具有相同的架构。假设两个客户端是 C1 和 C2。每个 SQL Server 数据库都有相同的 T_user 表和 1 作为 C1 和 C2 的用户的主键。现在,如果我们尝试将此数据存储到 Hive 表中,那么我们可以为两个不同客户端的用户插入 1。是否有任何标准解决方案或框架可以将 sql server 键映射到 hive 表?
  • 标准解决方案是做 IT 架构师的工作...

标签: sql-server hadoop hive sqoop cloudera-quickstart-vm


【解决方案1】:

@Praveen:使用映射器来克服每个客户端数据到 Hadoop 服务器的停机时间,因为在这种情况下客户端数据持有主键。 对每个客户端和日期分区使用最佳分区。 在开始 sqoop 导入之前,您必须为 HDFS 文件位置实现 TDE 区域。 *TDE:透明数据加密区,为您的客户端数据提供安全区的最佳实践。

【讨论】:

  • 你能描述一下什么是映射器吗?你说的是mapper和reducer吗?关于映射器的任何指针以及如何使用它们来管理多个客户端数据。
  • 如果源表中有主键,可以考虑使用映射器。使用 'm' 参数传递 n 号。的映射器。映射器实际上是转换您的表数据,这可能基于否。在映射器中,这些数据将根据分布式块的行进行拆分,并行计算。并且 Sqoop 中没有涉及用于数据导入的自定义 reducer。 Identity Reducer 在内部完成默认工作。在 sqoop 文档中搜索“-m”参数用法。
猜你喜欢
  • 2012-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多