热门标签 | 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的理解。


推荐阅读
  • 深入解析:存储技术的演变与发展
    本文探讨了从单机文件系统到分布式文件系统的存储技术发展过程,详细解释了各种存储模型及其特点。 ... [详细]
  • 我的读书清单(持续更新)201705311.《一千零一夜》2006(四五年级)2.《中华上下五千年》2008(初一)3.《鲁滨孙漂流记》2008(初二)4.《钢铁是怎样炼成的》20 ... [详细]
  • 精选10款Python框架助力并行与分布式机器学习
    随着神经网络模型的不断深化和复杂化,训练这些模型变得愈发具有挑战性,不仅需要处理大量的权重,还必须克服内存限制等问题。本文将介绍10款优秀的Python框架,帮助开发者高效地实现分布式和并行化的深度学习模型训练。 ... [详细]
  • 本文详细介绍了如何搭建一个高可用的MongoDB集群,包括环境准备、用户配置、目录创建、MongoDB安装、配置文件设置、集群组件部署等步骤。特别关注分片、读写分离及负载均衡的实现。 ... [详细]
  • 本文详细介绍了如何在ARM架构的目标设备上部署SSH服务端,包括必要的软件包下载、交叉编译过程以及最终的服务配置与测试。适合嵌入式开发人员和系统集成工程师参考。 ... [详细]
  • 本文详细探讨了在Web开发中常见的UTF-8编码问题及其解决方案,包括HTML页面、PHP脚本、MySQL数据库以及JavaScript和Flash应用中的乱码问题。 ... [详细]
  • 【转】强大的矩阵奇异值分解(SVD)及其应用
    在工程实践中,经常要对大矩阵进行计算,除了使用分布式处理方法以外,就是通过理论方法,对矩阵降维。一下文章,我在 ... [详细]
  • Python学习day3网络基础之网络协议篇
    一、互联网协议连接两台计算机之间的Internet实际上就是一系列统一的标准,这些标准称之为互联网协议,互联网的本质就是一系列网络协议。二、为什么要有互联网协议互联网协议就相当于计 ... [详细]
  • centos 7.0 lnmp成功安装过程(很乱)
    下载nginx[rootlocalhostsrc]#wgethttp:nginx.orgdownloadnginx-1.7.9.tar.gz--2015-01-2412:55:2 ... [详细]
  • MongoDB核心概念详解
    本文介绍了NoSQL数据库的概念及其应用场景,重点解析了MongoDB的基本特性、数据结构以及常用操作。MongoDB是一个高性能、高可用且易于扩展的文档数据库系统。 ... [详细]
  • 本文详细介绍了 Java 网站开发的相关资源和步骤,包括常用网站、开发环境和框架选择。 ... [详细]
  • 本文详细介绍了 Spark 中的弹性分布式数据集(RDD)及其常见的操作方法,包括 union、intersection、cartesian、subtract、join、cogroup 等转换操作,以及 count、collect、reduce、take、foreach、first、saveAsTextFile 等行动操作。 ... [详细]
  • 华为捐赠欧拉操作系统,承诺不推商用版
    华为近日宣布将欧拉开源操作系统捐赠给开放原子开源基金会,并承诺不会推出欧拉的商用发行版。此举旨在推动欧拉和鸿蒙操作系统的全场景融合与生态发展。 ... [详细]
  • 2020年9月15日,Oracle正式发布了最新的JDK 15版本。本次更新带来了许多新特性,包括隐藏类、EdDSA签名算法、模式匹配、记录类、封闭类和文本块等。 ... [详细]
  • 本文详细介绍了Java代码分层的基本概念和常见分层模式,特别是MVC模式。同时探讨了不同项目需求下的分层策略,帮助读者更好地理解和应用Java分层思想。 ... [详细]
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社区 版权所有