如何在本地搭建hadoop集群?
我最近在自学Hadoop和spark等分散式工具,想搭一个有三个节点的简单集群,但是没有这么多机子,如果想要在本地搭建,有什么比较好解决方案呢?
之前曾在自己的电脑上搭建过 Hadoop 完全分散式集群,幸好笔记还在。贴在这里供你参考:
用 Apache Hadoop 来搭建第一个 Hadoop 集群环境,手头有的资源是三台虚拟机。
Hadoop 的计算集群有两种模式, Map Reduce 1 和 YARN, 这里选取 YARN 作为此次搭建的模式。
预装软体:
1 - centos : centos00,centos01,centos02 已经准备完毕
2 - JDK: JDK1.8 已经安装完毕
3 - Hadoop User: 每一个服务,都应该用单独的账户管理起来,目前可以用 SparkAdmin
4 - 安装 Hadoop : 在合理的路径下 /usr/local 安装 Hadoop
搭建 Hadoop 集群需要注意的事情:
- 运行整个 Hadoop 需要摸索的是配置文件如何设置;
- 更进一步是要看懂这些配置在 Hadoop 运行的时候,是怎么发挥作用的。Hadoop 是通过 Java 编写的,Java 在利用这些配置文件的时候,以什么样的方式读取这些文件,并且运行时刻还允许这些文件的改写。
&
&
&
&
&yarn.nodemanager.local-dirs&
&/disk1/nm-local-dir,/disk2/nm-local-dir&
&true&
&
&
&yarn.nodemanager.aux-services&
&mapreduce.shuffle&
&
&
&yarn.nodemanager.resource.memory-mb&
&8192&
&
&
&
&
&
&
&mapred.child.java.opts&
&-Xmx400m&
&
&
&
虽然没有在 yarn 的启动脚本 start-yarn.sh 中使用到 mapred-site.xml, 但是 yarn 调用 nodemanager 来运行 JVM 的时候,还需要 mapred-site.xml 中这份 JVM 的配置。
如下图所示,重要的 yarn 特性列表:
详细步骤列表:
安装
SSH configuration
Hadoop User
Hadoop User Directory
Hadoop Installation
Java Installation
Java Home
Hadoop Install Home
Hadoop 配置
hadoop-env.sh
mapred-env.sh
yarn-env.sh
core-site.xml
hdfs-site.xml
mapred-site.xml
yarn-site.xml
slaves
Hadoop 运行
start-dfs.sh
hadoop fs -format
start-yarn.sh
搭建过程如下:
1. 在三台虚拟机上,添加 /hadoop 目录,将所有人设置为 SparkAdmin.
2. 将 hadoop 安装文件放入每台虚拟机新建的目录 /hadoop 下
3. 在 centos00 上配置 hadoop 系列配置文件。
4. 拓扑: centos00 - master namenode, yarn resource manager node
centos01 centos02 data node 和 task node 的托管伺服器
5. 配置 java hadoop home 目录
6. 启动 start-dfs.sh start-yarn.sh
7. hadoop fs -format 浏览 HDFS 文件系统
8. 安装 Hive
第 1,2 步完成。
第 3 步需要考究。防止配错,先做一份备份。2.7.7 之后,hadoop 的配置文件目录是 $HADOOP_HOME/etc/hadoop.
需要配置的文件有:
1. core-site.xml
2. hdfs-site.xml
3. yarn-site.xml
4. mapred-site.xml
5. slaves
6. hadoop-env.sh
7. yarn-env.sh
## core-site.xml
&
&
&fs.defaultFS&
&hdfs://centos00:9000&
&true&
&
&
## hdfs-site.xml
&
&
&dfs.name.dir&
&file:///hadoop/hadoop-2.7.7/namenonde&
&true&
&
&
&dfs.data.dir&
&file:///hadoop/hadoop-2.7.7/datanode&
&true&
&
&
## mapred-site.xml
&
&
&mapred.child.java.opts&
&-Xmx200m&
&
&
&mapred.tasktracker.map.tasks.maximum&
&2&
&
&
&mapred.tasktracker.reduce.tasks.maximum&
&2&
&
&
## yarn-site.xml
&
&
&
&yarn.resourcemanager.address&
&localhost:8032&
&
&
&yarn.nodemanager.local-dirs&
&/hadoop/hadoop-2.7.7/datanode&
&
&
&yarn.nodemanager.aux-services&
&mapreduce_shuffle&
&
&
&yarn.nodemanager.resource.memory-mb&
&512&
&
&
** 第三步非常重要的一环是:
将配置文件同步到所有列在 slaves 中的伺服器上去。 否则即使 namenode 能顺利启动,但是依然不会看到有 data node 运行在集群环境中。
通过 http://master-node:50070 web UI 可以看到更多详细的信息。 如果 slaves 中列的伺服器,没有与 name node 中同样的配置文件,这些 data node 无法启动,也无法加入集群。
之前也写过,正确的启动 HDFS 的顺序是:
1. 先格式化 namenode: hdfs namenode -format
2. 接著启动 namenode 以及 data node: start-dfs.sh
3. 运行 jps 检查是否 namenode , datanode 都已经完成启动
[SparkAdmin@centos00 hadoop]$ jps
3617 SecondaryNameNode
14515 Jps
14215 ResourceManager
3022 NameNode
[SparkAdmin@centos00 hadoop]$ ssh centos01
Last login: Sun Oct 28 15:29:02 2018 from centos00
[SparkAdmin@centos01 ~]$ jps
5440 DataNode
6624 NodeManager
6791 Jps
两个站点:
http://master-node:50070
这是 HDFS, Name Node 和 Data Node 的状态看板
http://master-node:8088
这是 YARN, Resource Manager, Application Master 的应用运行状态看板
更新:Docker直接pull一个更方便。。。
虚拟机。
不过前提就不对。学hadoop和spark完全就不需要搭集群。撘集群是非常浪费时间的。
单机部署加阅读源码才是学习的正确道路。
ps: 当然单机也要搭在虚拟机里。
1c1g内存的虚拟机安装apache hadoop就可以,笔记本机器有8g内存就差不多了;
安装文档参见linode的博文,关于内存参数配置和步骤还是写很好的。
How to Install and Set Up a 3-Node Hadoop Cluster
最快的方法:
- 安装docker, 下载相关的docker镜像
- 有足够的主机也可以安装CDH
内存够的话开几个虚拟机呗. 内存不够可以买几个VPS. 或者买内存.
本机的话可以装虚拟机,搭建个伪分散式的集群
用vmware虚拟机虚拟出几台机器,然后部署hadoop
推荐阅读: