我最近在自学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 集群需要注意的事情:

  1. 运行整个 Hadoop 需要摸索的是配置文件如何设置;
  2. 更进一步是要看懂这些配置在 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


推荐阅读:
相关文章