设为首页 收藏本站
查看: 853|回复: 0

[经验分享] 搭建简单的hadoop集群(译文)

[复制链接]

尚未签到

发表于 2017-12-17 16:29:46 | 显示全部楼层 |阅读模式
  本文翻译翻译自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.sh ,etc/hadoop/yarn-env.sh来设定节点有关的定制环境。
  有些情况下,还必须设定JAVA_HOME。(译注,这个是通过实践,是严重推荐的,因为有的人的机器上可能有许多JAVA环境).
  管理员可以使用下表中环境变量为每个独立的守护程序设定特定的选项:
DaemonEnvironment VariableNameNodeHADOOP_NAMENODE_OPTSDataNodeHADOOP_DATANODE_OPTSSecondary NameNodeHADOOP_SECONDARYNAMENODE_OPTSResourceManagerYARN_RESOURCEMANAGER_OPTSNodeManagerYARN_NODEMANAGER_OPTSWebAppProxyYARN_PROXYSERVER_OPTSMap Reduce Job History ServerHADOOP_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 VariableResourceManagerYARN_RESOURCEMANAGER_HEAPSIZENodeManagerYARN_NODEMANAGER_HEAPSIZEWebAppProxyYARN_PROXYSERVER_HEAPSIZEMap Reduce Job History ServerHADOOP_JOB_HISTORYSERVER_HEAPSIZE  4.2配置hadoop守护程序
  译注:这个小章节,需要读者格外注意。但本章节中提到的配置仅仅是一些关键性的部分,并不包含所有。建议读者详细阅读各个配置文件的default文档说明。
  HDFS设置

  • etc/hadoop/core-site.xml
ParameterValueNotesfs.defaultFSNameNode URI  hdfs://host:port/
  有的地方如果有启用viewFs,可能前缀不同。但本文只说简单的。
io.file.buffer.size131072  Size of read/write buffer used in SequenceFiles.
  单位字节。具体可以参考core-default.xml说明

  •   etc/hadoop/hdfs-site.xml
  •   NameNode(名称节点):
ParameterValueNotesdfs.namenode.name.dirPath on the local filesystem where the NameNode stores the namespace and transactions logs persistently.操作系统本地路径  为了冗余,可以配置多个路径,路径之间使用逗号分隔。既然是冗余,建议路径是位于不同的磁盘上。或者是使用raid磁盘,一个路径即可。
dfs.hosts / dfs.hosts.excludeList of permitted/excluded DataNodes.  允许/禁止的数据节点名称。具体值是一个文件的全路径。文件中一行一个主机名称。也可以不设置。如果允许就可以连接名称节点。
  译注:不太清楚这个有什么作用,也许仅仅是为了便于替换加入,或者做扩展测试。
dfs.blocksize268435456  数据块大小。可以后缀单位为(k,m,g,t,p,e),例如128m。也可以没有后缀(就是字节为单位),这里是256mb。
  译注:数据块设置多大,和操作系统,每个文件大小,java设置,网络都有关系。
dfs.namenode.handler.count100  rpc线程个数(LINUX就是进程),用于数据节点和名称节点之间的通讯。
  译注:如果你有非常多的数据节点,这个就需要设置很大

  • DataNode(数据节点):
ParameterValueNotesdfs.datanode.data.dirComma 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:
ParameterValueNotesyarn.acl.enabletrue / false是否启用acl,默认不启用yarn.admin.aclAdmin ACL  acl列表。具体可以参考服务级别授权。
yarn.log-aggregation-enablefalse  启用或者禁用容器日志。如果启用,就会记录,并且日志会移动到某个文件系统,例如HDFS。
  日志可以使用Application Timeline Server来查看。
  译注:如果设置为true,则还涉及都许多的配置。

  • ResourceManager:
ParameterValueNotesyarn.resourcemanager.addressResourceManager host:port for clients to submit jobs.host:port If set, overrides the hostname set in yarn.resourcemanager.hostname.yarn.resourcemanager.scheduler.addressResourceManager 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.addressResourceManager host:port for NodeManagers.host:port If set, overrides the hostname set in yarn.resourcemanager.hostname.yarn.resourcemanager.admin.addressResourceManager host:port for administrative commands.host:port If set, overrides the hostname set in yarn.resourcemanager.hostname.yarn.resourcemanager.webapp.addressResourceManager web-ui host:port.host:port If set, overrides the hostname set in yarn.resourcemanager.hostname.yarn.resourcemanager.hostnameResourceManager 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.classResourceManager Scheduler>If necessary, use these files to control the list of allowable NodeManagers.

  • NodeManager:
