翻译: https://www.cloudera.com/documentation/enterprise/latest/topics/cdh_ig_hdfs_cluster_deploy.html#topic_11_2
版本: 5.14.2
重要:
有关为NameNode配置高可用性(HA)的说明,请参阅HDFS高可用性。有关使用HDFS访问控制列表(ACL)的说明,请参阅HDFS扩展ACL。
按照以下步骤在群集上部署HDFS。对所有群集执行此操作,无论您是部署MRv1还是YARN:
重要:
- 在不使用Cloudera Manager的系统上遵循这些命令行指示信息。
- 此信息特别适用于CDH 5.14.X。有关其他版本的信息,请参阅Cloudera文档。
继续阅读:
- 复制Hadoop配置和设置选项
- 定制配置文件
- 配置本地存储目录
- 配置DataNode以允许本地存储目录失败
- 格式化NameNode
- 配置远程NameNode存储目录
- 配置Secondary NameNode
- 启用垃圾箱
- 为DataNodes配置存储平衡
- 启用WebHDFS
- 配置LZO
- 启动HDFS
- 部署YARN或MRv1
注意: 运行服务
使用service命令来启动,停止和重新启动CDH组件,而不是直接在/etc/init.d中运行脚本。
复制Hadoop配置和设置选项
要自定义Hadoop配置:
- 将默认配置复制到您的自定义目录中:
$ sudo cp -r /etc/hadoop/conf.empty /etc/hadoop/conf.my_cluster
你可以任意调用这个配置; 在这个例子中,它被称为my_cluster。
重要:
在执行本节中的配置任务时,以及在继续部署MRv1或YARN时,编辑此自定义目录中的配置文件。不要在默认目录/etc/hadoop/conf.empty中创建自定义配置。
-
CDH使用 alternatives 设置以确定要使用哪个Hadoop配置。使用alternatives 指向您的自定义目录,如下所示。
在RHEL兼容系统上手动设置配置:
$ sudo alternatives --install /etc/hadoop/conf hadoop-conf /etc/hadoop/conf.my_cluster 50
$ sudo alternatives --set hadoop-conf /etc/hadoop/conf.my_cluster
要在Ubuntu和SLES系统上手动设置配置,请执行以下操作:
$ sudo update-alternatives --install /etc/hadoop/conf hadoop-conf /etc/hadoop/conf.my_cluster 50
$ sudo update-alternatives --set hadoop-conf /etc/hadoop/conf.my_cluster
这告诉CDH使用/etc/hadoop/conf.my_cluster中的配置。
您可以显示当前alternatives 设置如下。
要在RHEL兼容系统上显示当前设置:
要显示Ubuntu,Debian和SLES系统上的当前设置:
您应该看到以下输出:
sudo alternatives --display hadoop-conf
sudo update-alternatives --display hadoop-conf
hadoop-conf - status is auto.
link currently points to /etc/hadoop/conf.my_cluster
/etc/hadoop/conf.my_cluster - priority 50
/etc/hadoop/conf.empty - priority 10
Current `best' version is /etc/hadoop/conf.my_cluster.
由于 /etc/hadoop/conf.my_cluster 配置的最高优先级(50),因此CDH将使用该优先级。有关替代方法的更多信息,请参阅alternatives(8)。
定制配置文件
下表显示了必须为群集配置的最重要的属性。
注意:
有关其他重要配置属性和配置文件的信息,请参阅Apache Cluster Setup页面。
属性 | 配置文件 | 描述 |
---|---|---|
fs.defaultFS | core-site.xml | 注意:fs.default.name已弃用。以hdfs:// |
dfs.permissions.superusergroup | hdfs-site.xml | 指定包含将被HDFS视为超级用户的用户的UNIX组。您可以使用'hadoop',或根据您的网站的安全策略选择自己的组。 |
示例配置
核心-site.xml中:
fs.defaultFS
hdfs://namenode-host.company.com:8020
HDFS-site.xml中:
dfs.permissions.superusergroup
hadoop
配置本地存储目录
您需要指定,创建正确的权限并将其分配给希望HDFS守护程序存储数据的本地目录。您可以通过配置以下两个属性来指定目录, 在hdfs-site.xml 文件。
属性 | 配置文件位置 | 描述 |
---|---|---|
dfs.name.dir or dfs.namenode.name.dir | NameNode上 hdfs-site.xml | 此属性指定NameNode存储其元数据和编辑日志的目录的URI。Cloudera建议您至少指定两个目录。其中一个应位于NFS安装点上,除非您将使用HDFS HA配置。 |
dfs.data.dir or dfs.datanode.data.dir | 每个datanode上的hdfs-site.xml | 此属性指定DataNode存储块所在目录的URI。Cloudera建议您在JBOD配置中的DataNode上配置磁盘,挂载在 /data/1/ 到 /data/N, 并配置dfs.data.dir 或 dif.datanode.data.dir 的值从 file:///data/1/dfs/dn 到 file:///data/N/dfs/dn/ 。 |
注意:
dfs.data.dir and dfs.name.dir 已弃用; 你应该使用 dfs.datanode.data.dir and dfs.namenode.name.dirauto ,但他们仍其作用 。
示例配置:
NameNode上的hdfs-site.xml:
dfs.namenode.name.dir
file:///data/1/dfs/nn,file:///nfsmount/dfs/nn
每个DataNode上的hdfs-site.xml:
dfs.datanode.data.dir
file:///data/1/dfs/dn,file:///data/2/dfs/dn,file:///data/3/dfs/dn,file:///data/4/dfs/dn
在如上所示指定这些目录之后,您必须创建目录并为集群中每个节点上的目录分配正确的文件权限。
在以下说明中,本地路径示例用于表示Hadoop参数。更改路径示例以匹配您的配置。
本地目录:
- dfs.name.dir or dfs.namenode.name.dir参数由 /data/1/dfs/nn and /nfsmount/dfs/nn 路径示例。
- dfs.data.dir or dfs.datanode.data.dir 参数由 /data/1/dfs/dn, /data/2/dfs/dn, /data/3/dfs/dn, and /data/4/dfs/dn 例。
配置HDFS使用的本地存储目录:
- 在NameNode主机上:创建 dfs.name.dir or dfs.namenode.name.dir 本地目录:
$ sudo mkdir -p /data/1/dfs/nn /nfsmount/dfs/nn
重要:
如果您正在使用高可用性(HA),则不应将这些目录配置为NFS挂载; 在本地存储上配置它们。
- 在所有DataNode主机上:创建 dfs.data.dir or dfs.datanode.data.dir 本地目录:
$ sudo mkdir -p /data/1/dfs/dn /data/2/dfs/dn /data/3/dfs/dn /data/4/dfs/dn
- 配置目录的所有者hdfs 用户:
sudo chown -R hdfs:hdfs /data/1/dfs/nn /nfsmount/dfs/nn /data/1/dfs/dn /data/2/dfs/dn /data/3/dfs/dn /data/4/dfs/dn
注意:
有关安装CDH时创建的用户列表,请参阅Hadoop用户(用户:组)和Kerberos主体。
目录 | 所有者 | 权限(Footnote1) |
---|---|---|
dfs.name.dir or dfs.namenode.name.dir ,dfs.data.dir or dfs.datanode.data.dir | hdfs:hdfs | drwx ------ |
以下是本地目录的正确所有者和权限摘要:
目录 | 所有者 | 权限(Footnote1) |
---|---|---|
dfs.name.dir or dfs.namenode.name.dir ,dfs.data.dir or dfs.datanode.data.dir | hdfs:hdfs | drwx ------ |
脚注: 1 Hadoop守护进程自动为您设置正确的权限 注意: 如果你指定了不存在的目录 dfs.data.dir or dfs.datanode.data.dir,CDH 5将关闭。(在以前的版本中,CDH默默地忽略不存在的目录。) 默认情况下,一个单一dfs.data.dir or dfs.datanode.data.dir 的失败会导致HDFS DataNode进程关闭,将导致NameNode为DataNode上存在的每个块调度额外的副本。这导致驻留在没有失败的磁盘上的块的不必要的复制。 为了防止这种情况发生,您可以配置DataNode来容忍失败; 使用 hdfs-site.xml配置文件中的 dfs.datanode.failed.volumes.tolerated 参数。例如,如果此参数的值为3,则DataNode只会在四个或更多数据目录失败后关闭。此值在DataNode启动时读取; 在这个例子中,只要不超过三个目录失败,DataNode就会重新启动。 注意: 这很重要, dfs.datanode.failed.volumes.tolerated不能配置为容忍太多的目录失败,因为如果DataNode的功能数据目录很少,DataNode的性能会很差。 首次启动NameNode之前,您需要格式化文件系统。 重要: 注意: 如果启用了Kerberos,请不要使用sudo -u 你会得到一个确认提示; 例如: 注意:以大写字母回应 ; 如果使用小写字母,则该过程将中止。 您应该将NameNode配置为写入多个存储目录,包括一个远程NFS挂载。要在NFS服务器不可用时避免NameNode进程挂起,请将NFS挂载配置为soft mount(以便I / O请求超时失败而不是挂起),并设置其他选项,如下所示: 这些选项配置TCP上的soft mount ; 交易将在1分钟间隔(timeo=10)重试十次(retrans=10),之后才被视为失败。 例: 其中 注意: Cloudera建议使用类似的共享HA安装设置,如下例所示。 HA示例: 请注意,在HA 中 timeo 应该设置为50(5秒),而不是10(1秒),并且 retrans 应该设置为12,总的超时时间为60秒。 有关更多信息,请参见手册页 mount and nfs。 您可以启用 dfs.namenode.name.dir.restore 选项,以便NameNode在下一个检查点恢复先前失败的数据。这对于恢复由于网络中断或间歇性NFS故障而失败的远程存储目录装载非常有用。 重要: Secondary NameNode不提供故障转移或高可用性(HA)。如果您打算为NameNode配置HA,请跳过此部分:请勿安装或配置Secondary NameNode(备用NameNode执行检查点设置)。完成HA软件配置后,请按照部署HDFS高可用性下的安装说明进行操作。 在非HA部署中,配置一个Secondary NameNode,它将定期将EditLog与FSImage合并,创建一个新的FSImage,其中包含EditLog中的更改。这减少了NameNode上EditLog所占用的磁盘空间量,并且还减少了主NameNode的重启时间。 标准Hadoop集群(不是Hadoop联盟或HA配置)只能有一个主名称节点和一个辅助名称节点。在生产系统上,Secondary NameNode应该在与主NameNode不同的机器上运行,以提高可伸缩性(因为Secondary NameNode不会与NameNode竞争内存和其他资源来创建系统快照)和持久性(因为副本元数据位于独立的机器上,如果NameNode硬件发生故障,则可用)。 要在NameNode的另一台机器上配置Secondary NameNode,请按以下步骤操作。 注意: 有关更多信息,请参阅多主机SecondaryNameNode配置。 Secondary NameNode 参数 不翻 Secondary NameNode的行为由hdfs-site.xml中的以下参数控制。 有关详细信息,请参阅https://archive.cloudera.com/cdh5/cdh/5/hadoop/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml。 Hadoop垃圾功能有助于防止意外删除文件和目录。如果垃圾箱已启用,并且使用Hadoop shell 删除文件或目录,则该文件将被移至Trash 目录,而不是被删除。删除的文件最初移动到Trash的子目录 Current ,并保留其原始路径。如果垃圾检查点已启用,则Current 目录将使用时间戳定期重命名。在用户可配置的时间延迟后被永久删除。只需将垃圾箱中的文件和目录移动到垃圾箱外的某个位置即可恢复。 重要: 垃圾箱功能默认为禁用。Cloudera建议您在所有生产群集上启用它。 垃圾功能默认只适用于使用Hadoop shell 删除的文件和目录。使用其他接口(例如WebHDFS或Java API)以编程方式删除的文件或目录不会移动到垃圾箱,即使已启用垃圾箱,除非程序已实施对垃圾箱功能的调用。(例如,Hue自CDH 4.4开始实施垃圾。) 用户可以在使用shell删除文件时使用选项-skipTrash 绕过垃圾箱。当需要删除对用户配额来说太大的文件时,这会很有用。 在配置文件 core-site.xml中可配置的相关属性如下: 例如,启用垃圾桶,使用Hadoop shell删除的文件在24小时内不被删除,在core-site.xml文件中设置 fs.trash.interval值为1440 。 您可以为HDFS配置写入平衡,以平衡DataNode磁盘卷中可用存储的方式来分配每个DataNode的写入。 默认情况下,DataNode基于round-robin方式写入block副本。您可以配置一个卷选择策略,该策略会导致DataNode在决定放置新副本的位置时考虑每个卷上有多少可用空间。 你可以配置 要配置存储平衡,请在hdfs-site.xml中设置以下属性。 注意: 若要改为配置HttpFs,请参阅HttpFS安装。 如果你想使用WebHDFS,你必须先启用它。 启用WebHDFS: 在hdfs-site.xml下面设置属性: 在WebHDFS中启用数字用户名: 默认情况下,WebHDFS支持以下用户名模式: 您可以通过设置dfs.webhdfs.user.provider.user.pattern来覆盖默认的用户名模式 。例如,要允许数字用户名,该属性可以设置如下: 重要提示:用户名模式应符合所用操作系统的要求。因此,Cloudera建议您使用默认模式并避免修改dfs.webhdfs.user.provider.user.pattern 尽可能。 注意: 如果您安装了LZO,请按照以下方式进行配置。 配置LZO: 在core-site.xml下面设置属性。注意: 如果复制并粘贴value 字符串,请确保删除由于页面宽度约束而在下面包含的换行符和回车符。 有关LZO的更多信息,请参阅使用LZO压缩。 现在要部署HDFS,请按以下步骤操作。 要将您的配置部署到整个群集: 手动设置 alternatives 在每个节点上指向该目录,如下所示。 在RHEL兼容系统上手动设置配置: 要在Ubuntu和SLES系统上手动设置配置,请执行以下操作: 有关替代方法的更多信息,请参阅alternatives(8)。 在集群中的每个节点上启动HDFS,如下所示: 注意: 这将启动节点上安装的所有CDH服务。这通常是你想要的,但如果你愿意,你可以单独开始服务。 重要: 如果你不创建正确地/tmp ,稍后您可能会遇到CDH组件的问题。具体来说,如果你不创建/tmp,另一个进程可能会自动创建限制性权限,这会阻止其他应用程序使用它。 在HDFS启动并运行后创建/tmp 目录,并将其权限设置为1777(drwxrwxrwt), 如下: 要部署MRv1或YARN,并启动HDFS服务(如果尚未完成),请参阅$ sudo chmod 700 /data/1/dfs/nn /nfsmount/dfs/nn
or
$ sudo chmod go-rx /data/1/dfs/nn /nfsmount/dfs/nn
配置DataNode以允许本地存储目录失败
格式化NameNode
$ sudo -u hdfs hdfs namenode -format
Re-format filesystem in /data/namedir ? (Y or N)
配置远程NameNode存储目录
tcp,soft,intr,timeo=10,retrans=10
mount -t nfs -o tcp,soft,intr,timeo=10,retrans=10,
mount -t nfs -o tcp,soft,intr,timeo=50,retrans=12,
配置远程目录恢复
配置Secondary NameNode
在单独的机器上配置Secondary NameNode
有关Secondary NameNode的更多信息
dfs.namenode.checkpoint.check.period
dfs.namenode.checkpoint.txns
dfs.namenode.checkpoint.dir
dfs.namenode.checkpoint.edits.dir
dfs.namenode.num.checkpoints.retained启用垃圾箱
CDH参数
值
描述
fs.trash.interval
minutes or 0
文件删除后检查点检查的时间间隔。该选项可以在服务器和客户端上配置。* 如果在服务器配置上启用垃圾箱,则将使用服务器上配置的值,并忽略客户端配置。* 如果垃圾箱在服务器配置中被禁用,则检查客户端配置。* 如果此属性的值为零(默认值),则垃圾箱功能将被禁用。
fs.trash.checkpoint.interval
minutes or 0
垃圾检查点间隔的分钟数。每次检查点在NameNode上运行时,它都会创建一个“Current”目录,并删除比fs.trash.interval 分钟大的目录。该值应该小于或等于fs.trash.interval 。该选项在服务器上配置。如果配置为零(默认值),则该值设置为fs.trash.interval的值。
注意:
文件保留在垃圾箱中的时间段是在文件移动到垃圾箱时开始的,而不是文件的上次修改时间。为DataNodes配置存储平衡
注意:请记住,如果在启用存储平衡时,如果给定DataNode的存储卷之间的使用率显着不平衡,则该数据节点上的吞吐量最初将受到影响,因为写入不成比例地指向未充分利用的卷。
属性
值
描述
dfs.datanode. fsdataset. volume.choosing. policy
org.apache.hadoop. hdfs.server.datanode. fsdataset. AvailableSpaceVolumeChoosingPolicy
启用DataNode卷之间的存储平衡。
dfs.datanode. available-space- volume-choosing- policy.balanced-space-threshold
10737418240(默认)
磁盘空间被视为不平衡时,磁盘空间的容量相差数量。默认值为10737418240(10 GB)。如果每个卷上的可用空间都在这个范围内,则这些卷将被视为平衡,并且块分配将在round-robin基础上完成。
dfs.datanode. available-space- volume-choosing- policy.balanced- space-preference- fraction
0.75(默认)
新块分配发送给某卷比其他券能获得更多的可用空间。允许范围为0.0-1.0,但将其设置在0.5 - 1.0(即50-100%)的范围内,因为应该没有理由偏好具有较少可用磁盘空间的卷接收更多块分配。
启用WebHDFS
^[A-Za-z_][A-Za-z0-9._-]*[$]?$
配置LZO
启动HDFS
部署配置
$ scp -r /etc/hadoop/conf.my_cluster myuser@myCDHnode-
$ sudo alternatives --verbose --install /etc/hadoop/conf hadoop-conf /etc/hadoop/conf.my_cluster 50
$ sudo alternatives --set hadoop-conf /etc/hadoop/conf.my_cluster
$ sudo update-alternatives --install /etc/hadoop/conf hadoop-conf /etc/hadoop/conf.my_cluster 50
$ sudo update-alternatives --set hadoop-conf /etc/hadoop/conf.my_cluster
启动HDFS
for x in `cd /etc/init.d ; ls hadoop-hdfs-*` ; do sudo service $x start ; done
创建/ tmp目录
$ sudo -u hdfs hadoop fs -mkdir /tmp
$ sudo -u hdfs hadoop fs -chmod -R 1777 /tmp
部署YARN或MRv1