• 搭建简单的hadoop集群(译文)


    本文翻译翻译自http://hadoop.apache.org/docs/r2.8.0/hadoop-project-dist/hadoop-common/ClusterSetup.html

    具体的实践,请参阅:搭建两个节点的简单hdfs集群

    译注:仅仅是翻译,内容关于搭建一个纯净,简单的hadoop集群。实际的集群,需要考虑高可靠,性能,安全。

    参考:高可靠

              安全(保全):保全模式服务器级别授权

    1.目的

    告诉读者如何搭建具有几个节点或者成千上万个节点的集群。

    但不包含高可靠和保全内容。

    2.前提

    • 安装必要的java版本
    • 下载稳定版本

    译注:如果是生产库,千万不要使用稳定版本之外的。除非你愿意支付这种代价。

    3.安装

    通常包括在所有节点上解压软件,或者也可以使用打包系统。

    划分硬件的功能很重要。

    通常,一台机器作为名称节点,另外一台作为资源管理器。这两台是核心机器。

    其它服务(诸如web应用代理服务器和mr作业历史服务器)可以运行在专有机器上,也可以在大机上共存,具体取决于负载。

    其它的机器,用作数据节点和节点管理器。它们属于从属。

    译注:原文分别使用master和slave划分几种服务。以为把它们分别翻译为“核心","从属".

    4.非保全模式的配置

    hadoop的java配置通过两种配置文件进行:

    • 只读默认配置  - core-default.xml, hdfs-default.xml, yarn-default.xml 和mapred-default.xml.

    • 节点特定配置  -  etc/hadoop/core-site.xml, etc/hadoop/hdfs-site.xml, etc/hadoop/yarn-site.xm和etc/hadoop/mapred-site.xml.

    此外,我们可以控制位于bin目录下的hadoop脚本,方式是修改 etc/hadoop/hadoop-env.sh 和 etc/hadoop/yarn-env.sh

    为了配置hadoop集群,我们需要配置运行hadoop守护程序用户的环境变量,并配置守护程序有关的参数。

    HDFS守护程序包含NameNode, SecondaryNameNode, and DataNode。YARN的是ResourceManager, NodeManager, 和WebAppProxy。如果有使用MR,那么还包含MapReduce Job History Server。

    在大型集群中,这些守护程序通常是在不同的主机上分开运行(应为压力实在大)。

    4.1配置hadoop守护程序环境

    管理员应该使用etc/hadoop/hadoop-env.sh,etc/hadoop/mapred-env.shetc/hadoop/yarn-env.sh来设定节点有关的定制环境。

    有些情况下,还必须设定JAVA_HOME。(译注,这个是通过实践,是严重推荐的,因为有的人的机器上可能有许多JAVA环境).

    管理员可以使用下表中环境变量为每个独立的守护程序设定特定的选项:

    DaemonEnvironment Variable
    NameNode HADOOP_NAMENODE_OPTS
    DataNode HADOOP_DATANODE_OPTS
    Secondary NameNode HADOOP_SECONDARYNAMENODE_OPTS
    ResourceManager YARN_RESOURCEMANAGER_OPTS
    NodeManager YARN_NODEMANAGER_OPTS
    WebAppProxy YARN_PROXYSERVER_OPTS
    Map Reduce Job History Server HADOOP_JOB_HISTORYSERVER_OPTS

    例如,为了让名称节点可以使用JAVA并行的GC(垃圾回收),那么可以在 hadoop-env.sh 中添加如下语句:

    export HADOOP_NAMENODE_OPTS="-XX:+UseParallelGC"

    etc/hadoop/hadoop-env.sh 中有更多的例子。

    译注:要启用什么java配置? 这个如果不是很熟悉hadoop的内核,还是不要轻易调整。 但如果是研究性的集群,不烦可以试试,或者遇到死马的时候,也可以考虑下。

    其它一些配置也可以定制,包括:

    • HADOOP_PID_DIR - 守护程序进程id文件所在路径。
    • HADOOP_LOG_DIR - 守护程序日志路径。
    • HADOOP_HEAPSIZE / YARN_HEAPSIZE -  java虚拟机所使用最大内存,单位MB。例如如果是1000就是1000MB。默认就是1000MB.可以根据集群的需要调整大小。

    大部分情况下,我们应该设定HADOOP_PID_DIR 和 HADOOP_LOG_DIR,这样只有启动守护程序的用户可以写。否则有潜在的连接攻击。

    一般来说,也需要在系统级别shell环境中配置HADOOP_PREFIX,例如可以在目录/etc/profile.d下的脚本中设定:

    HADOOP_PREFIX=/path/to/hadoop

    export HADOOP_PREFIX

    译注:关于是否设置系统级别的环境变量,要看具体环境而定。

    DaemonEnvironment Variable
    ResourceManager YARN_RESOURCEMANAGER_HEAPSIZE
    NodeManager YARN_NODEMANAGER_HEAPSIZE
    WebAppProxy YARN_PROXYSERVER_HEAPSIZE
    Map Reduce Job History Server HADOOP_JOB_HISTORYSERVER_HEAPSIZE

    4.2配置hadoop守护程序

    译注:这个小章节,需要读者格外注意。但本章节中提到的配置仅仅是一些关键性的部分,并不包含所有。建议读者详细阅读各个配置文件的default文档说明

          HDFS设置

    • etc/hadoop/core-site.xml
    ParameterValueNotes
    fs.defaultFS NameNode URI

    hdfs://host:port/

    有的地方如果有启用viewFs,可能前缀不同。但本文只说简单的。

    io.file.buffer.size 131072

    Size of read/write buffer used in SequenceFiles.

    单位字节。具体可以参考core-default.xml说明

    • etc/hadoop/hdfs-site.xml

    •  NameNode(名称节点):

    ParameterValueNotes
    dfs.namenode.name.dir Path on the local filesystem where the NameNode stores the namespace and transactions logs persistently. 操作系统本地路径

    为了冗余,可以配置多个路径,路径之间使用逗号分隔。既然是冗余,建议路径是位于不同的磁盘上。或者是使用raid磁盘,一个路径即可。

    dfs.hosts / dfs.hosts.exclude List of permitted/excluded DataNodes.

    允许/禁止的数据节点名称。具体值是一个文件的全路径。文件中一行一个主机名称。也可以不设置。如果允许就可以连接名称节点。

    译注:不太清楚这个有什么作用,也许仅仅是为了便于替换加入,或者做扩展测试。

    dfs.blocksize 268435456

    数据块大小。可以后缀单位为(k,m,g,t,p,e),例如128m。也可以没有后缀(就是字节为单位),这里是256mb。

    译注:数据块设置多大,和操作系统,每个文件大小,java设置,网络都有关系。

    dfs.namenode.handler.count 100

    rpc线程个数(LINUX就是进程),用于数据节点和名称节点之间的通讯。

    译注:如果你有非常多的数据节点,这个就需要设置很大

    •  DataNode(数据节点):
    ParameterValueNotes
    dfs.datanode.data.dir Comma separated list of paths on the local filesystem of a DataNode where it should store its blocks.

    存储实际的数据块。可以有多个路径,之间以逗号分隔。

    如果有多个路径,则必须在每个路径后跟上设备类型([SSD]/[DISK]/[ARCHIVE]/[RAM_DISK])

    如果没有跟上,则默认是DISK。如果权限运行,即使目录不存在,也会创建

    关于这个详细的信息可以参阅http://hadoop.apache.org/docs/r2.8.0/hadoop-project-dist/hadoop-hdfs/ArchivalStorage.html

    译注:在将来,这是必须严重关注的事情,当然也许更新的版本并不关注这个设置。

          yarn设置

    • etc/hadoop/yarn-site.xml
    •  ResourceManager 和 NodeManager:

    ParameterValueNotes
    yarn.acl.enable true / false 是否启用acl,默认不启用
    yarn.admin.acl Admin ACL

    acl列表。具体可以参考服务级别授权

    yarn.log-aggregation-enable false

    启用或者禁用容器日志。如果启用,就会记录,并且日志会移动到某个文件系统,例如HDFS。

    日志可以使用Application Timeline Server来查看。

    译注:如果设置为true,则还涉及都许多的配置。

    • ResourceManager:
    ParameterValueNotes
    yarn.resourcemanager.address ResourceManager host:port for clients to submit jobs. host:port If set, overrides the hostname set in yarn.resourcemanager.hostname.
    yarn.resourcemanager.scheduler.address ResourceManager host:port for ApplicationMasters to talk to Scheduler to obtain resources. host:port If set, overrides the hostname set in yarn.resourcemanager.hostname.
    yarn.resourcemanager.resource-tracker.address ResourceManager host:port for NodeManagers. host:port If set, overrides the hostname set in yarn.resourcemanager.hostname.
    yarn.resourcemanager.admin.address ResourceManager host:port for administrative commands. host:port If set, overrides the hostname set in yarn.resourcemanager.hostname.
    yarn.resourcemanager.webapp.address ResourceManager web-ui host:port. host:port If set, overrides the hostname set in yarn.resourcemanager.hostname.
    yarn.resourcemanager.hostname ResourceManager host. host Single hostname that can be set in place of setting all yarn.resourcemanager*address resources. Results in default ports for ResourceManager components.
    yarn.resourcemanager.scheduler.class ResourceManager Scheduler class. CapacityScheduler (recommended), FairScheduler (also recommended), or FifoScheduler
    yarn.scheduler.minimum-allocation-mb Minimum limit of memory to allocate to each container request at the Resource Manager. In MBs
    yarn.scheduler.maximum-allocation-mb Maximum limit of memory to allocate to each container request at the Resource Manager. In MBs
    yarn.resourcemanager.nodes.include-path / yarn.resourcemanager.nodes.exclude-path List of permitted/excluded NodeManagers.

    If necessary, use these files to control the list of allowable NodeManagers.

    • NodeManager:
    ParameterValueNotes
    yarn.nodemanager.resource.memory-mb Resource i.e. available physical memory, in MB, for given NodeManager Defines total available resources on the NodeManager to be made available to running containers
    yarn.nodemanager.vmem-pmem-ratio Maximum ratio by which virtual memory usage of tasks may exceed physical memory The virtual memory usage of each task may exceed its physical memory limit by this ratio. The total amount of virtual memory used by tasks on the NodeManager may exceed its physical memory usage by this ratio.
    yarn.nodemanager.local-dirs Comma-separated list of paths on the local filesystem where intermediate data is written. Multiple paths help spread disk i/o.
    yarn.nodemanager.log-dirs Comma-separated list of paths on the local filesystem where logs are written. Multiple paths help spread disk i/o.
    yarn.nodemanager.log.retain-seconds 10800 Default time (in seconds) to retain log files on the NodeManager Only applicable if log-aggregation is disabled.
    yarn.nodemanager.remote-app-log-dir /logs HDFS directory where the application logs are moved on application completion. Need to set appropriate permissions. Only applicable if log-aggregation is enabled.
    yarn.nodemanager.remote-app-log-dir-suffix logs Suffix appended to the remote log dir. Logs will be aggregated to ${yarn.nodemanager.remote-app-log-dir}/${user}/${thisParam} Only applicable if log-aggregation is enabled.
    yarn.nodemanager.aux-services mapreduce_shuffle Shuffle service that needs to be set for Map Reduce applications.
    •  History Server:
    ParameterValueNotes
    yarn.log-aggregation.retain-seconds -1 How long to keep aggregation logs before deleting them. -1 disables. Be careful, set this too small and you will spam the name node.
    yarn.log-aggregation.retain-check-interval-seconds -1 Time between checks for aggregated log retention. If set to 0 or a negative value then the value is computed as one-tenth of the aggregated log retention time. Be careful, set this too small and you will spam the name node.

          mr设置(译注:这个不是必须的,如果仅仅想使用hdfs和yarn,而使用其它计算引擎,例如spark,presto,impala等)

    • etc/hadoop/mapred-site.xml
    • MapReduce Applications:

    ParameterValueNotes
    mapreduce.framework.name yarn Execution framework set to Hadoop YARN.
    mapreduce.map.memory.mb 1536 Larger resource limit for maps.
    mapreduce.map.java.opts -Xmx1024M Larger heap-size for child jvms of maps.
    mapreduce.reduce.memory.mb 3072 Larger resource limit for reduces.
    mapreduce.reduce.java.opts -Xmx2560M Larger heap-size for child jvms of reduces.
    mapreduce.task.io.sort.mb 512 Higher memory-limit while sorting data for efficiency.
    mapreduce.task.io.sort.factor 100 More streams merged at once while sorting files.
    mapreduce.reduce.shuffle.parallelcopies 50 Higher number of parallel copies run by reduces to fetch outputs from very large number of maps.
    •  MapReduce JobHistory Server:
    ParameterValueNotes
    mapreduce.jobhistory.address MapReduce JobHistory Server host:port Default port is 10020.
    mapreduce.jobhistory.webapp.address MapReduce JobHistory Server Web UI host:port Default port is 19888.
    mapreduce.jobhistory.intermediate-done-dir /mr-history/tmp Directory where history files are written by MapReduce jobs.
    mapreduce.jobhistory.done-dir /mr-history/done Directory where history files are managed by the MR JobHistory Server.

    5.监控节点管理器的健康

    hadoop提供了一套机制,管理员可以配置节点管理器,让节点管理器定时运行脚本,以确定节点是否健康。

    管理员可以调整脚本,做他们自己需要检查的项目。如果脚本认为节点不健康,它必须在标注输出中答应一行内容,开头是ERROR。节点管理器定时执行这个脚本,并检查脚本输出。如果输出包含ERROR,那么节点就被认为不健康(unhealthy),资源管理器会把该节点列入黑名单,之后,不再为这个问题节点分配任务。然后,因为节点管理器是不停执行这个脚本,所以如果某个节点恢复健康状态,那么这个节点就从资源管理器的黑名单剔除,之后又会被指派任务。

    检点的健康情况,可以通过web界面查看。

    etc/hadoop/yarn-site.xml中的以下参数可以控制节点健康监控:

    ParameterValueNotes
    yarn.nodemanager.health-checker.script.path Node health script

    Script to check for node’s health status.

    健康检查脚本浏览路径

    yarn.nodemanager.health-checker.script.opts Node health script options Options for script to check for node’s health status.
    yarn.nodemanager.health-checker.interval-ms Node health script interval Time interval for running health script.
    yarn.nodemanager.health-checker.script.timeout-ms Node health script timeout interval Timeout for health script execution.

    检查检查脚本不会因为只有一些磁盘有问题,就给出ERROR标记。节点管理器有定期检查本地磁盘的能力(特别地会去简单nodemanager-local-dirs 和 nodemanager-log-dirs),如果发现损坏的目录数已经超过yarn.nodemanager.disk-health-checker.min-healthy-disks所设定的阀值,那么整个节点就会被认标记为不健康。引导磁盘是否raid,引导此否是否有问题,都会被检查脚本检查。

    6.slaves文件

    slave机器(节点),或者说从属节点,它们必须在文件etc/hadoop/slaves中登记,一个一行。有关程序利用这个文本的内容,一次性在所有的节点上执行相同的命令。为了达成这个目的,各个节点上启动hadoop的系统用户账户必须互相建立ssh信任。

    译注:如果节点太多,建议使用脚本来构建这样的信任。

    7.hadoop机栈敏感

    许多hadoop组件是机栈敏感的,它们利用网络拓扑结构来提升性能和安全。hadoop守护程序通过激活一个管理员可配的模块来获得机栈信息。

    具体参考机栈敏感

    严重建议:在启动hdfs之前,需要先配置好机栈敏感。

    译注:机栈敏感,更多是一种逻辑拓扑,但和实际的物理拓扑也有密切的关系。

    8.日志

    修改etc/hadoop/log4j.properties即可启用apache log4j。

    9.hadoop集群操作

    9.1启动

    为了启动hadoop集群,必须启动HDFS和YARN集群。(译注:以下假定hdfs的用户是hdfs,yarn的用户是yarn).

    启动之前,必须先格式化

    [hdfs]$ $HADOOP_PREFIX/bin/hdfs namenode -format <cluster_name>    --参数cluster_name只有在部署federation(联合)的时候才需要提供。

    启动HDFS


    在每个名称节点上,执行以下命令
    [hdfs]$ $HADOOP_PREFIX/sbin/hadoop-daemon.sh --config $HADOOP_CONF_DIR --script hdfs start namenode

    在每个数据节点上执行以下命令
    [hdfs]$ $HADOOP_PREFIX/sbin/hadoop-daemons.sh --config $HADOOP_CONF_DIR --script hdfs start datanode


    如果有配置ssh信任,并且etc/hadoop/slaves有配置,那么可以使用以下脚本:
    [hdfs]$ $HADOOP_PREFIX/sbin/start-dfs.sh

    译注:本文中这样的配置,会默认启动一个第二名称节点,和名称节点在同一台机器上。

    启动YARN


    使用yarn用户,在资源管理器节点上运行:
    [yarn]$ $HADOOP_YARN_HOME/sbin/yarn-daemon.sh --config $HADOOP_CONF_DIR start resourcemanager

    在节点管理器上运行以下命令:
    [yarn]$ $HADOOP_YARN_HOME/sbin/yarn-daemons.sh --config $HADOOP_CONF_DIR start nodemanager

    在webappproxy服务器上,运行以下命令:
    [yarn]$ $HADOOP_YARN_HOME/sbin/yarn-daemon.sh --config $HADOOP_CONF_DIR start proxyserver


    如果有建立ssh信任和配置etc/hadoop/slaves,那么可以直接使用以下脚本启动
    [yarn]$ $HADOOP_PREFIX/sbin/start-yarn.sh

    MapReduce JobHistory Server由用户 mapred启动:
    [mapred]$ $HADOOP_PREFIX/sbin/mr-jobhistory-daemon.sh --config $HADOOP_CONF_DIR start historyserver

    译注:mr的作业历史服务器,需要单独启动。

    9.2 关闭

    关闭HDFS

    关闭名称节点
    [hdfs]$ $HADOOP_PREFIX/sbin/hadoop-daemon.sh --config $HADOOP_CONF_DIR --script hdfs stop namenode

    关闭数据节点
    [hdfs]$ $HADOOP_PREFIX/sbin/hadoop-daemons.sh --config $HADOOP_CONF_DIR --script hdfs stop datanode


    如果有配置ssh信任,并且etc/hadoop/slaves有配置,那么可以使用以下脚本:
    [hdfs]$ $HADOOP_PREFIX/sbin/stop-dfs.sh

    关闭YARN


    关闭资源管理器
    [yarn]$ $HADOOP_YARN_HOME/sbin/yarn-daemon.sh --config $HADOOP_CONF_DIR stop resourcemanager

    关闭节点管理器
    [yarn]$ $HADOOP_YARN_HOME/sbin/yarn-daemons.sh --config $HADOOP_CONF_DIR stop nodemanager

    如果有配置ssh信任,并且etc/hadoop/slaves有配置,那么可以使用以下脚本:
    [yarn]$ $HADOOP_PREFIX/sbin/stop-yarn.sh

    关闭yarn的web代理服务器
    [yarn]$ $HADOOP_YARN_HOME/sbin/yarn-daemon.sh --config $HADOOP_CONF_DIR stop proxyserver

    关闭MR作业历史服务器(如果有负载均衡,需要逐个关闭)
    [mapred]$ $HADOOP_PREFIX/sbin/mr-jobhistory-daemon.sh --config $HADOOP_CONF_DIR stop historyserver

    译注: 实际关闭集群的时候,应该先关闭yarn,再关闭hdfs。

    10.web接口

    DaemonWeb InterfaceNotes
    NameNode http://nn_host:port/ Default HTTP port is 50070,可以查看hdfs文件
    ResourceManager http://rm_host:port/ Default HTTP port is 8088.
    MapReduce JobHistory Server http://jhs_host:port/ Default HTTP port is 19888.
  • 相关阅读:
    ImageLoader配置(凝视)
    Javaproject集成log4j 2.x
    kafka入门样例 for java
    php&amp;&amp;页面静态化
    Windows 下Oracle database 9i 64bit 仅仅有 Windows Itanium 64bit
    苹果新的编程语言 Swift 语言进阶(三)--基本运算和扩展运算
    Visual Studio2008 和2010 执行程序出现的黑框马上消失解决方法
    Cocos2d-x 3.0 Schedule in Node
    zend framework获取数据库中枚举类enum的数据并将其转换成数组
    OpenGl 坐标转换
  • 原文地址:https://www.cnblogs.com/lzfhope/p/7061090.html
Copyright © 2020-2023  润新知