ParameterValueNotesyarn.nodemanager.resource.memory-mbResource i.e. available physical memory, in MB, for given NodeManagerDefines total available resources on the NodeManager to be made available to running containersyarn.nodemanager.vmem-pmem-ratioMaximum ratio by which virtual memory usage of tasks may exceed physical memoryThe 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-dirsComma-separated list of paths on the local filesystem where intermediate data is written.Multiple paths help spread disk i/o.yarn.nodemanager.log-dirsComma-separated list of paths on the local filesystem where logs are written.Multiple paths help spread disk i/o.yarn.nodemanager.log.retain-seconds10800Default time (in seconds) to retain log files on the NodeManager Only applicable if log-aggregation is disabled.yarn.nodemanager.remote-app-log-dir/logsHDFS 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-suffixlogsSuffix 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-servicesmapreduce_shuffleShuffle service that needs to be set for Map Reduce applications.

  • History Server:
ParameterValueNotesyarn.log-aggregation.retain-seconds-1How 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-1Time 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:
ParameterValueNotesmapreduce.framework.nameyarnExecution framework set to Hadoop YARN.mapreduce.map.memory.mb1536Larger resource limit for maps.mapreduce.map.java.opts-Xmx1024MLarger heap-size for child jvms of maps.mapreduce.reduce.memory.mb3072Larger resource limit for reduces.mapreduce.reduce.java.opts-Xmx2560MLarger heap-size for child jvms of reduces.mapreduce.task.io.sort.mb512Higher memory-limit while sorting data for efficiency.mapreduce.task.io.sort.factor100More streams merged at once while sorting files.mapreduce.reduce.shuffle.parallelcopies50Higher number of parallel copies run by reduces to fetch outputs from very large number of maps.

  • MapReduce JobHistory Server:
ParameterValueNotesmapreduce.jobhistory.addressMapReduce JobHistory Server host:portDefault port is 10020.mapreduce.jobhistory.webapp.addressMapReduce JobHistory Server Web UI host:portDefault port is 19888.mapreduce.jobhistory.intermediate-done-dir/mr-history/tmpDirectory where history files are written by MapReduce jobs.mapreduce.jobhistory.done-dir/mr-history/doneDirectory where history files are managed by the MR JobHistory Server.  5.监控节点管理器的健康
  hadoop提供了一套机制,管理员可以配置节点管理器,让节点管理器定时运行脚本,以确定节点是否健康。
  管理员可以调整脚本,做他们自己需要检查的项目。如果脚本认为节点不健康,它必须在标注输出中答应一行内容,开头是ERROR。节点管理器定时执行这个脚本,并检查脚本输出。如果输出包含ERROR,那么节点就被认为不健康(unhealthy),资源管理器会把该节点列入黑名单,之后,不再为这个问题节点分配任务。然后,因为节点管理器是不停执行这个脚本,所以如果某个节点恢复健康状态,那么这个节点就从资源管理器的黑名单剔除,之后又会被指派任务。
  检点的健康情况,可以通过web界面查看。
  etc/hadoop/yarn-site.xml中的以下参数可以控制节点健康监控:
ParameterValueNotesyarn.nodemanager.health-checker.script.pathNode health script  Script to check for node’s health status.
  健康检查脚本浏览路径
yarn.nodemanager.health-checker.script.optsNode health script optionsOptions for script to check for node’s health status.yarn.nodemanager.health-checker.interval-msNode health script intervalTime interval for running health script.yarn.nodemanager.health-checker.script.timeout-msNode health script timeout intervalTimeout 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 InterfaceNotesNameNodehttp://nn_host:port/Default HTTP port is 50070,可以查看hdfs文件ResourceManagerhttp://rm_host:port/Default HTTP port is 8088.MapReduce JobHistory Serverhttp://jhs_host:port/Default HTTP port is 19888.

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-425055-1-1.html 上篇帖子: CentOS版hadoop完全分布初步搭建 下篇帖子: 利用docker搭建spark hadoop workbench
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表