写点什么

Hadoop 中的集群配置和使用技巧

分布式计算开源框架 Hadoop 入门实践(二)

  • 2008-08-07
  • 本文字数:3895 字

    阅读完需:约 13 分钟

── 分布式计算开源框架 Hadoop 入门实践(二)

其实参看 Hadoop 官方文档已经能够很容易配置分布式框架运行环境了,不过这里既然写了就再多写一点,同时有一些细节需要注意的也说明一下,其实也就是这些细节会让人摸索半天。Hadoop 可以单机跑,也可以配置集群跑,单机跑就不需要多说了,只需要按照 Demo 的运行说明直接执行命令即可。这里主要重点说一下集群配置运行的过程。

环境

7 台普通的机器,操作系统都是 Linux。内存和 CPU 就不说了,反正 Hadoop 一大特点就是机器在多不在精。JDK 必须是 1.5 以上的,这个切记。7 台机器的机器名务必不同,后续会谈到机器名对于 MapReduce 有很大的影响。

部署考虑

正如上面我描述的,对于 Hadoop 的集群来说,可以分成两大类角色:Master 和 Slave,前者主要配置 NameNode 和 JobTracker 的角色,负责总管分布式数据和分解任务的执行,后者配置 DataNode 和 TaskTracker 的角色,负责分布式数据存储以及任务的执行。本来我打算看看一台机器是否可以配置成 Master,同时也作为 Slave 使用,不过发现在 NameNode 初始化的过程中以及 TaskTracker 执行过程中机器名配置好像有冲突(NameNode 和 TaskTracker 对于 Hosts 的配置有些冲突,究竟是把机器名对应 IP 放在配置前面还是把 Localhost 对应 IP 放在前面有点问题,不过可能也是我自己的问题吧,这个大家可以根据实施情况给我反馈)。最后反正决定一台 Master,六台 Slave,后续复杂的应用开发和测试结果的比对会增加机器配置。

实施步骤

  1. 在所有的机器上都建立相同的目录,也可以就建立相同的用户,以该用户的 home 路径来做 hadoop 的安装路径。例如我在所有的机器上都建立了/home/wenchu
  2. 下载 Hadoop,先解压到 Master 上。这里我是下载的 0.17.1 的版本。此时 Hadoop 的安装路径就是/home/wenchu/hadoop-0.17.1
  3. 解压后进入 conf 目录,主要需要修改以下文件:hadoop-env.shhadoop-site.xmlmastersslaves。 Hadoop 的基础配置文件是hadoop-default.xml,看 Hadoop 的代码可以知道,默认建立一个 Job 的时候会建立 Job 的 Config,Config 首先读入hadoop-default.xml的配置,然后再读入hadoop-site.xml的配置(这个文件初始的时候配置为空),hadoop-site.xml中主要配置你需要覆盖的hadoop-default.xml的系统级配置,以及你需要在你的 MapReduce 过程中使用的自定义配置(具体的一些使用例如 final 等参考文档)。

以下是一个简单的hadoop-site.xml的配置:

<?xml version="1.0"?><br></br><?xml-stylesheet type="text/xsl" href="configuration.xsl"?><br></br><!-- Put site-specific property overrides in this file. --><br></br><configuration><br></br><property><br></br>   <name>fs.default.name</name>// 你的 namenode 的配置,机器名加端口 <br></br>   <value>hdfs://10.2.224.46:54310/</value><br></br></property><br></br><property><br></br>   <name>mapred.job.tracker</name>// 你的 JobTracker 的配置,机器名加端口 <br></br>   <value>hdfs://10.2.224.46:54311/</value><br></br></property><br></br><property><br></br>   <name>dfs.replication</name>// 数据需要备份的数量,默认是三 <br></br>   <value>1</value><br></br></property><br></br><property><br></br>    <name>hadoop.tmp.dir</name>//Hadoop 的默认临时路径,这个最好配置,如果在新增节点或者其他情况下莫名其妙的 DataNode 启动不了,就删除此文件中的 tmp 目录即可。不过如果删除了 NameNode 机器的此目录,那么就需要重新执行 NameNode 格式化的命令。<br></br>    <value>/home/wenchu/hadoop/tmp/</value><br></br></property><br></br><property><br></br>   <name>mapred.child.java.opts</name>//java 虚拟机的一些参数可以参照配置 <br></br>   <value>-Xmx512m</value><br></br></property><br></br><property><br></br>  <name>dfs.block.size</name>//block 的大小,单位字节,后面会提到用处,必须是 512 的倍数,因为采用 crc 作文件完整性校验,默认配置 512 是 checksum 的最小单元。<br></br>  <value>5120000</value><br></br>  <description>The default block size for new files.</description><br></br></property><br></br></configuration>``hadoop-env.sh文件只需要修改一个参数:

