暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

配置HADOOP

闵栋 2023-02-27
844


是新朋友吗?记得点击下面名片,关注我哦



听段舒缓的音乐,咱们一起开启阅读之旅。



1、配置文件说明

配置文件放在 $HADOOP_HOME/etc/hadoop 目录中



#配置文件注释

文件名称格式描述
hadoop-env.shbash脚本脚本中要用到的环境变量,以运行hadoop
mapred-env.shbash脚本脚步中要用到的环境变量,以运行MapReduce(覆盖hadoop-env.sh中设置的变量)
yarn-env.shbash脚本脚步中要用到的环境变量,以运行YARN(覆盖hadoop-env.sh中设置的变量)
core-site.xmlhadoop配置xml文件Hadoop Core 的配置项,例如HDFS、MapReduce 和YARN 常用的IO设置等
hdfs-site.xmlhadoop配置xml文件HDFS 守护进程 的配置项,包括namenode 、secondarynamenode、datanode等
mapred-site.xmlhadoop配置xml文件MapReduce守护进程 的配置项,包括namenode 、secondarynamenode、datanode等
yarn-site.xmlhadoop配置xml文件YARN守护进程 的配置项,包括资源管理器、web应用代理服务器和节点服务器。resourcemanager、nodemanager
slaves纯文本低版本hadoop datanode配置文件。运行datanode和节点管理器的机器列表(每行一个)
workers纯文本高版本hadoop datanode配置文件。运行datanode和节点管理器的机器列表(每行一个)
hadoop-metrices2.propertiesjava属性控制如何在hadoop上发布度量的属性
log4j.propertiesjava属性系统日志文件、namenode审计日志、任务jvm进程的任务日志的属性
hadoop-policy.xmlhadoop配置xml文件安全模式下运行hadoop时的访问控制列表的控制项


hadoop并没有将所有的配置信息都放在一个单独的全局位置中。

集群的每个节点都各自保存一系列的配置文件,并由管理员完成这些配置文件的同步工作,由并行shell工具帮助完成同步工作。

尽管用户可以通过使用控制脚本来管理hadoop,仍然推荐使用控制管理工具来管理集群,例如 Cloudera Manager 和 Apache Ambari





2、环境配置

设置 hadoop-env.sh 文件中的变量

MapReduce 和YARN (HDFS除外)都有类似的配置文件

mapred-env.sh 、yarn-env.sh ;文件中的变量和组件有关,并且可以设置。

注意:

hadoop-env.sh文件里面设置的值会被mapred-env.sh 、yarn-env.sh文件覆盖

备注:配置文件路径--/opt/module/hadoop-3.3.3/etc/hadoop/


2.1、java

需要设置hadoop系统的java安装的位置

方法一是在hadoop-env.sh文件中设置 JAVA_HOME 项

方法二是在shell中设置 JAVA_HOME 环境变量

相比之下,方法一更好,因为只需要操作一次就能够保证整个集群使用同一版本的java


2.2、内存堆大小

在默认情况下,hadoop为各个守护进程分配1000MB(1G)内存,该内存值由hadoop-env.sh 文件中的 HADOOP_HEAPSIZE参数控制。

也可以通过设置环境变量为单个守护进程修改堆大小,比如,在yarn-env.sh文件中设置YARN_RESOURCEMANAGER_HEAPSIZE 即可覆盖资源管理器的堆大小


