首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

将 Hadoop 与现有的 RDBMS 相集成 (1)

将 Hadoop 与现有的 RDBMS 相集成 (1)

Apache™ Hadoop® 环境提供了一些组件,比如 MapReduce、HDFS、Pig、Hive、Oozie、Sqoop 和                Flume,等等。这些 Hadoop 工具和技术是为了处理大数据而设计的。在将数据导入 Hadoop 后,您可以使用诸如 Jaql 和 R                之类的工具来分析和使用这些数据。
为了给如何集成 Hadoop(特别是 Hadoop 分布式文件系统,即 HDFS)与传统关系数据库管理系统 (RDBMS)                定义一个高级系统设计,我使用了一个贷款申请系统作为一个案例。在这个贷款申请过程中,贷款申请人接洽了银行中的一名信贷员来申请贷款。贷款申请人提供了银行资料,信贷员使用这些资料在银行应用程序系统中检查银行帐户上的活动。基于这个人工评估,信贷员决定批准或拒绝贷款申请。如果获得批准,申请人应向银行提交贷款申请。贷款申请会通过一系列的审批,直到最后获得批准,贷款被支付给申请人。
通常,对大数据的预测和说明性分析是过程密集型操作。这些过程密集型操作应该对 HDFS 集群的 Hadoop 中的数据运行(而不是对 RDBMS 中的数据运行)。因为                HDFS 的存储和并行处理能力,而且因为 Hadoop 集群可以采用最佳方式在许多不同的现有可用硬件系统上运行,所以这种集成式设计:
  • 具有良好的可扩展性
  • 提供了成本更低的存储选项
  • 可以提高我们的大数据环境的整体性能
因为 Hadoop 可以存储更多的数据,而且可以存储更多类型的数据(结构化和非结构化数据),所以数据分析会更智能,并最终帮助我们制定更好的业务决策。
设置一个 Hadoop 集群 使用您正在使用的 Hadoop 解决方案中的可用信息来设置您的 Hadoop 集群。一些众所周知的标准解决方案包括:来自 IBM 的 IBM Open Platform                with IBM BigInsights for Apache Hadoop、来自 Cloudera 的 CDH,以及来自 Hortonworks 的                Hortonworks Data Platform (HDP) 。此外,还可以使用参考资料中列出的书籍。
回顾 IBM developerWorks 文章 ""                系列,该系列介绍了一种结构化的、基于模式的方法来简化定义整体大数据架构的任务。参见有关大数据的博客和社区,获得更多的想法和支持。
根据我的经验和研究,这些提示和技巧可以帮助您建立一个安全的、可扩展的 Hadoop 集群:
  • 在设置 Hadoop 架构之前总是创建一个专用的 Hadoop 用户帐户。该帐户将 Hadoop 安装与同一台机器上运行的其他服务分离。
  • 避免在您的配置中使用 RAID(独立磁盘冗余阵列)的原因如下:
    • RAID 提供的冗余是不必要的,因为 HDFS 默认情况下为节点之间的复制提供了冗余。
    • RAID 配置中的磁盘故障会影响整个磁盘阵列,导致节点不可用。然而,在 HDFS 中,节点将继续执行操作,不受故障磁盘影响。
    • 在 RAID 系统中,读写操作的速度受到阵列中最慢磁盘的速度的限制。但是,HDFS 使用了                            JBOD(只是一群磁盘)配置,该配置中的磁盘操作是单独的,所以平均速度要高于最慢的磁盘。
  • 计算您需要的数据存储量:用节点数量乘以您在给定时间内预计将会收集的数据的大小。
  • 在多个机架的 Hadoop 集群中获得最大性能,通过使用 topology.node.switch.mapping.impl                    配置属性将您的节点映射到这些机架。
  • 确保主节点(namenode)上有足够的内存。主节点通常具有较高的内存需求,因为它将整个名称空间的文件和数据块元数据都保存在内存中。次级主节点拥有主节点的副本或镜像。
  • 虽然您可以将主节点和次级主节点放在同一个节点上,但某些场景要求您将它们放在单独的节点上。例如,将它们放在单独的节点来帮助您恢复主节点丢失(或损坏)的所有元数据文件。
  • 将 jobtracker 放在一个专用的节点上,因为 jobtracker 运行的 MapReduce 作业可能在增加。
  • 当主节点和 jobtracker 在不同的节点上时,同步它们的从属文件,因为集群中的每个节点都需要运行一个 Datanode 和一个                    Tasktracker。
  • 检查主节点和 jobtracker 的审计日志及资源管理器。HDFS 有自己的审计日志。
  • 要控制执行 HDFS 操作期间的记忆痕迹和 CPU 使用率,可以设置以下属性:
    • mapred.tasktracker.map.tasks.maximum:该属性控制同一时间运行在 tasktracker 上的 Map                            任务的数量。
    • mapred.tasktracker.reducer.tasks.maximum:该属性控制同一时间运行在 tasktracker 上的                            Reduce 任务的数量。
    • mapred.child.java.opts:该属性定义了分配给这些 Map 任务和 Reduce 任务生成的每个子 JVM                            的内存数量。
  • 对于不会频繁更新的文件,可以使用 DistributedCache 工具在 MapReduce 程序中缓存这些文件。
  • 您还可以在 hadoop-env.sh 脚本中使用 HADOOP_NAMENODE_OPTS 和 HADOOP_SECONDARYNAMENODE_OPTS                    参数来调整主节点和次要主节点的内存需求。
  • 在您的 Hadoop 集群中配置一个安全架构,包括以下这些工具或技术:
    • 默认情况下,Hadoop 使用 whoami 工具(在大多数 UNIX                            操作系统中可用)来实现授权和身份验证。不幸的是,这个工具很容易被知道操作系统凭证的任何用户模拟。不过,为了提高您的 Hadoop                            集群的安全性,可以配置您的 Hadoop 集群来使用 Kerberos 身份验证机制。同时,还需要使用安全令牌来补充基本的 Kerberos                            身份验证机制。
    • 确保 Kerberos 是在 Hadoop 集群中实现的。Kerberos 在客户端(我们的 J2EE 应用程序)与 Hadoop                            集群之间启动和建立握手协议。对服务、文件访问和作业的后续调用是通过安全令牌(委托令牌、块访问令牌和作业令牌)来安全处理的。这种方法还可以减少已创建的任务将在                            Kerberos 密钥分发中心拥有的负载,如果该负载是在每个任务一个令牌的基础上生成的。
    • 设置 Oozie 工作流引擎。Oozie 工作流作业需要建立可靠的令牌,以便可以代表启动该工作流的用户来运行作业。
    • 配置 Spengo,它包含在 Hadoop 中,用于对 Web 接口(比如 Hue)进行身份验证。为了实现 Hadoop                            中的保密性,数据通过使用内置的压缩格式进行了伪加密(pseudo-encrypted)。
    关于在您的 Hadoop 集群中实现安全性的更多信息,请参阅 "" 技术报告。
  • 在设置您的 Hadoop 集群后对其进行基准测试。
返回列表