注册 登录
  • 欢迎访问"运维那点事",推荐使用Google浏览器访问,可以扫码关注本站的"微信公众号"。
  • 如果您觉得本站对你有帮助,那么可以扫码捐助以帮助本站更好地发展。

Hadoop实战:Hadoop分布式集群部署(一)

Hadoop 彭东稳 4565次浏览 已收录 0个评论

一、系统参数优化配置

1.1 系统内核参数优化配置

修改文件/etc/sysctl.conf,使用sysctl -p命令即时生效。

1.2 修改Linux最大限制

追加到文件/etc/security/limits.conf即可。

1.3 磁盘I/O优化调整

Linux磁盘I/O调度器对磁盘的访问支持不同的策略,默认的为CFQ,GP建议设置为deadline。

我这里是sda磁盘,所以直接对sda磁盘更改IO调度策略(你需要根据你的磁盘进行设置),如下设置:

如果想永久生效,加入到/etc/rc.local即可。

PS:都配置完毕后,重启生效即可。

二、安装前环境配置(所有节点)

2.1 测试环境清单

角色 主机名 地址 系统 硬件
namenode,resourcemanager,datanode,nodemanager,secondarynamenode hadoop-nn 10.10.0.186 CentOS 7.2 8核8G
datanode,nodemanager hadoop-snn 10.10.0.187 CentOS 7.2 8核8G
datanode,nodemanager hadoop-dn-01 10.10.0.188 CentOS 7.2 8核8G

2.2 设置主机名

2.3 关闭防火墙

如果想开启防火墙,就需要了解Greenplum所有的端口信息即可。

2.4 关闭SELinux

2.5 添加所有节点到/etc/hosts

2.6 NTP时间同步

在Hadoop namenode节点安装ntp服务器,然后其他各个节点都同步namenode节点的时间。

然后在其他节点同步ntp时间。

添加一个计划任务,Hadoop需要各个节点时间的时间都是一致的,切记。

三、开始部署Hadoop

3.1 在所有主机安装JAVA

查看java版本,确保此命令没有问题

另外openjdk安装后,不会默许设置JAVA_HOME环境变量,要查看安装后的目录,可以用命令。

默认jre目录为:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.131-3.b12.el7_3.x86_64/jre

设置环境变量,可用编辑/etc/profile.d/java.sh

完成这项操作之后,需要重新登录,或source一下profile文件,以便环境变量生效,当然也可以手工运行一下,以即时生效。

3.2 在所有主机创建专门hadoop用户

设置密码,为简单起见,3台机器上的hadoop密码最好设置成一样,比如123456。为了方便,建议将hadoop加入root用户组,操作方法:

执行完后hadoop即归属于root组了,可以再输入id hadoop查看输出验证一下,如果看到类似下面的输出:

3.3 在NameNode节点创建秘钥

创建RSA秘钥对

在NameNode节点复制公钥到所有节点Hadoop用户目录下,包括自己:

3.4 在所有主机解压Hadoop二进制包并设置环境变量

Hadoop二进制包下载自行去国内源或者官网搞定。

编辑环境配置文件/etc/profile.d/hadoop.sh,定义类似如下环境变量,设定Hadoop的运行环境。

创建数据和日志目录

而后,在Hadoop的安装目录中创建logs目录,并修改Hadoop所有文件的属主和属组。

四、配置所有Hadoop节点

4.1 hadoop-nn节点

需要配置以下几个文件。

core-site.xml

core-size.xml文件包含了NameNode主机地址以及其监听RPC端口等信息(NameNode默认使用的RPC端口为8020),对于分布式环境,每个节点都需要设置NameNode主机地址,其简要的配置内容如下所示:

hdfs-site.xml

hdfs-site.xml主要用于配置HDFS相关的属性,列如复制因子(即数据块的副本数)、NN和DN用于存储数据的目录等。数据块的副本数对于分布式的Hadoop应该为3,这里我设置为2,为了减少磁盘使用。而NN和DN用于村粗的数据的目录为前面的步骤中专门为其创建的路径。另外,前面的步骤中也为SNN创建了相关的目录,这里也一并配置为启用状态。

注意,如果需要其它用户对hdfs有写入权限,还需要在hdfs-site.xml添加一项属性定义:

mapred-site.xml

mapred-site.xml文件用于配置集群的MapReduce framework,此处应该指定使用yarn,另外的可用值还有local和classic。mapred-site.xml默认不存在,但有模块文件mapred-site.xml.template,只需要将其复制为mapred-site.xml即可。