# The java implementation to use. Required.

export JAVA_HOME=/usr/ali/jdk1.5.0_10配置你的 Java 路径,记住一定要 1.5 版本以上,免得莫名其妙出现问题。

Masters 中配置 Masters 的 IP 或者机器名,如果是机器名那么需要在/etc/hosts中有所设置。Slaves 中配置的是 Slaves 的 IP 或者机器名,同样如果是机器名需要在/etc/hosts中有所设置。范例如下,我这里配置的都是 IP:

Masters:<br></br> 10.2.224.46<p> Slaves:</p><br></br> 10.2.226.40<br></br> 10.2.226.39<br></br> 10.2.226.38<br></br> 10.2.226.37<br></br> 10.2.226.41<br></br> 10.2.224.36
4. 建立 Master 到每一台 Slave 的 SSH 受信证书。由于 Master 将会通过 SSH 启动所有 Slave 的 Hadoop,所以需要建立单向或者双向证书保证命令执行时不需要再输入密码。在 Master 和所有的 Slave 机器上执行:ssh-keygen -t rsa。执行此命令的时候,看到提示只需要回车。然后就会在/root/.ssh/下面产生id_rsa.pub的证书文件,通过 scp 将 Master 机器上的这个文件拷贝到 Slave 上(记得修改名称),例如:scp root@masterIP:/root/.ssh/id_rsa.pub /root/.ssh/46_rsa.pub,然后执行cat /root/.ssh/46_rsa.pub >>/root/.ssh/authorized_keys,建立authorized_keys文件即可,可以打开这个文件看看,也就是 rsa 的公钥作为 key,user@IP 作为 value。此时可以试验一下,从 master ssh 到 slave 已经不需要密码了。由 slave 反向建立也是同样。为什么要反向呢?其实如果一直都是 Master 启动和关闭的话那么没有必要建立反向,只是如果想在 Slave 也可以关闭 Hadoop 就需要建立反向。
5. 将 Master 上的 Hadoop 通过 scp 拷贝到每一个 Slave 相同的目录下,根据每一个 Slave 的Java_HOME的不同修改其hadoop-env.sh
6. 修改 Master 上/etc/profile:
新增以下内容:(具体的内容根据你的安装路径修改,这步只是为了方便使用)
export HADOOP_HOME=/home/wenchu/hadoop-0.17.1

export PATH=$PATH:$HADOOP_HOME/bin 修改完毕后,执行source /etc/profile来使其生效。
7. 在 Master 上执行Hadoop namenode –format,这是第一需要做的初始化,可以看作格式化吧,以后除了在上面我提到过删除了 Master 上的hadoop.tmp.dir目录,否则是不需要再次执行的。
8. 然后执行 Master 上的start-all.sh,这个命令可以直接执行,因为在 6 中已经添加到了 path 路径,这个命令是启动 hdfs 和 mapreduce 两部分,当然你也可以分开单独启动 hdfs 和 mapreduce,分别是 bin 目录下的start-dfs.shstart-mapred.sh
9. 检查 Master 的 logs 目录,看看 Namenode 日志以及 JobTracker 日志是否正常启动。
10. 检查 Slave 的 logs 目录看看 Datanode 日志以及 TaskTracker 日志是否正常。
11. 如果需要关闭,那么就直接执行stop-all.sh即可。