#扩展信息

    namenode会在内存中维护所有文件的每个数据块的引用,
    因此namenode很可能会吃光分配给它的所有内存




    1000MB内存(默认配置)通常足够管理数百万个文件,但是根据经验来看,
    保守估计需要为每1百万个数据块分配1000MB内存空间


    以一个含200节点的集群为例,假设每个节点都有24TB磁盘空间,数据块大小
    是128MB,副本数是3的话,则约有1250万个数据块(甚至更多):
    200*24000000 MB/(128 MB *3)
    因此在本例中,namenode 的内存空间最好一开始设为12000MB




    也可以只增加namenode的内存分配量而不改变其他hadoop收回进程的内存分配
    即设置hadoop-env.sh 文件中的HADOOP_NAMENODE_OPTS属性包含一个
    JVM选项以设定内存大小。


    由于辅助namenode 的内存需求和主 namenode 差不多,所以一旦
    更改namenode 的内存分配的话,还需堆辅助namenode 做相同更改
    (使用HADOOP_SECONDARYNAMENODE_OPTS 变量)




    2.3、系统日志文件

    默认情况下,hadoop 生成的系统日志文件存放在$HADOOP_HOME/logs 目录之中,也可以通过hadoop-env.sh 文件中的HADOOP_LOG_DIR 来进行修改。

    建议修改默认设置,使之独立于hadoop 的安装目录。

    通常可以将日志文件存放在 var/log/hadoop 目录中

    实现方法很简单,就是在hadoop-env.sh 中加入一行 :

    export HADOOP_LOG_DIR=/var/log/hadoop


    #扩展信息

    运行在各台服务器上的各个hadoop守护进程会产生两类日志文件

    1、日志文件

    以.log作为后缀名,是通过log4j记录的 。

    标准的hadoop log4j配置采用日常滚动文件追加方式来循环管理日志文件。系统不自动删除过期日志,而是留待用户定期删除或存档,以节约本地磁盘空间

    2、日志文件后缀名为.out ,记录标准输出和标准错误日志。

    haoop使用log4j记录日志,所以该文件通常只包含少量记录,甚至为空。

    重启守护进程时候,系统会创建一个新文件来记录此类日志。

    系统仅保留最新的5个日志文件,旧的日志文件会附近一个介于1和5之间的数字后缀,5表示最旧的文件

    日志文件的名称保护运行守护进程的用户名称、守护进程名称和本地主机名等信息

    例如:hadoop-root-datanode-hadoop101.log

    日志文件名称中的“用户名称”部分实际对应 hadoop-env.sh 文件中的 HADOOP_IDENT_STRING 项,如果想采用其他名称,修改该值



    2.4、SSH 设置

    借助ssh协议,用户在主节点上使用控制脚本就能在工作节点上运行一系列指令。

    减小链接超时设置 --使用connectTimeout 选项,可以避免控制脚本长时间等待宕机节点的响应。也不可设置的过低,否则会导致繁忙节点被跳过。

    StrictHostKeyChecking 设置为no 会自动将心主机键加到已知主机文件之中。

    该项默认值是ask ,即提示用户确认是否已验证了键指纹“key fingerprint” ,不适合大型集群环境

    在hadoop-env.sh 文件中定义 HADOOP_SSH_OPTS 环境变量还能向 SSH传递更多选项。

    参考ssh 和ssh_config 使用手册,了解更多SSH 设置 。








    3、hadoop守护进程的关键属性

    hadoop关键属性在core-site.xml 、hdfs-site.xml 、 yarn-site.xml 等文件中

    对于一个正在运行的守护进程,要想知道其实际配置,可以访问该进程web服务器上的/conf 页面

    例如:

    http://resource-manager-host:8088/conf

    表示资源管理器当前的运行配置

    mapreduce守护进程就是作业历史服务器,对于它而言,默认属性值就够用了


    3.1、HDFS 关键属性

    属性fs.defaultFS描述HDFS 文件系统的url ,其主机是namenode的主机名称或ip地址,端口是namenode 监听RPC 的端口,如果没有,那么默认端口是8020

    属性 fs.defaultFS 也指定了默认文件系统,可以解析相对路径。

    用相对路径指向默认文件系统,用绝对路径指向其他文件系统

    属性项 dfs.namenode.name.dir 指定一系列目录来供namenode 存储永久性的文件系统元数据(编辑日志和文件系统映像)

    通常情况下,通过配置上面属性可以将namenode 元数据谢到一两个本地磁盘和一个远程磁盘之中。

    这样的话,即使本地磁盘发生故障,甚至整个namenode发生故障,都可以恢复元数据文件并且重构新的namenode

    辅助namenode只是定期保存namenode的检查点,不维护namenode 的最新备份

    dfs.namenode.name.dir 描述一系列目录,其目的是支持namenode进行冗余备份 。



        <property>
      <name>dfs.namenode.name.dir</name>
      <value>file:///dfs/nn</value>
      </property>


      属性dfs.datanode.name.dir 可以设定datanode 存储数据块的目录列表。

      dfs.datanode.name.dir也描述一系列目录,但是其目的是使datanode 循环地在各个目录中写数据

      为了提高性能,最好分别为各个本地磁盘指定一个存储目录 。

      这样一来,数据块跨磁盘分布,针对不同数据块的读操作可以并发执行,从而提升读取性能 。

      为了充分发挥性能,需要使用noatime 选项挂载磁盘。该选项意味着执行读操作时,所读文件的最近访问时间信息并不刷新,从而显著提升性能

      属性 dfs.namenode.checkpoint.dir 指定一系列目录来保存检查点。

      与namenode 类似,检查点影像文件分别存储在各个目录之中,以支持冗余备份 。


      #hdfs关键属性列表

      属性名称类型默认值说明
      fs.defaultFSurlfile:///默认文件系统。url定义主机名称和namenode 的RPC 服务器工作的端口号,默认值是8020.本属性保存在core-site.xml 中
      dfs.namenode.name.dir以逗号分割的目录名称file://${hadoop.tmp.dir} dfs/namenamenode存储永久性的远数据的目录列表。namenode 在列表上的各个目录中均存放相同的元数据文件
      dfs.datanode.data.dir以逗号分割的目录名称file://${hadoop.tmp.dir} dfs/datadatanode存放数据块的目录列表。各个数据块分别存放于某一个目录中
      dfs.namenode.checkpoint.dir以逗号分割的目录名称file://${hadoop.tmp.dir} dfs/namesecondary辅助namenode 存放检查9点的目录列表。在所列每个目录中均存放一份检查点文件的副本。


      #扩展信息

      在默认情况下,HDFS 的存储目录放在hadoop 的临时目录下。(通过hadoop.tmp.dir 属性配置,默认值是/tmp/hadoop-${user.name} )

      因此正确设置这些属性的重要性在于,即使清除了系统的临时目录,数据也不会丢失


      3.2、YARN 关键属性

      为了运行yarn,需要指定一台机器作为资源管理器。最简单的做法是将属性 yarn.resourcemanager.hostname 设置为用于运行资源管理器的机器的主机名或ip地址,表示默认主机。

      yarn.resourcemanager.address 的格式为 主机-端口 对

      在mapreduce 客户端配置中,需要通过rpc 链接到资源管理器时,会用到这个属性

      在执行mapreduce 作业的过程中所产生的中间数据和工作文件被写到临时本地文件之中。

      由于这些数据包括map任务的输出数据,数据量可能非常大,因此必须保证YARN 容器本地临时存储空间(由yarn.nodemanager.local-dirs 属性设置)的容量足够大 。

      yarn.nodemanager.local-dirs 属性使用一个逗号分割的目录名称列表,最好将这些目录分散到所有本地磁盘,以提升磁盘io操作的效率


      #备注

      通常情况下,yarn本地存储会使用与datanode 数据块存储相同的磁盘和分区(但是不同的目录)--datanode数据块存储目录由 dfs.datanode.data.dir 属性项指定

      yarn-site.xml 文件中的 yarn.nodemanager.aux-services 属性设置为 mapreduce_shuffle 来显式启用mapreduce的 shuffle 句柄


      #yarn关键属性列表

      属性名称类型默认值说明
      yarn.resourcemanager.hostname主机名0.0.0.0运行资源服务器主机名。以下缩写为${y.rm.hostname}
      yarn.resourcemanager.address主机名和端口号${y.rm.hostname}:8032运行资源管理器的rpc服务器的主机名和端口号
      yarn.nodemanager.local-dirs逗号分隔的目录名称${hadoop.tmp.dir} nm-local-dir目录列表,节点管理器允许容器将中间数据存于其中。当应用结束时,数据被清除。
      yarn.nodemanager.aux-services逗号分割的服务名称
      节点管理器运行的附加服务列表。每项服务由属性 yarn.nodemanager.auxservices.servicename.class 所定义的类实现。默认情况下,不指定附加服务。
      yarn.nodemanager.resource.memorymbint8192节点管理器运行的容器可以分配到的物理内存容量(单位是MB)
      yarn.nodemanager.vmem-pmem-ratiofloat2.1容器所占的虚拟内存和物理内存之比。该值指示了虚拟内存的使用可以超过所分配内存的量。
      yarn.nodemanager.resource.cpuvcoresint8节点管理器运行的容易可以分配到的cpu核数


      3.3、YARN和MapReduce中的内存设置

      与 MapReduce 1 不同,yarn没有tasktracker ,它依赖于shuffle句柄将map任务的输出送给reduce任务。shuffle 句柄是长期运行于节点服务器的附加服务。

      yarn是一个通用目的的服务。

      与MapReduce 1 不同的机遇slot 的模型相比,yarn以更精细化的方式来管理内存。

      yarn不会立刻指定一个节点上可以允许的map和reduce slot的最大数目,相反,它允许应用程序为一个任务请求任意规模的内存(在限制范围内)

      在yarn模型中,节点管理器从一个内存池中分配内存,因此在一个特定节点上运行的任务数量取决于这些任务对内存的总需求量,而不简单取决于固定的slot数量。


      计算为一个运行容器的节点管理器分配多少内存要取决于机器上的物理内存。

      每个hadoop 守护进程使用1000MB 内存,因此需要2000MB内存来运行1个datanode和1个节点管理器 。为机器上运行的其他进场留出足够的内存后,通过将配置属性 yarn.nodemanager.resource.memory-mb 设置为总分配量(单位是MB),剩余的内存就可以指定给节点管理器的容器使用了。默认是8192MB ,对于大多数配置来说太低了。


      #为单个作业设置内存选项

      由两种控制方法:一个是控制yarn 分配的容器大小,另一个是控制容器中运行的java 进程堆大小

      mapreduce 的内存控制都由客户端在作业配置中设置。yarn设置是集群层面的设置,客户端不能修改。


      #容器大小设置

      容器大小由属性

      mapreduce.map.memory.mb 和 mapreduce.reduce.memory.mb 决定,默认值都是1024 MB 。

      application master 会使用这些设置以从集群中请求资源

      节点管理器会使用这些设置来运行、监控任务容器

      java进程的堆大小由 mapred.child.java.opts 设置 ,默认是 200MB ;也可以单独为map和reduce任务设置java选项


      #扩展信息

      mapreduce作业内存属性 (由客户端设置)

      属性名称类型默认值说明
      mapreduce.map.memory.mbint1024map容器所用的内存容量
      mapreduce.reduce.memory.mbint1024reduce容器所用的内存容量
      mapred.child.java.optsstring-Xmx200mJVM选项,用于启动运行map和reduce 任务的容器进程。除了用于设置内存,该属性还包括jvm属性设置,以支持调试
      mapreduce.map.java.optsstring-Xmx200mjvm选项,针对运行map任务的子进程
      mapreduce.reduce.java.optsstring-Xmx200mjvm选项,针对运行reduce任务的子进程


      例如,假设 mapred.child.java.opts 被设为 -Xmx800m ,mapreduce.map.memory.mb被设为1024MB ,当map任务启动时,节点管理器会为该任务分配1个1024MB的容器(在该任务运行期间,节点管理器的内存池也会相应降低1024MB),并启动配置为最大堆为800MB的任务JVM。任务节点上的内存应该尽可能设置的大些。

      注意jvm进厂的内存开销将比该堆的规模要大,开销依赖于所使用的本地库、永久生成空间等因素。需要注意的是,jvm进程(包括它创建的任务进程,如streaming)所使用的物理内存必须不超出分配给它的内存大小(1024M)。如果一个容器使用的内存超过所分配的量,就会被节点服务器终止,并标记为失败。

      yarn调度器会指定一个最小和最大的内存分配量。默认情况下,最小内存分配量是1024MB(由 yarn.scheduler.minimum-allocation-mb设置),默认情况下最大内存分配量是8192MB (由 yarn.scheduler.maximum-allocation-mb 设置 )

      容器还需要满足对虚拟内存的限制。

      如果容器所使用的虚拟内存量超出预定系数和所分配的物理内存的乘积,则节点管理器也会终止进程。该系数由 yarn.nodemanager.vmem-pmen-ratio 属性指定,默认值是2.1。在前面的例子中,虚拟内存规模的上限值是2150M 即2.1*1024 M

      除了使用参数来配置内存使用之外,还可以使用mapreduce任务计数器来监控任务执行过程中的真实内存消耗量。

      这些计数器包括

      PHYSICAL_MEMORY_BYTES 、VIRTUAL_MEMORY_BYTES 和 COMMITTED_HEAP_BYTES ,分别描述了在某一时刻各种内存的使用情况,因此也适用于在任务尝试期间的观察。

      hadoop 也提供了一些设置方法,用于控制mapreduce操作的内存使用,这些设置可以针对每个作业进行。


      #map端的调优属性--总的原则是给shuffle过程尽量多提供内存空间

      属性名称类型默认值说明
      mapreduce.task.io.sort.mbint100排序map输出时所使用的内存缓冲区的大小,单位MB
      mapreduce.map.sort.spill.percentfloat0.86map输出内存缓冲和用来开始磁盘溢出写过程的记录边界索引,这两者使用比例的阈值
      mapreduce.task.io.sort.factorint10排序文件时,一次最多合并的流数。这个属性也在reduce 中使用。将此值增加到100是很常见的
      mapreduce.map.combine.minspillsint3运行combiner 所需的最少溢出文件数(如果已指定combiner)
      mapreduce.map.output.compressbooleanfalse是否压缩map输出
      mapreduce.map.output.compress.codecclass nameorg.apache.hadoop.io.compress.DefaultCodec用于map输出的压缩编解码器
      mapreduce.shuffle.max.threadsint0每个节点管理器的工作线程数,用于将map输出到reducer。这是集群范围的设置,不能由单个作业设置。0 表示使用netty 默认值,即两倍于可用的处理器数


      #reduce端的调优属性

      属性名称类型默认值描述
      mapreduce.reduce.shuffle.parallelcopiesint5用于把map输出复制到reducer的线程数
      mapreduce.reduce.shuffle.maxfetchfailuresint10在声明失败之前,reducer 获取一个map输出所花的最大时间
      mapreduce.task.io.sort.factorint10排序文件时一次最多合并的流的数量。这个属性也在map端使用
      mapreduce.reduce.shuffle.input.buffer.percentfloat0.70在shuffle的复制阶段,分配给map输出的缓冲区占堆空间的百分比
      mapreduce.reduce.shuffle.merge.percentfloat0.66map输出缓冲区(由mapred.job.shuffle.input.buffer.percent 定义)的阈值使用比例,用于启动合并输出和磁盘溢出写的过程
      mapreduce.reduce.merge.inmem.thresholdint1000启动合并输出和磁盘溢出写过程的map输出的阈值数。0或更小的数意味着没有阈值限制。溢出写行为由 mapreduce.reduce.shuffle.merge.percent 单独控制
      mapreduce.reduce.input.buffer.percentfloat0.0在reduce过程中,在内存中保存map输出的空间占整个堆空间的比例。reduce阶段开始时候,内存中的map输出大小不能大于这个值。默认情况下在reduce任务开始之前,所有map输出都合并到磁盘上,以便为reducer 提供尽可能多的内存。然而,如果reducer需要的内存较少,可以增加此值来最小化访问磁盘的次数。


      hadoop 使用默认为4kb的缓冲区,这是很低的,因此应该在集群中增加这个值(通过设置io.file.buffer.size)


      3.4、YARN和MapReduce中的CPU设置

      除了内存外,yarn将cpu的使用作为一种资源进行管理,应用程序可以申请所需要的核数量。

      通过属性 yarn.nodemanager.resource.cpuvcores 可以设置节点管理器分配给容器的核数量。

      应该设置为机器的总核数减去机器上运行的每个守护进程(datanode、节点管理器和其他长期运行的进程)占用的核数(每个进程占用1个核)

      通过设置属性 

      mapreduce.map.cpu.vcores 和 mapreduce.reduce.cpu.vcores,mapreduce作业能够控制分配给map和reduce容器的核数量。

      两者的默认值均为1,适合通常的单线程的mapreduce任务。


      #扩展信息

      当调度过程中堆核数量进行掌控后 (这样,当机器没有空余核时,一个容器将不会分到核),节点管理器默认情况下将不会限制运行中的容器堆cpu的实际使用。这意味着一个容器可能会出现滥用配额的情况,例如使用超额的cpu,而这可能会饿死在同一主机上运行的其他容器。

      yarn提供了基于linux的cgroup技术的,强制实施cpu限制的手段,为此,节点管理器的容器执行类 (yarn.nodemanager.containerexecutor.class )必须被设置为使用 LinuxContainerExecutor 类,并且必须将LinuxContainerExecutor 类配置为使用cgroup







      4、hadoop守护进程的地址和端口

      hadoop 守护进程一般同时运行RPC 和HTTP两个服务器,

      RPC服务器支持守护进程间的通信

      HTTP服务器则提供于用户交互的web也没

      需要分别为各个服务器配置网络地址和监听端口号。


      4.1、RPC服务器的属性


      属性名称默认值说明
      fs.defaultFSfile:///设为一个HDFS 的URL 时,该属性描述 namenode的RPC 服务器地址和端口。如果不指定,则默认的端口号是8020
      dfs.namenode.rpc-bind-host
      namenode 的RPC服务器将绑定的地址。如果没有设置(默认情况),绑定地址由fs.defaultFS决定。可以设为0.0.0.0,使得namenode可以监听所有接口
      dfs.datanode.ipc.address0.0.0.0:50020datanode的rpc服务器地址和端口
      apreduce.jobhistory.address0.0.0.0:10020作业历史服务器的rpc服务器地址和短裤。客户端(一般在集群外部)用于查询作业历史
      mapreduce.jjobhistory.bind-host
      作业历史服务器的rpc和http服务器将绑定的地址
      yarn.resourcemanager.hostname0.0.0.0资源管理器运行所在的机器主机名,以下缩写为 ${y.rm.hostname}
      yarn.resourcemanager.bind-host
      资源管理器的rpc和http服务器将绑定的地址
      yarn.resourcemanager.address${y.rm.hostname}:8032资源管理器的rpc服务器地址和端口。客户端通过它与资源管理器通信
      yarn.resourcemanager.admin.address${y.rm.hostname}:8033资源管理器的admin rpc服务器地址和端口。admin客户端 (由yarn rmadmin调用,一般在集群外部)借此与资源管理器通信
      yarn.resourcemanager.scheduler.address${y.rm.hostname}:8030资源管理器的调度器rpc服务器地址和端口。application master (在集群内部)借此与资源管理器通信
      yarn.resouremanager.resourcetracker.address${y.rm.hostname}:8031资源管理器的resource tracker 的rpc服务器地址和端口。节点服务器(在集群内)借此与资源管理器通信
      yarn.nodemanager.hostname0.0.0.0节点管理器运行所在的机器的主机名。以下缩写为${y.nm.hostname}
      yarn.nodemanager.bind-host
      节点管理器的rpc和http服务器将绑定的地址
      yarn.nodemanager.address${y.rm.hostname}:0节点管理器的rpc服务器地址和端口。application master (在集群内部)借此与节点管理器通信
      yarn.nodemanager.localizer.address${y.rm.hostname}:8040节点管理器的localizer 的rpc服务器地址和端口


      4.2、HTTP服务器的属性


      属性名称默认值说明
      dfs.namenode.http-address0.0.0.0:50070namenode的http服务器地址和端口
      dfs.namenode.http-bind-host
      namenode的http服务器将绑定的地址
      dfs.namenode.secondary.http-address0.0.0.0:50090辅助namenode的http服务器地址和端口
      dfs.datanode.http.address0.0.0.0:50075datanode的http服务器地址和端口。注意,属性名和namenode的属性名不一样。
      mapreduce.jobhistory.webapp.address0.0.0.0:19888mapreduce作业历史服务器地址和端口。 该属性在mapred-site.xml文件中设置。
      mapreduce.shuffle.port13562shuffle 句柄的http端口好。为map输出结果服务,但不是用户可以访问的webui,该属性在mapred-site.xml文件中设置。
      yarn.resourcemanager.webapp.address${y.rm.hostname}:8088资源管理器的http服务器地址和端口
      yarn.nodemanager.webapp.address${y.rm.hostname}:8042节点管理器的http服务器地址和端口
      yarn.web-proxy.address
      web应用代理服务器的http服务器地址和端口。如果该属性没有设置(默认情况),web应用代理服务器将在资源管理器进程中运行


      通常,用于设置服务器rpc和http地址的属性担负着双重责任:

      一方面它们决定了服务器将绑定的网络接口,

      另一方面,客户端或集群中的其他机器使用它们链接服务器。

      节点管理器使用yarn.resourcemanager.resource-tracker.address 属性来确定它们的资源管理器的地址。







      5、hadoop的其他属性


      集群成员

      属性dfs.hosts记录允许作为datanode加入集群机器列表

      属性yarn.resourcemanager.nodes.include-path 记录允许作为节点管理器加入集群的机器列表。

      与之相对应的属性 dfs.hosts.exclude 、 yarn.resourcemanager.nodes.exclude-path所指定的文件分别包含待解除的机器列表。


      缓冲区大小

      hadoop使用一个4kb的缓冲区辅助io操作。增大缓冲区容量会显著提高性能,例如128KB 更常用, 131072字节

      可以通过core-site.xml 文件中的 io.file.buffer.size 属性来设置缓冲区大小(以字节为单位)


      hdfs 块大小

      在默认情况下,hdfs块大小是128M ,但是很多集群把块大小设的更大 (如 256MB、268435456字节)以降低namenode的内存压力 ,并向mapper传输更多数据。

      可以通过hdfs-site.xml 文件中的dfs.blocksize 属性设置块的大小(以字节为单位)


      保留的存储空间

      默认情况下,datanode 能够使用存储目录上的所有空值空间。

      如果计划将部分空间留给其他应用程序(非HDFS),则需要设置 dfs.datanode.du.reserved 属性来指定待保留的空间大小(以字节为单位)


      回收站

      hadoop文件系统也有回收站设施,被删除的文件并未被真正的删除,仅只转移到回收站(一个特定的文件夹)中。回收站中的文件在被永久删除之前仍会至少保留一段时间。由core-site.xml 文件中的 fs.trash.interval 属性(以分钟为单位)设置。

      默认情况下,该属性的值是0,表示回收站特性无效。

      与许多操作系统类似,hadoop的回收站设施是用户级特性,只有由文件系统shell直接删除的文件才会被放到回收站中,用程序删除的文件会被直接删除。

      当回收站特性被启用时,每个用户都有独立的回收站目录,即:home目录下的.Trash 目录。

      恢复文件也很容易:在.Trash 的子目录中找到文件,并将其移出.Trash 的子目录

      HDFS 会自动删除回收站中的文件,但是其他文件系统并不具备这项功能。对于这些文件系统,必须定期手动删除。

      执行以下命令可以删除已在回收站中超过最小时限的所有文件

      hdfs dfs -expunge



      作业调度

      在针对多用户的设置中,可以考虑升级作业调度器队列配置,以反映在组织方面的需求。

      例如可以为使用集群的每个组设置一个队列。


      慢启动reduce

      在默认情况下,调度器将会一直等待,直到该作业的5% 的map任务已经结束才会调度reduce任务。对于大型作业来说,这可能会降低集群的利用率,因为在等待map任务执行完毕的过程中,占用了reduce容器。

      可以将

      mapreduce.job.reduce.slowstart.completedmaps 的值设置得更大,例如 0.80 (80%),能够提升吞吐率。


      短回路本地读

      当从hdfs读取文件时,客户端练习datanode,然后数据通过tcp链接发送给客户端。如果正在读取的数据块和客户端在同一节点上,那么客户端绕过忘了从磁盘上直接读取数据效率会更高。这又称作 短回路本地读,这种方式能够让应用程序如hbase 执行效率更高。

      将属性 dfs.client.read.shortcircuit 设置为true ,即可启用短回路本地读。

      该读操作基于unix 域套接字实现,在客户端和datanode之间的通信中使用了一个本地路径。

      该路径使用属性 dfs.domain.socket.path 进行设置,且必须是一套仅有datanode用户(典型的为hdfs)或root用户能够创建的路径。例如

      /var/run/hadoop-hdfs/dn_socket









      兴趣是最好的老师,唯有热爱不可辜负!

      Have fun!




      少侠,请留步,欢迎点赞关注转发




      文章转载自闵栋,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

      评论