yarn-site.xml

yarn-site.yml用于配置YARN进程及YARN的相关属性,首先需要指定ResourceManager守护进程的主机和监听的端口(这里ResourceManager准备安装在NameNode节点);其次需要指定ResourceMnager使用的scheduler,以及NodeManager的辅助服务。一个简要的配置示例如下所示:

hadoop-env.sh和yarn-env.sh

Hadoop的个各守护进程依赖于JAVA_HOME环境变量,如果有类似于前面步骤中通过/etc/profile.d/java.sh全局配置定义的JAVA_HOME变量即可正常使用。不过,如果想为Hadoop定义依赖到特定JAVA环境,也可以编辑这两个脚本文件,为其JAVA_HOME取消注释并配置合适的值即可。此外,Hadoop大多数守护进程默认使用的堆大小为1GB,但现实应用中,可能需要对其各类进程的堆内存大小做出调整,这只需要编辑此两者文件中相关环境变量值即可,列如HADOOP_HEAPSIZE、HADOOP_JOB_HISTORY_HEADPSIZE、JAVA_HEAP_SIZE和YARN_HEAP_SIZE等。

slaves文件

slaves文件存储于了当前集群的所有slave节点的列表,默认值为localhost。这里我打算在三个节点都安装DataNode,所以都添加进去即可。

到目前为止,第一个节点(Master)已经配置好了。在hadoop集群中,所有节点的配置都应该是一样的,前面我们也为slaves节点创建了Hadoop用户、数据目录以及日志目录等配置。

接下来就是把Master节点的配置文件都同步到所有Slaves即可。

五、格式化HDFS

在HDFS的NameNode启动之前需要先初始化其用于存储数据的目录,如果hdfs-site.xml中dfs.namenode.name.dir属性指定的目录不存在,格式化命令会自动创建之;如果事先存在,请确保其权限设置正确,此时格式操作会清除其内部的所有数据并重新建立一个新的文件系统。需要以hdfs用户的身份执行如下命令。

其输出会有大量的信息输出,如果显示出类似”17/06/13 05:56:18 INFO common.Storage: Storage directory /data/hadoop/hdfs/nn has been successfully formatted.“的结果表示格式化操作已然完成。

六、启动Hadoop集群

启动Hadood集群的方法有两种:一是在各节点分别启动需要启动的服务,二是在NameNode节点启动整个集群(推荐方法)。

第一种:分别启动方式

Master节点需要启动HDFS的NameNode、SecondaryName、nodeDataNode服务,以及YARN的ResourceManager服务。

各Slave节点需要启动HDFS的DataNode服务,以及YARN的NodeManager服务。

第二种:集群启动方式

集群规模较大时,分别启动各节点的各服务过于繁琐和低效,为此,Hadoop专门提供了start-dfs.sh和stop-dfs.sh来启动及停止整个hdfs集群,以及start-yarn.sh和stop-yarn.sh来启动及停止整个yarn集群。

较早版本的Hadoop会提供start-all.sh和stop-all.sh脚本来统一控制hdfs和mapreduce,但Hadoop 2.0及之后的版本不建议再使用此种方式。

我这里都使用集群启动方式。

6.1 启动HDFS集群

HDFS集群启动完成后,可在各节点以jps命令等验证各进程是否正常运行,也可以通过Web UI来检查集群的运行状态。

查看NameNode节点启动的进程:

查看DataNode节点启动进程:

