热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

在VMware虚拟机中安装配置hadoop集群图文教程

原创文档,转载请保留原文url地址hadoop俗称分布式计算,最早作为一个开源项目,最初只是来源于谷歌的两份白皮书。然而正如十年前的Linux一样,虽然Hadoop最初十分简单,但随着近些年来大数据的兴起,其也获得了一个充分体现价值的舞台。这也正是业内普遍将

原创文档,转载请保留原文url地址

hadoop俗称分布式计算,最早作为一个开源项目,最初只是来源于谷歌的两份白皮书。然而正如十年前的Linux一样,虽然Hadoop最初十分简单,但随着近些年来大数据的兴起,其也获得了一个充分体现价值的舞台。这也正是业内普遍将Hadoop看做是下一个Linux的原因。

本文介绍基于多台vmware虚拟机来安装hadoop集群的过程及方法,通过这个小的集群让您在本地电脑上就可以研究hadoop的相关工作过程,有人会有疑问在小的虚拟机集群上研究的结果, 写的程序能否在大集群上工作正常?可以肯定的没问题的。

Hadoop的一个特性是线性增长特性,即当前数量情况下,处理时间是1, 若是数据量加倍, 后处理时间加倍, 若是在这种情况下, 处理能力也加倍则处理时间也是1.

正常情况hadoop需要较多的服务器才能搭建, 但是我们在家里学习如何去找那么服务器, 解决办法可以找几台pc机,在pc机上安装linux系统就可以了。

当然我们还有更简单的办法, 就是找一台高性能的电脑, 在电脑上安装虚拟机软件,里面创建若干台虚拟机, 然后让这些虚拟机构成一个小的内部局域网络,在这个网络上我们安装linux软件, java软件, 安装hadoop程序,我们就可以创建一个简单hadoop的研究系统, 进行软件的开发调试, 在这个小的分布式集群上开发的程序可以无缝移植到相同版本的hadoop(不同hadoop的版本兼容性不是很好, 特别是低版本同高版本, 他们的api也有些许变化)集群中。

如下是在笔者笔记本上构建的一个hadoop的虚拟机系统, 相关网络拓扑结构如下:

vmware虚拟机下hadoop集群安装过程

虚拟机0,机器名称:db, ip:192.168.186.10

虚拟机1,机器名称:red, ip:192.168.186.11

虚拟机2,机器名称:mongdb, ip:192.168.186.12

虚拟机3,机器名称:nginx,ip:192.168.186.13

如上图, 4台虚拟机通过一个虚拟的交换机互联, 开发机器也连接到这个虚拟交换机上, 虚拟的交换机同adsl相连接,这样整个系统都可以直接上网了。

下面是几个虚拟机的典型配置,如下:

vmware虚拟机下hadoop集群安装过程

Db的配置,如上, 这个机器的内存配置比较高, 这个机器是机器的master服务器, 需要较多的内存。 因此配置了1.3g内存。

下面是red的配置, mongdb及nginx的配置同这个机器配置相同,配置如下:

vmware虚拟机下hadoop集群安装过程

这个机器的配置同db机器配置相同, 仅仅是内存小了些, 这里内存是188m, 作为调试环境已经足够用了。

1. 网卡的Ip地址配置

采用静态ip配置方式, 防止重新启动后dhcp分配新的ip后,造成不必要的混乱。 配置如下:

vmware虚拟机下hadoop集群安装过程

2. Hosts文件配置

[root@db ~]# cat /etc/hosts

# Do not remove the following line, or various programs

# that require network functionality will fail.

127.0.0.1               localhost.localdomain localhost

::1             localhost6.localdomain6 localhost6

192.168.186.10  db

192.168.186.11  red

192.168.186.12  mongdb

192.168.186.13  nginx

vmware虚拟机下hadoop集群安装过程

需要确保每一台机器的 hosts文件配置如上图所示。

简便配置方法, 在配置一台机器后, 可以编写脚本实现自动将hosts文件复制到多台机器上。脚本如下:

[root@db ~]# cat update_hosts.sh 

#!/bin/sh

for host in red mongdb nginx;do

    echo $host

    scp  /etc/hosts  root@${host}:/etc/

done

[root@db ~]# 

主要这个脚本要在root下编写, 然后赋予可以执行的权限(chmod a+x *.sh), 然后在root权限下执行。脚本会自动完成hosts文件的复制工作。

上面过程完成后, 分别登录每一台机器, 把每一个服务器都ping一下, 若是不通,在仔细检查一下。

3. Java配置

在每个虚拟机服务器上检查是否正确安装了java, 是否配置了java的环境变量等

vmware虚拟机下hadoop集群安装过程

如上图, 1处输入  java -version, 然后应该输出类似2处的输出,标识java已经正确安装了

同时采用3处的命令, env | grep JAVA_HOME  来检查环境变量是否正确配置了, 若是没有配置java的环境变量则需要进行配置

若是您java还有安装请 用下面命令安装 

yum install java-1.7.0-openjdk

然后用下面命令配置环境变量。

vi /etc/profile

