大数据技术 搭建简单的hadoop集群
沉沙 2018-10-08 来源 : 阅读 1017 评论 0

摘要:本篇教程探讨了大数据技术 搭建简单的hadoop集群,希望阅读本篇文章以后大家有所收获,帮助大家对大数据技术的理解更加深入。

本篇教程探讨了大数据技术 搭建简单的hadoop集群,希望阅读本篇文章以后大家有所收获,帮助大家对大数据技术的理解更加深入。

<

 
具体的实践,请参阅:搭建两个节点的简单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 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。如果权限运行,即使目录不存在,也会创建
关于这个详细的信息可以参阅//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只有在部署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.shMapReduce 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
//nn_host:port/
Default HTTP port is 50070,可以查看hdfs文件



ResourceManager
//rm_host:port/
Default HTTP port is 8088.



MapReduce JobHistory Server
//jhs_host:port/
Default HTTP port is 19888.


   

本文由职坐标整理发布,学习更多的大数据技术相关知识,请关注职坐标大技术云计算大技术技术频道!

本文由 @沉沙 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程