通过JPS命令和开启的端口基本可以看出,NameNode、SecondaryNameNode、DataNode进程各自开启的对应端口。另外,可以看到DataNode都正常连接到了NameNode的8020端口。如果相关节点起不来,可能是权限不对,或者相关目录没有创建,具体可以看相关节点的日志:/usr/local/hadoop/logs/*.log。

通过NameNode节点的http://hadoop-nn:50070访问Web UI界面:

Hadoop实战:Hadoop分布式集群部署(一)可以看到3个DataNode节点都运行正常。

此时其实HDFS集群已经好了,就可以往里面存储数据了,下面简单使用HDFS命令演示一下:

然后我们再看一下Hadoop Web UI界面:

Hadoop实战:Hadoop分布式集群部署(一)

可以看到Blocks字段,在Hadoop-dn和hadoop-nn节点各自占用一个块,HDFS默认未64M一个块大小。由于我们上传的文件太小,所以也没有做切割,我们再启动集群时设置的是2个副本,所以这里就相当于存储了两份。

HDFS集群管理命令

6.2 启动YARN集群

YARN集群启动完成后,可在各节点以jps命令等验证各进程是否正常运行。

通过JPS命令和开启的端口基本可以看出ResourceManager、NodeManager进程都各自启动。另外,NodeManager会在对应的DataNode节点都启动。

通过ResourceManager节点的http://hadoop-nn:8088访问Web UI界面:

Hadoop实战:Hadoop分布式集群部署(一)

YARN集群管理命令

YARN命令有许多子命令,大体可分为用户命令和管理命令两类。直接运行yarn命令,可显示其简单使用语法及各子命令的简单介绍:

这些命令中,jar、application、node、logs、classpath和version是常用的用户命令,而resourcemanager、nodemanager、proxyserver、rmadmin和daemonlog是较为常用的管理类命令。

八、运行YARN应用程序

YARN应用程序(Application)可以是一个简单的shell脚本、MapReduce作业或其它任意类型的作业。需要运行应用程序时,客户端需要事先生成一个ApplicationMaster,而后客户端把application context提交给ResourceManager,随后RM向AM分配内存及运行应用程序的容器。大体来说,此过程分为六个阶段。

  • Application初始化及提交;
  • 分配内存并启动AM;
  • AM注册及资源分配;
  • 启动并监控容器;
  • Application进度报告;
  • Application运行完成;

下面我们来利用搭建好的Hadoop平台处理一个任务,看一下这个流程是怎样的。Hadoop安装包默认提供了一下运行示例,如下操作:

我们找一个比较好理解的wordcount进行测试,还记得我们刚开始提供一个funcations文件到了HDFS集群中,下面我们就把funcations这个文件进行单词统计处理,示例如下:

我们把统计结果放到HDFS集群的/test/wc目录下。另外,注意当输出目录存在时执行任务会报错。

任务运行时,你可以去Hadoop管理平台(8088端口)看一下会有如下类似的输出信息,包括此次应用名称,运行用户、任务名称、应用类型、执行时间、执行状态、以及处理进度。

Hadoop实战:Hadoop分布式集群部署(一)

然后我们可以看一下/test/wc目录下有什么:

看一下单词统计结果:

九、开启历史服务

当运行过Yarn任务之后,在Web UI界面可以查看其状态信息。但是当ResourceManager重启之后,这些任务就不可见了。所以可以通过开启Hadoop历史服务来查看历史任务信息。

Hadoop开启历史服务可以在web页面上查看Yarn上执行job情况的详细信息。可以通过历史服务器查看已经运行完的Mapreduce作业记录,比如用了多少个Map、用了多少个Reduce、作业提交时间、作业启动时间、作业完成时间等信息。

JobHistoryServer开启后,可以通过Web页面查看历史服务器:

Hadoop实战:Hadoop分布式集群部署(一)

历史服务器的Web端口默认是19888,可以查看Web界面。你可以多执行几次Yarn任务,可以通过History点击跳到历史页面,查看其任务详情。

Hadoop实战:Hadoop分布式集群部署(一)

Hadoop实战:Hadoop分布式集群部署(一)

但是在上面所显示的某一个Job任务页面的最下面,Map和Reduce个数的链接上,点击进入Map的详细信息页面,再查看某一个Map或者Reduce的详细日志是看不到的,是因为没有开启日志聚集服务。

十、开启日志聚集

MapReduce是在各个机器上运行的,在运行过程中产生的日志存在于各个机器上,为了能够统一查看各个机器的运行日志,将日志集中存放在HDFS上,这个过程就是日志聚集。

配置日志聚集功能,Hadoop默认是不启用日志聚集的,在yarn-site.xml文件里配置启用日志聚集。

yarn.log-aggregation-enable:是否启用日志聚集功能。

yarn.log-aggregation.retain-seconds:设置日志保留时间,单位是秒。

将配置文件分发到其他节点:

重启Yarn进程:

重启HistoryServer进程:

测试日志聚集,运行一个demo MapReduce,使之产生日志:

运行Job后,就可以在历史服务器Web页面查看各个Map和Reduce的日志了。

十一、内存调整

Ambari——大数据平台的搭建利器:https://www.ibm.com/developerworks/cn/opensource/os-cn-bigdata-ambari/index.html


如果您觉得本站对你有帮助,那么可以支付宝扫码捐助以帮助本站更好地发展,在此谢过。
喜欢 (2)or分享 (0)
关于作者:

您必须 登录 才能发表评论!