默认 DC/OS Apache HDFS 安装为试行服务提供合理的默认设置,但可能不足以支持生产使用。根据部署的上下文,您可能需要不同的配置。
使用自定义配置安装
以下是如何自定义安装 Apache HDFS 实例的一些例子。
在每个例子中,您将使用自定义配置创建一个新的 Apache HDFS 实例,如下所示:
$ dcos package install hdfs --options=sample-hdfs.json
建议: 将自定义配置存储在源控件中。
安装多个实例
默认情况下,Apache HDFS 服务安装名称为 hdfs
的服务。您可以使用如下自定义服务配置来指定不同的名称:
{
"service": {
"name": "hdfs-other"
}
}
当上述 JSON 配置通过 --options
自变量被传递到 package install hdfs
命令时,新服务将使用 JSON 配置中指定的名称:
$ dcos package install hdfs --options=hdfs-other.json
可以通过自定义每个实例的名称将多个 Apache HDFS 实例安装到 DC/OS 群集中。例如,您可能有一个名为 hdfs-staging
和另一个名为 hdfs-prod
的 Apache HDFS 实例,每个都具有各自的自定义配置。
为实例指定自定义名称后,可以使用 dcos hdfs
CLI 命令或直接通过 HTTP 接触实例,如下所述 以下。
安装到文件夹中
在 DC/OS 1.10 及更高版本中,可以通过指定斜线分隔的服务名称将服务安装到文件夹中。例如:
{
"service": {
"name": "/foldered/path/to/hdfs"
}
}
以上示例将在路径 foldered
=> path
=> to
=> hdfs
中安装服务。然后可以使用 dcos hdfs
CLI 命令或直接通过 HTTP 接触服务,如下所述 以下。
寻址已命名实例
使用自定义名称或在文件夹下安装服务之后,可以使用 --name
自变量从所有 dcos hdfs
CLI 命令访问该服务。默认情况下,--name
值默认为包名称,或 hdfs
。
例如,如果您有一个名为 hdfs-dev
的实例,以下命令将针对它调用 pod list
命令:
$ dcos hdfs --name=hdfs-dev pod list
相同的查询将通过 HTTP 执行,如下所示:
$ curl -H "Authorization:token=$auth_token" <dcos_url>/service/hdfs-dev/v1/pod
同样,如果您在文件夹中有一个类似 /foldered/path/to/hdfs
的实例,以下命令将针对它调用 pod list
命令:
$ dcos hdfs --name=/foldered/path/to/hdfs pod list
类似地,可以直接通过 HTTP 查询,如下所示:
$ curl -H "Authorization:token=$auth_token" <dcos_url>/service/foldered/path/to/hdfs-dev/v1/pod
您可以添加 -v
(详细)自变量到任何 dcos hdfs
命令以查看正在进行的潜在 HTTP 查询。这是查看 CLI 在何处获取信息的有用工具。在实践中,dcos hdfs
命令是由 DC/OS Apache HDFS 服务本身提供的 HTTP 接口的瘦包装器。
与 DC/OS 访问控制集成
在 Enterprise DC/OS 中,可以使用 DC/OS 访问控制来限制对服务的访问。要让非超级用户完全访问服务,向其授予以下权限列表:
dcos:adminrouter:service:marathon full
dcos:service:marathon:marathon:<service-name> full
dcos:adminrouter:ops:mesos full
dcos:adminrouter:ops:slave full
其中 <service-name>
是您的完整服务名称,包括文件夹(如果安装在文件夹中)。
创建自定义配置文件
创建将用于安装 Apache HDFS 的自定义配置文件,并另存为 config.json
。指定服务帐户 (<service_account_id>
) and a secret path (hdfs/<secret-name>
) .
{
"service": {
"service_account": "<service_account_id>",
"service_account_secret": "hdfs/<secret-name>"
}
}
服务设置
布局约束
布局约束允许您自定义 DC/OS 群集中部署服务的位置。布局约束使用 Marathon 运营商 语法。例如,[["hostname", "UNIQUE"]]
确保每个代理最多部署一个 Pod。
通用任务是指定要对其进行部署的白名单系统列表。为此,请使用以下语法用于布局约束:
[["hostname", "LIKE", "10.0.0.159|10.0.1.202|10.0.3.3"]]
更新布局约束
群集更改,因此布局约束也随之变化。但是,已经运行的服务 Pod 将不会受到布局约束变化的影响。这是因为更改布局约束可能会使得当前运行的 pod 的当前布局失效,而且 Pod 不会自动被重新布置,因为这样做是破坏性的操作。我们建议使用以下程序更新 Pod 的布局约束:
- 更新服务中的布局约束定义。
- 对每个受影响的 Pod,一次执行一个
pod replace
。这将(破坏性地)移动 Pod 使其符合新的布局约束。
区
需要: DC/OS 1.11 Enterprise 或更高版本。
通过引用 @zone
键,布局约束可以应用于 DC/OS 区。例如,可以通过包括此约束在最少三个不同区中扩散 Pod:
[["@zone", "GROUP_BY", "3"]]
虚拟网络
DC/OS Apache HDFS 支持在 DC/OS 的 虚拟网络 上进行部署(包括 dcos
覆盖网络),允许每个容器(任务)拥有自己的 IP 地址,而不使用代理机器上的端口资源。这可以通过在安装过程中传递以下配置来指定:
{
"service": {
"virtual_network_enabled": true
}
}
区域
服务参数 region
可用于在一个替换区域中部署服务。默认情况下,服务部署在“本地”区域,这是运行 DC/OS 管理节点的区域。要在特定原因下安装服务,在其选项中包含:
{
"service": {
"region": "<region>"
}
}
节点配置
节点配置对象对应于 HDFS 集群中节点的配置。必须在安装过程中指定节点配置,其可以在配置更新过程中进行修改。所有属性(除了 disk
和 disk_type
)都可在配置更新过程中修改。
内存配置备注
作为每个节点类型配置的一部分,可以指定分配给节点的内存量 (MB)。此值必须大于给定节点类型的指定最大堆大小。确保为 JVM 和其他开销所使用的额外内存分配足够的空间。一个良好的经验法则是分配堆大小两倍的内存(使用 hdfs.hadoop_heapsize
或 <node type>.hadoop_<node type>node_opts
进行设置)。
磁盘类型备注
如已备注的,在初始安装之后,磁盘大小和类型规范无法修改。此外,还可以使用以下磁盘卷类型:
ROOT
:数据存储在代理工作目录的同一卷上,节点任务使用配置的磁盘空间量。MOUNT
:数据将存储在连接到代理的专用、操作员格式化的卷上。专用的挂载卷具有性能优势,这些挂载卷上的磁盘错误将正确地报告给 HDFS。
HDFS 文件系统配置
HDFS 文件系统网络配置、权限和压缩通过 hdfs
JSON 对象配置。在安装时设置这些属性后,它们将无法被重新配置。
操作系统配置
为使 HDFS 正常运行,您必须对托管部署的操作系统执行几个重要的配置修改。HDFS 需要生产存储服务器典型的 OS 级配置设置。
文件 | 设置 | 值 | 原因 |
---|---|---|---|
/etc/sysctl.conf | vm.swappness | 0 | 如果 OS 置换出 HDFS 进程,它们可能无法响应 RPC 请求,导致集群将进程标记为关闭。这对于名称节点和日志节点尤为棘手。 |
/etc/security/limits.conf | nofile | 无限制 | 如果此值太低,在 HDFS 集群上操作的作业可能因为过多开放的文件句柄而出故障。 |
/etc/security/limits.conf<>/etc/security/limits.d/90-nproc.conf | nproc | 32768 | HDFS 节点会产生大量线程,增加内核 nproc 计数。如果 nproc 未能正确设置,该节点将被终止。 |