以上步骤就可以启动 Hadoop 的分布式环境,然后在 Master 的机器进入 Master 的安装目录,执行hadoop jar hadoop-0.17.1-examples.jar wordcount输入路径和输出路径,就可以看到字数统计的效果了。此处的输入路径和输出路径都指的是 HDFS 中的路径,因此你可以首先通过拷贝本地文件系统中的目录到 HDFS 中的方式来建立 HDFS 中的输入路径:

hadoop dfs -copyFromLocal /home/wenchu/test-in test-in。其中/home/wenchu/test-in是本地路径,test-in是将会建立在 HDFS 中的路径,执行完毕以后可以通过hadoop dfs –ls看到 test-in 目录已经存在,同时可以通过hadoop dfs –ls test-in查看里面的内容。输出路径要求是在 HDFS 中不存在的,当执行完那个 demo 以后,就可以通过hadoop dfs –ls输出路径看到其中的内容,具体文件的内容可以通过hadoop dfs –cat文件名称来查看。

经验总结和注意事项(这部分是我在使用过程中花了一些时间走的弯路):

  1. Master 和 Slave 上的几个 conf 配置文件不需要全部同步,如果确定都是通过 Master 去启动和关闭,那么 Slave 机器上的配置不需要去维护。但如果希望在任意一台机器都可以启动和关闭 Hadoop,那么就需要全部保持一致了。
  2. Master 和 Slave 机器上的/etc/hosts中必须把集群中机器都配置上去,就算在各个配置文件中使用的是 IP。这个吃过不少苦头,原来以为如果配成 IP 就不需要去配置 Host,结果发现在执行 Reduce 的时候总是卡住,在拷贝的时候就无法继续下去,不断重试。另外如果集群中如果有两台机器的机器名如果重复也会出现问题。
  3. 如果在新增了节点或者删除节点的时候出现了问题,首先就去删除 Slave 的hadoop.tmp.dir,然后重新启动试试看,如果还是不行那就干脆把 Master 的hadoop.tmp.dir删除(意味着 dfs 上的数据也会丢失),如果删除了 Master 的hadoop.tmp.dir,那么就需要重新namenode –format
  4. Map 任务个数以及 Reduce 任务个数配置。前面分布式文件系统设计提到一个文件被放入到分布式文件系统中,会被分割成多个 block 放置到每一个的 DataNode 上,默认dfs.block.size应该是 64M,也就是说如果你放置到 HDFS 上的数据小于 64,那么将只有一个 Block,此时会被放置到某一个 DataNode 中,这个可以通过使用命令:hadoop dfsadmin –report就可以看到各个节点存储的情况。也可以直接去某一个 DataNode 查看目录:hadoop.tmp.dir/dfs/data/current就可以看到那些 block 了。Block 的数量将会直接影响到 Map 的个数。当然可以通过配置来设定 Map 和 Reduce 的任务个数。Map 的个数通常默认和 HDFS 需要处理的 blocks 相同。也可以通过配置 Map 的数量或者配置 minimum split size 来设定,实际的个数为:max(min(block_size,data/#maps),min_split_size)。Reduce 可以通过这个公式计算:0.95*num_nodes*mapred.tasktracker.tasks.maximum

总的来说出了问题或者启动的时候最好去看看日志,这样心里有底。

Hadoop 中的命令(Command)总结

这部分内容其实可以通过命令的 Help 以及介绍了解,我主要侧重于介绍一下我用的比较多的几个命令。Hadoop dfs 这个命令后面加参数就是对于 HDFS 的操作,和 Linux 操作系统的命令很类似,例如:

  • Hadoop dfs –ls就是查看 /usr/root 目录下的内容,默认如果不填路径这就是当前用户路径;
  • Hadoop dfs –rmr xxx就是删除目录,还有很多命令看看就很容易上手;
  • Hadoop dfsadmin –report这个命令可以全局的查看 DataNode 的情况;
  • Hadoop job后面增加参数是对于当前运行的 Job 的操作,例如 list,kill 等;
  • Hadoop balancer就是前面提到的均衡磁盘负载的命令。

其他就不详细介绍了。

相关阅读:

  1. 分布式计算开源框架 Hadoop 介绍――分布式计算开源框架 Hadoop 入门实践(一)
  2. Hadoop 基本流程与应用开发――分布式计算开源框架 Hadoop 入门实践(三)

作者介绍:岑文初,就职于阿里软件公司研发中心平台一部,任架构师。当前主要工作涉及阿里软件开发平台服务框架(ASF)设计与实现,服务集成平台(SIP)设计与实现。没有什么擅长或者精通,工作到现在唯一提升的就是学习能力和速度。个人 Blog 为: http://blog.csdn.net/cenwenchu79

参与 InfoQ 中文站内容建设,请邮件至 editors@cn.infoq.com 。也欢迎大家到 InfoQ 中文站用户讨论组参与我们的线上讨论。

2008-08-07 13:3956028

评论

发布
暂无评论
发现更多内容

Mac苹果电脑照片管理必备软件:Lightroom Classic 2022 for Mac最新激活版(LrC中文破解)

iMac小白

Vector Magic for mac(矢量图片转换工具) 1.2.0免激活版

iMac小白

LoRA:语言模型微调的计算资源优化策略

Baihai IDP

人工智能 深度学习 程序员 AI LLM

怎么用ETL工具实现MQ消息同步

RestCloud

MQ ETL 数据集成工具

PS滤镜插件套装 Nik Collection 6 for Mac v6.1.0中文激活版下载

iMac小白

代码验证斯特林公式的准确性

fliter

什么是HTTP长轮询?

百度搜索:蓝易云

Linux 运维 前端 HTTP 云服务器

DR5插件加强版 for Mac(ps磨皮滤镜) v5.0中文版

iMac小白

Real Glow for mac( AE真实发光效果模拟插件) v1.0.0汉化版

iMac小白

安全SCDN可以应对攻击吗

德迅云安全杨德俊

耗时一个月我问遍了身边的大佬,零基础自学Java的路线,适用程序员入门&进阶,Java学习路线,2024新版

小明Java问道之路

华为视频走近《鲁豫有约一日行》,看技术如何赋能艺术创作

最新动态

业务架构师之路

执于业务

架构师 业务 业务架构师

推动海外云手机发展的几个因素

Ogcloud

云手机 海外云手机 云手机海外版 国外云手机

Proxyman Mac电脑最新破解激活(HTTP调试网络代理工具)

iMac小白

mac电池最大充电限制工具AlDente Pro for Mac v1.22.2激活版下载

iMac小白

聚道云软件连接器助力餐饮企业实现数字化管理

聚道云软件连接器

案例分享

Real Glow for mac( AE真实发光效果模拟插件) v1.0.0汉化版

iMac小白

阿里巴巴商品详情数据接口Python

tbapi

阿里巴巴 阿里巴巴API接口 阿里巴巴商品详情接口

VMware Fusion Pro 13 for Mac(VM虚拟机)中文破解版

iMac小白

Flicker Free for mac(专业AE视频去闪烁插件)兼容Big Sur v1.1.8激活版

iMac小白

@所有人 您需要的 幻兽帕鲁服务器搭建教程 已上线

六月的雨在InfoQ

阿里云 ECS 计算巢 幻兽帕鲁

行业首家!TCL实业通过国家大模型算法备案

Geek_2d6073

MySQL常用图形管理工具

小魏写代码

面试官:如何防止短信盗刷和短信轰炸?

王磊

Java 面试

行业知识图谱是什么

悦数图数据库

知识图谱

如何在春节实现弯道超车,你知道吗?

测吧(北京)科技有限公司

测试

网络安全训练营第 0 期 -- 毕业总结

楷鹏:)

基于BiLSTM-CRF模型的分词、词性标注、信息抽取任务的详解,侧重模型推导细化以及LAC分词实践

汀丶人工智能

自然语言处理 nlp 信息抽取 词性标注 分词算法

削峰有高招!评价QPS降低85%的背后逻辑-京东零售技术实践

京东零售技术

前端 移动开发 大促 黄金流程

Shell错误:/bin/bash^M: bad interpreter: No such file or directory

百度搜索:蓝易云

云计算 Linux 运维 windows 云服务器

Hadoop中的集群配置和使用技巧_DevOps & 平台工程_岑文初_InfoQ精选文章