打开编辑的文件后, 在文件最后面添加如下内容

JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.25/jre

JRE_HOME=/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.25/jre

PATH=$PATH:$JAVA_HOME/bin

CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

export JAVA_HOME JRE_HOME PATH CLASSPATH

保存退出, 最后运行下面命令, 使配置生效

source  /etc/profile

然后再次测试上面的过程, 看看是否符合相关需要。如果您还没做到到网络搜索一下吧。

4. ssh免登录功能配置

Hadoop通过ssh进行相关管理工作,主要是hadoop的管理脚本通过ssh远程对各个服务器进行相关的管理,包括启动,停止等。 

关于如何配置ssh的免密码登录,请参考下面文章的相关部分:

Hadoop1.2.1 Pseudo-Distributed伪分布模式配置

http://www.iigrowing.cn/hadoop1-2-1-pseudo-distributed-wei-fen-bu-mo-shi-pei-zhi.html

5. 关闭相关的防火墙

Hadoop程序在工作过程中,各个节点间有很多程序要进行通信,因此我们需要对防火墙做些处理, 保证这些访问能正常工作。 我们这里采用最简单的办法是关闭研究用集群虚拟机的全部防火墙.

在虚拟机中,启动setup程序

vmware虚拟机下hadoop集群安装过程

选择防火墙工作这一项

vmware虚拟机下hadoop集群安装过程

在下面的对话框中, 选择如下特殊颜色的区域的相关选项, 最后选择ok推出

vmware虚拟机下hadoop集群安装过程

6. 下载hadoop程序

相关过程略。

1. 在虚拟机db上下载hadoop程序, 然后解压缩到 /work/apps/hadoop目录, 相信你会这个操作, 不行百度一下啦。

vmware虚拟机下hadoop集群安装过程

2. 配置hadoop的环境变量

进入conf目录, 编辑hadoop-env.sh 文件, 

vmware虚拟机下hadoop集群安装过程

修改java home的配置

vmware虚拟机下hadoop集群安装过程

JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.25/jre

注意这个配置,要同前面配置java的时候配置相同。

3. 创建目录

Name目录存放namenode的hdfs目录及文件的元数据。

Data目录存放datanode的数据

4. 配置core-site.xml 文件

vi  core-site.xml 

vmware虚拟机下hadoop集群安装过程

  hadoop.tmp.dir                // 临时文件目录

  /work/apps/hadoop/tmp

  A base for other temporary directories.

        fs.default.name         // namenode的服务器的地址

        hdfs://db:9000

  fs.trash.interval               // 回收站的文件间隔时间

  1440

  Number of minutes between trash checkpoints.

  If zero, the trash feature is disabled.

 

如何确定这个文件有哪些配置可以填写及相关含义?

这个文件对应一个默认的配置文件,在:

vmware虚拟机下hadoop集群安装过程

打开这个文件如下:

vmware虚拟机下hadoop集群安装过程

文件可以配置项目含义都在文件中了, 大家慢慢参考。 注意不是在这个文件中配置的项目, 若是写在了这里了, 对系统没有任何作用, 当然配置也是无效的。

5. 配置hdfs-site.xml 

输入下面命令vi hdfs-site.xml 

vmware虚拟机下hadoop集群安装过程

注意上面的特别注意的区域相关配置。

        dfs.name.dir         // namenode存储数据的数据的地方

        /work/apps/hadoop/name    // 这里可以放多个文件的列表, 用逗号分隔, 系统会同步把数据写到这些目录中后,才返回确保元数据的安全。建议这些目录在不同的物理磁盘,这样可以提高系统的io性能。另外,最好能通过nfs等方式把数据写到别的服务器一份或者若干份,这样更会确保元数据完好无误的被保留。

        dfs.data.dir    // datanode存放数据的地方

        /work/apps/hadoop/data  // 这里可以存放用逗号分隔的磁盘目录列表,系统在存储数据时会把不同的块数据轮转的方式分别放到不同目录中。一般一个文件的块1放到目录A, 块2则放目录b等等,这样可以充分提高系统的性能。

        dfs.replication   // 文件的副本个数

        3

6. 配置mapred-site.xml 文件

vi mapred-site.xml 

vmware虚拟机下hadoop集群安装过程

    mapred.job.tracker   // 设置job tracker

    db:9001

7. 配置masters和slaves 文件

查看下面两个文件的内容,如下:

vmware虚拟机下hadoop集群安装过程

masters文件中存放,secondary server的配置

vmware虚拟机下hadoop集群安装过程

slaves中存放的是  datanode,tasktractor的服务器的列表

这个两个文件不需要分发给 slaves节点, 但是我们这里简便处理, 在脚本中没有排除这些文件,可以通过一定的配置文件制定相关位置等。

1. 分发配置好的hadoop系统到各个服务器中

创建如下脚本程序

[root@db apps]# vi   scp_hadoop.sh 

脚本内容如下:

#!/bin/sh

for host in red  mongdb nginx;do

    echo $host

    scp  -r /work/apps/hadoop  sch@${host}:/work/apps/

