本文解答了有关 SQL Server 大数据群集 概念、功能、部署、支持和工具的常见问题。
最佳做法
关于文件位置有哪些建议的最佳做法?
与在基于 Windows 或 Linux 的裸机计算机上配置 SQL Server 相比,这方面的灵活性更小。 在 Kubernetes 环境中,这些项目是抽象的,它们需要具有可移植性。 目前,针对每个 Pod 提供有可用于数据和日志的 2 个永久性卷 (PV)。 有关详细信息,请参阅在 Kubernetes 中使用 SQL Server 大数据群集实现数据暂留。
是否需要在 SQL Server 大数据群集上进行事务日志备份?
只需针对 SQL Server 主实例中的用户数据库执行日志备份(具体因恢复模式或 HA 配置而异)。 数据池数据库仅使用简单恢复模式。 这同样适用于为 PolyBase 创建的 DW* 数据库。
如何监视分布式查询是否确实在使用计算池?
可以使用已针对大数据群集场景进行了增强的现有 PolyBase DMV。 有关详细信息,请参阅对 PolyBase 进行监视和故障排除。
是否可以直接通过 kubectl 将大数据群集资源配置到 Kubernetes API 服务器并进行管理?
尽管可以使用 Kubernetes API 或 kubectl 修改某些设置,但这并不受支持,我们也不建议这么做。 必须通过 azdata 执行所有大数据群集管理操作。
如何备份存储在 HDFS 中的数据?
可以通过 webHDFS 使用任何启用硬件级别存储快照或复制/同步的解决方案。 还可以使用 azdata bdc hdfs cp
。有关详细信息,请参阅 azdata bdc hdfs。
概念和功能
是否可以“扩展”存储过程? 例如,是否可以让此过程在计算池上运行?
目前没有。 一种选择是在 Always On 可用性组中部署 SQL Server。 然后,可以使用可读的次要副本来运行某些过程(例如机器学习训练/评分以及维护活动等)。
如何动态缩放池的 Pod?
目前不支持此场景。
是否可以备份存储在数据池中的外部表?
数据池实例中的数据库不包含任何有关外部表的元数据 - 就像任何用户数据库一样。 可以执行备份/还原,但为了避免出现不一致的结果,必须确保 SQL 主实例中元数据数据库中的外部表元数据处于同步状态。
数据池是否提供分片?
数据池是一种分布式表概念。 分片通常作为 OLTP 概念被引用 - 目前不支持。
何时应将数据池或存储池用于原始数据存储?
我们保留了“池”这一术语用来描述同类服务或应用程序的集合。 例如,数据池是一组有状态的 SQL Server 计算和存储,存储池是一组 HDFS 和 Spark 服务。 SQL Server 主实例是指可以在可用性组中配置的单个实例或多个实例。 SQL Server 主实例在 Linux 上是一个常规的 SQL Server 实例,你可以使用 Linux 上提供的任何功能。 首先应从数据模型、实体以及将主要针对实体进行操作的服务/应用程序着手。 无需将所有数据都存储在 SQL Server、HDFS 或数据池等一个位置中。 根据数据分析,可以将大部分数据存储在 HDFS 中、将数据处理成更为有效的格式,然后向其他服务公开。 剩余的数据应存储在 SQL 主实例中。
SQL Server 大数据群集是否支持基于 GPU 的深度学习库和计算(例如 PyTorch、Keras 和特定映像库等)?
目前不支持此场景。
是否可以为一个池配置多个卷声明?
每个 Pod 只能有两个永久性卷 (PV)。 可以在 OS 级别将卷抽象化并将它用于永久性存储。 例如,可以使用多个磁盘创建一个 RAID 0 OS 分区,然后使用本地存储预配程序将该分区用于永久性卷。 目前无法为每个 Pod 使用更多的 PV。 PV 会映射到容器内的目录,这是固定的。 有关永久性卷的详细信息,请参阅 Kubernetes 中的永久性卷文档。
如果配置多个提供程序和多个磁盘,是否将用所有数据卷声明来更新 HDFS 配置?
可以将存储池配置为在部署时使用特定的存储类。 请参阅在 Kubernetes 中使用 SQL Server 大数据群集实现数据暂留。
有哪些方法可以访问基于 Ceph 的存储?
HDFS 分层使我们能够以透明方式与基于 S3 的协议集成。 有关详细信息,请参阅如何在大数据群集中装载 S3 以实现 HDFS 分层。
升级后 HDFS 中的数据是否会保留?
是的,因为数据受永久性卷的支持,因为将得以保留,升级只是使用新映像来部署现有 Pod。
HDFS 分层如何控制缓存?
使用 HDFS 分层时,数据缓存在大数据群集中运行的本地 HDFS 内,这使用户能够将数据附加到大型数据湖,而无需引入所有数据。 分配给缓存的空间量是可配置的,目前默认为 2%。 数据将保留在缓存中,但如果超过了该阈值,数据则会被删除。 此外,还会维护数据湖中数据的安全性,并且会应用所有 ACL。 有关详细信息,请参阅针对大数据群集配置 HDFS 分层。
是否可以使用 SQL Server 2019 来虚拟化 Azure Data Lake Store Gen2? 此集成是否会考虑文件夹级别权限?
是的,可以使用 HDFS 分层来虚拟化存储在 ADLS Gen2 中的数据。 将 HDFS 分层装载到 ADLS Gen2 后,用户能够查询 HDFS 数据并对它运行 Spark 作业。 装载的存储将显示在大数据群集的 HDFS 中由 --mount-path 指定的位置中,并且用户可以像使用本地存储一样使用该装载路径。 有关详细信息,请参阅针对大数据群集配置 HDFS 分层。 有关 HDFS 分层权限的详细信息,请参阅管理 SQL Server 大数据群集的 HDFS 权限。
Azure Kubernetes 服务 (AKS) 上主节点的默认高可用性和/或冗余设置是什么?
AKS 控制平面支持运行时间 SLA 保证 99.95% 可用性。 AKS 群集节点(工作器节点)使用可用性区域。有关详细信息,请参阅 AKS 可用性区域。 可用性区域 (AZ) 是 Azure 提供的一种高可用性产品/服务,在数据中心发生故障时可以保护应用程序和数据。 对于不使用可用性区域的群集,AKS 支持 99.9% 的可用性。 有关详细信息,请参阅 Azure Kubernetes 服务 (AKS) 的 SLA。
是否可以保留 YARN 和 Spark 作业历史记录日志?
重新启动 sparkhead 不会导致日志丢失,这些日志存储在 HDFS 中。 还可以从 /gateway/default/sparkhistory UI 中查看 Spark 历史记录日志。 对于 Yarn 容器日志,你不会在 Yarn UI 中看见那些应用,因为 Yarn RM 会重启,但那些 Yarn 日志仍然在 HDFS 中,并且你可以从 Spark 历史记录服务器链接到它们。 应始终将 Spark 历史记录服务器用作入口点来诊断它们的 Spark 应用。
是否可以为任何池关闭缓存功能?
默认情况下,将保留 1% 的总 HDFS 存储空间来缓存装载的数据。 缓存是跨装载的全局设置。 目前没有公开的方法可以关闭缓存,但是,可以通过 hdfs-site.dfs.provided.cache.capacity.fraction 设置来配置百分比。 此设置控制群集中可用于缓存数据的所提供的存储与总容量的占比。 若要了解如何进行修改,请参阅如何配置大数据群集设置后期部署。 有关详细信息,请参阅针对 SQL Server 大数据群集配置 HDFS 分层。
如何在 SQL Server 2019 大数据群集中调度 SQL 存储过程?
可以在大数据群集的 SQL Server 主实例中使用 SQL Server 代理服务。
大数据群集是否支持本机时序数据场景,例如由 IoT 用例生成的时序数据?
目前,大数据群集中的 InfluxDB 仅用于存储在大数据群集内收集的监视数据,并且不会作为外部终结点公开。
是否可以将所提供的 InfluxDB 用作针对客户数据的时序数据库?
目前,大数据群集中的 InfluxDB 仅用于存储在大数据群集内收集的监视数据,并且不会作为外部终结点公开。
如何将数据库添加到可用性组?
在大数据群集中,HA 配置会创建名为 containedag 的可用性组,该组还包括跨副本复制的系统数据库。 由 CREATE DATABASE 或 RESTORE 工作流创建的数据库会自动添加到包含的 AG 并会被设定种子。 在 SQL Server 2019 (15.0) CU2 之前,必须连接到大数据群集中的物理实例、还原数据库,并将它添加到 containedag。 有关详细信息,请参阅部署高可用性 SQL Server 大数据群集。
是否可以为在大数据群集中运行的组件配置核心/内存资源?
目前,可以使用 sp_configure 来设置 SQL 实例的内存,就像在 SQL Server 中一样。 对于核心,可以使用 ALTER SERVER CONFIGURATION SET PROCESS AFFINITY
。 默认情况下,容器会查看主机上的所有 CPU,并且我们目前无法使用 Kubernetes 指定资源限制。 对于计算池/数据池/存储池,可以从 SQL Server 主实例使用 EXECUTE AT DATA_SOURCE 语句来进行配置。
当某一个 Kubernetes 工作器节点关闭或者中断时会发生什么情况?
如果有足够的资源,与相应工作器节点没有关联的 Pod 将移动到 Kubernetes 群集中的另一个节点。 否则,Pod 将处于不可用的状态,从而导致中断。
如果将节点添加到 Kubernetes 群集,大数据群集是否会自动进行重新平衡?
此操作仅依赖于 Kubernetes。 除了使用节点标签放置 Pod 外,没有其他机制可从大数据群集内控制 Kubernetes 资源的重新平衡。
从 Kubernetes 群集中删除节点时会对大数据群集资源造成什么影响?
此操作等效于正在关闭主机节点。 有一些机制使你能够使用污点过程在 Kubernetes 中对此进行协调,这通常用于升级或节点维护。 有关详细信息,请参阅 Kubernetes 文档 Taints and Tolerations(污点和容忍)。
与大数据群集捆绑的 Hadoop 是否处理数据的复制?
是的,复制因子是 HDFS 可用的配置之一。 有关详细信息,请参阅配置永久性卷。
大数据群集在功能和集成方面是否与 Synapse 重叠了?
这取决于你的用例和需求。 大数据群集提供了完整的 SQL Server 外围应用以及 Microsoft 支持的 Spark 和 HDFS(本地)。 大数据群集使 SQL Server 客户能够集成到分析/大数据中。 Azure Synapse 只是一个分析平台,作为云中的托管服务为客户提供一流的体验,侧重于横向扩展的分析。 Azure Synapse 不以成为可操作工作负荷的一部分为目标。 大数据群集旨在提供与可操作存储更为接近的数据库分析方案。
SQL Server 是否将 HDFS 用作它在 SQL Server 大数据群集中的存储?
SQL Server 实例的数据库文件不存储在 HDFS 中,但 SQL Server 可以使用外部表接口查询 HDFS。
有哪些可用于将数据存储在每个数据池中的分布式表中的分布式选项?
ROUND_ROBIN 和 REPLICATED。 ROUND_ROBIN 为默认选项。 HASH 不可用。
大数据群集是否包含 Spark Thrift 服务器? 如果包含,那么是否公开了 ODBC 终结点以连接到 Hive 元存储表?
我们目前通过 Thrift 协议公开 Hive 元存储 (HMS)。 我们记录了协议,但目前尚未开启 ODBC 终结点。 你可以通过 Hive 元存储 HTTP 协议来访问它。有关详细信息,请参阅 Hive 元存储 HTTP 协议。
数据加载
是否可以将数据从 SnowFlake 引入到大数据群集中?
Linux 上的 SQL Server(也适用于大数据群集中的 SQL Server 主实例)不支持通用 ODBC 数据源,此类数据源使你能够安装第三方 ODBC 驱动程序(SnowFlake、DB2 和 PostgreSQL 等)并查询它们。 此功能目前仅在 Windows 上的 SQL Server 2019 (15.0) 中可用。 在大数据群集中,可以使用 JDBC 通过 Spark 读取数据,然后使用 MSSQL Spark 连接器将数据引入到 SQL Server 中。
是否可以使用自定义 ODBC 数据源将数据引入到大数据群集中?
Linux 上的 SQL Server(也适用于大数据群集中的 SQL Server 主实例)不支持通用 ODBC 数据源,此类数据源使你能够安装第三方 ODBC 驱动程序(SnowFlake、DB2 和 PostgreSQL 等)并查询它们。
如何使用 PolyBase CTAS 将数据导入到同一个表,而不是每次运行 CTAS 时都创建新表?
可以使用 INSERT..SELECT
方法来避免每次都需要创建新表。
将数据加载到数据池而不是以本地表的形式直接加载到主实例中有哪些优点/注意事项?
如果你的 SQL Server 主实例有足够的资源来满足你的分析工作负荷,那么它始终是最快的选项。 如果要针对你的分布式查询将执行卸载到其他 SQL 实例,那么可以选择数据池。 此外,还可以使用数据池将数据从 Spark 执行程序并行引入到不同的 SQL 实例中,这样一来,加载从 Hadoop 分布式文件系统 (HDFS) 生成的大型数据集在性能上通常比将数据加载到单个 SQL Server 实例更好。 但是,这也很难说,因为你仍然可能在一个 SQL Server 中有多个表,并且可以并行插入(如果需要的话)。 性能取决于许多因素,因此,在这方面没有单一的指导和建议。
如何监视数据池表中的数据分布?
可以使用 EXECUTE AT 来查询 DMV(类似 sys.dm_db_partition_stats)来获取每个本地表中的数据。
curl 是将文件上传到 HDFS 的唯一选项吗?
不是,可以使用 azdata bdc hdfs cp。 如果你提供了根目录,命令将以递归方式复制整个树。 只需更改源/目标路径即可使用此命令进行复制/输出。
如何将数据加载到数据池中?
可以使用 MSSQL Spark 连接器库来帮助处理 SQL 和数据池引入。 有关引导式演练,请参阅教程:使用 Spark 作业将数据引入到 SQL Server 数据池中。
如果在含有大量文件夹/子文件夹和文本文件的 (Windows) 网络路径上有大量数据,如何将这些数据上传到大数据群集上的 HDFS?
尝试使用 azdata bdc hdfs cp。 如果你提供了根目录,命令将以递归方式复制整个树。 只需更改源/目标路径即可使用此命令进行复制/输出。
是否可以增加已部署群集上的存储池的大小?
目前没有执行此操作的 azdata
接口。 可以选择手动调整所需 PVC 的大小。 调整大小是一个复杂的操作。有关详细信息,请参阅 Kubernetes 中的永久性卷文档。
数据虚拟化
何时应使用链接服务器和 PolyBase?
有关主要差异和用例,请参阅 PolyBase 常见问题解答。
支持哪些数据虚拟化源?
大数据群集支持来自 ODBC 源(例如 SQL Server、Oracle、MongoDB 和 Teradata)的数据虚拟化。它还支持远程存储的分层,例如 Azure Data Lake Store Gen2 和 S3 兼容的存储,以及 AWS S3A 和 Azure Blob File System (ABFS)。
是否可以使用 PolyBase 对存储在 Azure SQL 数据库中的数据进行虚拟化?
是的,可以使用大数据群集中的 PolyBase 访问 Azure SQL 数据库中的数据。
为什么 CREATE TABLE 语句包含关键字 EXTERNAL? EXTERNAL 与标准的 CREATE TABLE 在作用上有什么不同?
通常 EXTERNAL 关键字表示数据不在 SQL Server 实例中。 例如,可以在 HDFS 目录的基础上定义存储池表。 数据存储在 HDFS 文件中,而不是你的数据库文件中,但外部表提供了以关系表的形式查询 HDFS 文件的接口,就像在数据库中一样。
访问外部数据这一概念称为数据虚拟化。有关详细信息,请参阅通过 PolyBase 引入数据虚拟化。 有关在 HDFS 中虚拟化 CSV 文件中的数据的教程,请参阅[从存储池虚拟化 CSV 数据(大数据群集)]。
使用在 SQL Server 大数据群集中运行的 SQL Server 进行的数据虚拟化与使用 SQL Server 进行的数据虚拟化有何区别?
有关比较的详细信息,请参阅大数据群集中的 PolyBase 和独立实例中的 PolyBase。
如何轻松判断外部表指向的是数据池还是存储池?
可以通过查看数据源位置前缀来确定外部表的类型,例如 sqlserver://、oracle://、sqlhdfs:// 和 sqldatapool://。
部署
我的大数据群集部署失败了。 如何查看失败的原因?
请参阅使用 Azure Data Studio 笔记本管理 SQL Server 大数据群集。 另请参阅 Kubernetes 排除故障中的排除故障主题。
是否有一个最终列表可用于查看可以在大数据群集配置中设置的所有内容?
可以在部署时设置的所有自定义内容记录在为群集资源和服务配置部署设置中。 对于 Spark,请参阅在大数据群集中配置 Apache Spark 和 Apache Hadoop。
能否将 SQL Server Analysis Services 与 SQL Server 大数据群集一起部署?
否。 具体而言,Linux 上的 SQL Server 不支持 SQL Server Analysis Services (SSAS),因此,必须在 Windows 服务器上安装 SQL Server 实例才能运行 SSAS。
是否支持在 EKS 或 GKS 中部署大数据群集?
大数据群集可以在基于版本 1.13 及更高版本的任何 Kubernetes 堆栈上运行。 但是,我们尚未针对 EKS 或 GKS 上的大数据群集进行过特定验证。
大数据群集中运行什么版本的 HDFS 和 Spark?
运行的 Spark 版本为 2.4,运行的 HDFS 版本为 3.2.1。 有关大数据群集中包含的开源软件的完整详细信息,请参阅开源软件参考。
如何在 Spark 中安装库和包?
可以按照在 Spark 中安装包的示例笔记本中所述的步骤在提交作业时添加包。
是否需要使用 SQL Server 2019 来将 R 和 Python 用于 SQL Server 大数据群集?
从 SQL Server 2017 起即可使用机器学习 (ML) 服务(R 和 Python)。 ML 服务也可在 SQL Server 大数据群集中使用。 有关详细信息,请参阅什么是 Python 和 R 的 SQL Server 机器学习服务?。
授权
SQL Server 许可证如何用于 SQL Server 大数据群集?
有关详细信息,请参阅许可指南。单击此处下载 PDF。
有关摘要,请观看视频 SQL Server 许可:大数据群集 | 公开的数据。
安全性
大数据群集是否支持 Microsoft Entra ID([旧称 Azure Active Directory](/entra/fundamentals/new-name))?
目前没有。
我们能否使用集成的身份验证连接到大数据群集主实例?
能,可以使用集成的身份验证(与 Active Directory 集成)连接到各种大数据群集服务。 有关详细信息,请参阅在 Active Directory 模式下部署 SQL Server 大数据群集。 另请参阅大数据群集的安全性概念。
如何为大数据群集中的各种服务添加新用户?
在基本身份验证模式下(用户/密码),不支持为控制器或 Knox 网关/HDFS 终结点添加多个用户。 这些终结点唯一支持的用户是根用户。 对于 SQL Server,可以使用 Transact-SQL 添加用户,就像为任何其他 SQL Server 实例添加用户一样。 如果使用 AD 身份验证为终结点部署大数据群集,则支持多个用户。 请参阅此处以详细了解如何在部署时配置 AD 组。 有关详细信息,请参阅在 Active Directory 模式下部署 SQL Server 大数据群集。
对于大数据群集,为了拉取最新容器映像,我是否可以限制出站 IP 范围?
可以在 Azure IP 范围和服务标记 - 公有云中查看由各种服务使用的 IP 地址。 请注意,这些 IP 地址会定期轮换。
为了让控制器服务从 Microsoft Container Registry (MCR) 拉取容器映像,需要授予对 MicrosoftContainerRegistry 部分中指定的 IP 地址的访问权限。 另一种选择是设置专用 Azure 容器注册表,并将大数据群集配置为从该容器注册表进行拉取。 在这种情况下,需要公开 AzureContainerRegistry 部分中指定的 IP 地址。 有关如何执行此操作和脚本的相关说明,请参阅执行 SQL Server 大数据群集的脱机部署。
是否在气隙环境中部署大数据群集?
能,有关详细信息,请参阅执行 SQL Server 大数据群集的脱机部署。
默认情况下,“Azure 存储加密”功能是否也适用于基于 AKS 的大数据群集?
这取决于 Azure Kubernetes 服务 (AKS) 中的动态存储预配程序配置。 有关详细信息,请参阅 Azure Kubernetes 服务 (AKS) 中的存储和备份的最佳做法。
是否可以在大数据群集中轮换 SQL Server 和 HDFS 加密的密钥?
是的。 有关详细信息,请参阅大数据群集中的密钥版本。
是否可以轮换自动生成的 Active Directory 对象的密码?
是,可以使用 SQL Server 大数据群集 CU13 中引入的新功能轻松轮换自动生成的 Active Directory 对象的密码。 有关详细信息,请参阅 AD 密码轮换。
支持
Microsoft 是否支持部署在 SQL Server 大数据群集中的 Spark 和 HDFS?
是,Microsoft 支持大数据群集中随附的所有组件。
SparkML 和 SQL Server ML 服务的支持模型是什么?
SQL Server ML 服务支持策略与 SQL Server 的支持策略相同,只不过每一次重大发布都会随附新的运行时版本。 SparkML 库本身是开源软件 (OSS)。 我们将许多 OSS 组件打包到大数据群集中,Microsoft 对此是支持的。
Red Hat Enterprise Linux 8 (RHEL8) 平台是否支持 SQL Server 大数据群集?
目前没有。 有关已测试的配置,请参阅此处。
工具
Azure Data Studio 中可用的笔记本本质上是 Jupyter 笔记本吗?
是的,Azure Data Studio 中可用的笔记本的内核正是 Jupyter 内核。
azdata 工具是开源的吗?
否。目前 azdata
不是开源工具。
训练资源
哪些大数据群集训练选项可用?
下面是一些可以使用的资源:
研讨会:Kubernetes - 从裸机到 SQL Server 大数据群集
研讨会:SQL Server 大数据群集 - 体系结构
教程:准备用于 Azure Kubernetes 服务 (AKS) 的应用程序
(PDF) 案例研究:在 MS SQL Server 2019 大数据群集中的 Apache Spark 上运行的 SQL 工作负载