1、网易大数据平台架构实践 技术创新 变革未来 01 02 03 04 05 大数据平台概述 Kudu:实时更新存储 Sloth:实时计算 Kyuubi:Spark 多租户 未来规划 PART 01 大数据平台概述 网易大数据发展历程 提速阶段(2014)平台化(20092010)大数据初体验 起步阶段(20112014)工具化 整合阶段 猛犸 有数 初级阶段(2008)传统方法 大数据系统为什么难用 SparkSQL 查询处理 FlinkSQL Spark 执行器 kafka Redo Log Flink HDFS Parquet 表 HDFS Parquet 物化视图 Hbase/ES 索引
2、平台的需求是什么 01 提供大数据基础能力 02 提升使用效率 03 提升管理效率 04 多租户和安全 大数据体系架构 大数据应用开发层 数据加工 数据计算 资源管理 数据存储 数据集成 数据源 数据集成 离线计算 Hive 大数据开发套件(可视化 IDE)作业流开发 数据开发 任务运维 流式计算 Sloth 统一资源管理与调度 Yarn 自助分析 数据管理 内存计算 Spark 权限管理 多租户管理 元数据管理 分布式文件系统 HDFS和Kudu 全量/非实时接入 Sqoop 结构化数据 如RDBMS备库 半结构化数据 如JSON 分布式数据库 HBase 实时/增量接入 NDC和DataS
3、tream 非结构化数据 如音频文件 数据质量校验 DQC 秘钥管理 Kerberos 运维监控 Ambari 平台特色 统一元数据服务 流计算服务?Hive,spark,impala,hbase元数据打通 数仓体系内,用户无需在不同的系统一 之间做元数据同步 不同系统组件之间,数据全增量同步 Sloth流计算服务化平台 通过增量计算的方式,来完成流计算任务 使用SQL作为开发方式,完全与离线SQL兼容,支持window/join/subquery/having等复杂SQL 功能?数据安全与权限?一站式?HDFS/Hive/Impala/Spark等组件自动权 限同步 支持到列级别的权限控制
4、基于角色访问控制,权限控制到个人 支持操作审计 一站式的数据平台 一站式的统一部署,监控,运维体系 自研和开源相结合 Kafka服务化 自研日志和数 据库同步工具 扩展Ranger 统一授权、性 能优化 Spark高可用 多租户 Kudu优化 PART 02 Kudu:可更新存储 Kudu定位 HDFS:批量数据写入能力,没有数据更改能力;在实时性要 求较高的场景下,510min需要写入一个文件,造 成小文件数量比较多,对NameNode压力较大;对 大批量数据扫描比较又好,基本没有随机查询能力 HBase:大批量数据写入能力;极高的随机数据读写能力;支 持指定rowkey的update操作;
5、扫描分析能力非常低 下 Kudu:兼备HDFS大数据量写入与分析扫描能力,同时具备 HBase的随机读写能力 与HBase对比 HBase Kudu 集群架构 Master-Slave 结构 Master-Slave 结构 选主方式 ZK选主 Raft内部自动选主 数据分布 Range方式分区 Range、HASH分区,支持组合分区 数据写入 HDFS(Pipleline)Raft多副本 数据格式 ColumnFamily 级别列存 RowGroup形式,同一个RG内部列存(类似Parquet)Kudu原理 Kudu的缺陷?Impala/Kudu与Impala/Parquet比有不小差距 没有
6、Split&Merge功能 官方TPCH 测试结果 结论:我们性能比 Parquet 就好那么一点点 _ 1T数据Kudu&Parquet 性能测试 3000.00 2500.00 2000.00 1500.00 1000.00 我们TPCH测试结果 500.00 大家都是搞技术的,还是诚实点好_ 0.00 q1 q2 q3 q6 q7 q10 q12 q14 q15 q16 q17 q18 q19 parquet kudu_raw Kudu Runtime Filter 没有runtime filter User表a(10万记录)Event表b(10亿记录)加入runtime filter功
7、能 select xxx from user a,event b on a.userid=b.userid where xxx 通过runtime filter 功能,小表的连接键被做成 BF形式通过 Impalad 下发到Kudu节点,联合大表的连接键,在大表读取数据时参与数据 的过滤,从而使得大表传递到 Impalad 层的数据大量减少,即在计 算前减少参与计算的数据量,达到提升效率的结果 Kudu Runtime Filter Kudu Runtime Filter 1T数据Kudu&Parquet 性能测试 3000.00 2500.00 2000.00 1500.00 1000.00
8、 500.00 0.00 q1 q2 q3 q6 q7 q10 q12 q14 q15 q16 q17 q18 q19 parquet kudu_new kudu_raw Kudu Tablet Split?支持Range分区分裂?仅修改元数据,在线完成分裂,compaction时再做物理分裂?主从协同 应用场景 01 秒级实时 02 点查询和多维分析融合 03 实时维表(一)秒级实时 共享单车解决了出行最后一公里问题 Kudu解决分析数据最后半小时的实时性问题 实时写入 小批量写入(二)点查和多维分析融合 游戏用户行为日志系统 游戏用户行为日志主要作用:?指定用户行为查询(给定用户id,查询
9、某个时间段内的行为,可以进行反外挂等分析)?大批量用户行为分析(分析特定区域用户行为,比:如哪个区域玩家氪金较多?)原先的架构 Data Source HBase Log/action 2030亿/天 指定用户scan Kafka HDFS Parquet Impala Result output HBase:指定用户id查询 HDFS:批量用户行为分析 架构缺陷:两套系统,数据需要保存两份,6副本数据 点查和多维分析融合 Data Source Log/action Impala Random read/olap NKDu dWu Result output 只需要一份数据,提供随机查询和数
10、据分析(三)实时维表 实时同步维度数据,联查分析 数据同步工具 数据库 Kudu Hadoop PART 03 Sloth:实时计算 Sloth特点 SQL开发 与离线SQL兼容 执行引擎 扩展Flink Exactly Once 增量计算模型 DDL UDF Having Join Subquery Whole Stage CodeGen 与离线统一平台 Sloth 开发平台 Sloth 增量计算 案例:所有商家按销售额做分类统计,销售额在0,100区间内的归为一类,100,200区 间的的归为一类,以此类推,通过计算输出每个区间内的商家个数。这个任务可以用SQL定义为:-stage1:计算
11、每个商家的销售总额 INSERT INTO tmp SELECT seller_id,sum(payment)as total FROM source GROUP BY seller_id;-stage2:计算每个销售额区间内的商家个数 SELECT count(seller_id)as num,total/100 as range FROM tmp GROUP BY(total/100);Sloth 增量计算 输入数据 离线计算 流式计算 增量计算 Sloth 增量计算 输入数据 离线计算 流式计算 增量计算 Sloth 增量计算 输入数据 离线计算 流式计算 增量计算 Sloth 增量计算
12、 输入数据 离线计算 流式计算 增量计算 Sloth 执行计划生成 PART 04 Kyuubi:Spark 多租户 Kyuubi V.S.HiveSever2 相同点:?xDBC方式,不依赖语言,方便与应用进行数据交互;应用侧不依赖Hive/Hadoop libs,部署简单,无客户端兼容性问题;MetaStore/HDFS 配置不可见,无数据及元数据泄露问题;Authentication&Authorization,解决数据安全问题;HA机制,动态扩容,解决应用侧的并发和负载均衡问题;?不同点:?Spark SQL vs MapReduce Kyuubi V.S.Spark Thrift S
13、erver 1.多租户-SparkContext 多实例-Hadoop Impersonation 2.Spark SQL as a Service -High Availability-Operation log 3.Security-Kerberos Support-Row/Column Level Authorization Kyuubi:统一接口 一套接口规范?无缝衔接 易于集成 HiveServer2 Thrift API 两种执行引擎?Hive Spark SQL 多种连接方式?Beeline JDBC ODBC?猛犸 有数 Kyuubi:弹性资源 Kyuubi动态资源申请?资源高
14、效 控制成本 支持session级别配置:队列/核数/内存/等等?示 例:jdbc:hive2:/host:port/;hive.server2.proxy.user=tom#spark.yarn.queue=theque;spa rk.executor.instances=3;spark.executor.co res=3;spark.executor.memory=10g TxxxSession Req TxxxSession Resp Thrift Client TxxxOperation Req TxxxOperation Resp Kyuubi动态缓存SparkContext?基于用
15、户连接创建、注册 基于空闲策略缓存、回收 Kyuubi Server Frontend Service Backend Service Session Manager SparkSessionCache Manager SparkSession KyuubiSession KyuubiOperation Spark动态资源分配特性?spark.dynamicAllocation.enabled spark.dynamicAllocation.minExecutors spark.dynamicAllocation.maxExecutors.OperationManager Kyuubi:安全特
16、性 安全认证 安全访问 权限隔离?Kerberos Support Hadoop Impersonation代理执行 权限控制?集成spark-authorizer GitHub:https:/ Row/Column Level Access Control 端到端数据安全隔离 Spark Authorizer Kyuubi:服务可用性?并发 负载均衡 水平扩展 负载均衡 基于ZooKeeper Namespace Discovery实现?单点故障 服务可用性 兼容HiveServer2 JDBC Client jdbc:hive2:/;serviceDiscoveryMode=zooKeep
17、er;zooKeeperNamespace=kyuubi;hive.server2.proxy.user=tom#spark.yarn.queue=theque;spark.executor.cores=3;spark.executor.memory=10g KyuubiServerhost1:port1 ZooKeeper MetaStore&Hadoop JDBC Client KyuubiServerhost2:port2 总结 Kyuubi 一个以HiveServer2 Thrift API为接口协议,以Spark SQL的内置处理引擎的即席查询服务。它对于Spark自带的Thrift Server相比增加了适应于多租户场景下的特性?无缝衔接 易于集成?资源高效 控制成本?安全访问 权限隔离?水平扩展 负载均衡 Get Kyuubi?GitHub:https:/ PART 05 未来规划 未来规划 01 高性能查询引擎 02 离线和实时计算混部 03 新硬件加速GPU/FPGA 04 智能任务诊断和优化