Done

保存退出后, 修改文件的可执行属性 (chmod a+x *.sh)

然后在合适的帐号下执行上述脚本, 脚本将 已经配置好的hadoop程序拷贝到其他服务器中。

2. 启动hadoop系统

进入hadoop的目录,

执行下面命令, 格式化hadoop的文件系统

bin/hadoop namenode -format  格式化namenode的文件系统, 如下图

vmware虚拟机下hadoop集群安装过程

然后输入bin/start-all.sh 命令, 启动hadoop系统,相关记录如下图:

vmware虚拟机下hadoop集群安装过程

3. 验证hadoop的启动结果

输入如下命令, 坚持启动的java进程

ps -ef | grep java |   awk ‘{print $1, $9,$11 }’ 

vmware虚拟机下hadoop集群安装过程

这里由于安装的openjdk版本问题,没有安装好jps进程,这样只好用上面的命令临时检查一下java的进程了。

验证其他服务器的java运行情况,如下:

vmware虚拟机下hadoop集群安装过程

如上图,不同区域显示了登陆不同服务器后验证java进程的结果。

在整个过程中,发生了一些错误通过检查相关日志, 然后进行专项的处理后, 最后调试通过。
Hadoop毕竟不是普通的程序, 不可能仅仅简单就通过, 需要认真仔细的研究,练习,不断实践。 最重要的在调试工作提高自己的工作能力,提高对hadoop的理解。


推荐阅读
  • 本文探讨了Web开发与游戏开发之间的主要区别,旨在帮助开发者更好地理解两种开发领域的特性和需求。文章基于作者的实际经验和网络资料整理而成。 ... [详细]
  • 本文将详细介绍如何在ThinkPHP6框架中实现多数据库的部署,包括读写分离的策略,以及如何通过负载均衡和MySQL同步技术优化数据库性能。 ... [详细]
  • 全能终端工具推荐:高效、免费、易用
    介绍一款备受好评的全能型终端工具——MobaXterm,它不仅功能强大,而且完全免费,适合各类用户使用。 ... [详细]
  • 本文深入探讨了MySQL中常见的面试问题,包括事务隔离级别、存储引擎选择、索引结构及优化等关键知识点。通过详细解析,帮助读者在面对BAT等大厂面试时更加从容。 ... [详细]
  • 性能测试工具的选择与应用
    本文探讨了性能测试工具的重要性及其在软件测试中的作用,重点介绍了选择合适性能测试工具的考量因素,并对几种常用的性能测试工具进行了对比分析。 ... [详细]
  • Nginx 反向代理与负载均衡实验
    本实验旨在通过配置 Nginx 实现反向代理和负载均衡,确保从北京本地代理服务器访问上海的 Web 服务器时,能够依次显示红、黄、绿三种颜色页面以验证负载均衡效果。 ... [详细]
  • 深入解析Serverless架构模式
    本文将详细介绍Serverless架构模式的核心概念、工作原理及其优势。通过对比传统架构,探讨Serverless如何简化应用开发与运维流程,并介绍当前主流的Serverless平台。 ... [详细]
  • Symfony是一个功能强大的PHP框架,以其依赖注入(DI)特性著称。许多流行的PHP框架如Drupal和Laravel的核心组件都基于Symfony构建。本文将详细介绍Symfony的安装方法及其基本使用。 ... [详细]
  • 本文详细介绍了如何在云服务器上配置Nginx、Tomcat、JDK和MySQL。涵盖从下载、安装到配置的完整步骤,帮助读者快速搭建Java Web开发环境。 ... [详细]
  • 主调|大侠_重温C++ ... [详细]
  • 本文详细介绍了Java中实现异步调用的多种方式,包括线程创建、Future接口、CompletableFuture类以及Spring框架的@Async注解。通过代码示例和深入解析,帮助读者理解并掌握这些技术。 ... [详细]
  • 远程过程调用(RPC)是一种允许客户端通过网络请求服务器执行特定功能的技术。它简化了分布式系统的交互,使开发者可以像调用本地函数一样调用远程服务,并获得返回结果。本文将深入探讨RPC的工作原理、发展历程及其在现代技术中的应用。 ... [详细]
  • 本文档汇总了Python编程的基础与高级面试题目,涵盖语言特性、数据结构、算法以及Web开发等多个方面,旨在帮助开发者全面掌握Python核心知识。 ... [详细]
  • 深入解析BookKeeper的设计与应用场景
    本文介绍了由Yahoo在2009年开发并于2011年开源的BookKeeper技术。BookKeeper是一种高效且可靠的日志流存储解决方案,广泛应用于需要高性能和强数据持久性的场景。 ... [详细]
  • Spring Cloud因其强大的功能和灵活性,被誉为开发分布式系统的‘一站式’解决方案。它不仅简化了分布式系统中的常见模式实现,还被广泛应用于企业级生产环境中。本书内容详实,覆盖了从微服务基础到Spring Cloud的高级应用,适合各层次的开发者。 ... [详细]
author-avatar
lucy719674
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有