NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

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:3955890

评论

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

合约开发 - DAPP开发 - swap开发

西安链酷科技

智能合约 去中心化网络 DAPP系统开发

dapp应用开发-DAO/DApp项目开发-NFT项目搭建

西安链酷科技

区块链 dapp开发 质押挖矿系统开发

为什么都在说实时数据传输?

RestCloud

ETL 实时数据 CDC

Spring扩展-BeanFactoryPostProcessor

智慧地球质押挖矿系统开发详情

l8l259l3365

公链项目开发 靠谱技术团队按期源码交付

西安链酷科技

区块链开发 公链开发

Infuse for Mac(音视频播放器) 7.6.1完整激活版

mac

苹果mac Windows软件 Infuse 多媒体播放软件

OpenHarmony Meetup深圳站招募令

OpenHarmony开发者

设计行业中如何保证图纸设计稿在数据传输中不会泄密

镭速

数据传输 文件传输

Mac电脑视频处理软件 VideoProc Converter 4K直装中文版

胖墩儿不胖y

Mac软件 视频处理工具 视频工具

【问题记录】Nginx使用域名作为upstream时,需要配置SNI

陈德伟

nginx 虚拟主机 proxy_pass SNI

链游开发、web3.0入局、加密货币游戏

西安链酷科技

gamefi Web3 游戏 链游开发

Java-WebSocket vs Netty-WebSocket 资源占用

FunTester

文心一言 VS 讯飞星火 VS chatgpt (110)-- 算法导论10.2 1题

福大大架构师每日一题

福大大架构师每日一题

9月《中国数据库行业分析报告》已发布,47页干货带你详览 MySQL 崛起之路!

墨天轮

MySQL 数据库 oceanbase 国产数据库 StoneDB

技术干货:解密最受欢迎的开源 Serverless 框架弹性技术实现

阿里巴巴云原生

阿里云 开源 Serverless 云原生

“套壳”OpenAI,注定消亡!全球首个 20 万字大模型发布丨 RTE 开发者日报 Vol.63

声网

人工智能 RTE 实时互动

CHM文件阅读器 CHM Viewer Star 免激活最新版

mac大玩家j

Mac软件 文件阅读器 文件管理软件

IDO官网预售 设置您的IDO:开始您的IDO开发之旅

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发 IDO代币预售

GitHub下载量从19暴涨到5W,这份架构师学习路线只用了一晚

程序员万金游

学习资料 #java #编程 #程序员 #学习

软件开发项目管理体系,支撑体系,测试体系文档大全

金陵老街

2.0版本佛萨奇系统开发(源码搭建)

V\TG【ch3nguang】

玩转HarmonyOS专项测试,轻松上架“五星”高品质应用

HarmonyOS开发者

关于企业如何替换FTP和加速FTP的问题

镭速

替换FTP 加速FTP

如何使用CSS和JavaScript实施暗模式?

互联网工科生

CSS JavaScript 暗模式

国内区块链技术团队、项目开发、包装宣传推广

西安链酷科技

推广计划 区块链技术开发

Spring扩展-Aware

专家观点∣小议事项会计兼评用友事项会计中台产品

用友BIP

事项会计 冶金

动力电池电芯正负极缺陷检测

矩视智能

深度学习 机器视觉

软件测试/测试开发丨ChatGPT自动生成基于PO的数据驱动测试框架

测试人

Python 人工智能 软件测试 数据驱动 ChatGPT

ido预售官网、私募网站开发 代币发售、智能合约项目 任意链任意机制模式

西安链酷科技

IDO代币预售

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