前言

本文搭建了一个由三节点(master、slave1、slave2)构成的Hadoop完全分布式集群(区别单节点伪分布式集群),并通过Hadoop分布式计算的一个示例测试集群的正确性。

本文集群三个节点基于三台虚拟机进行搭建,节点安装的操作系统为Centos7(yum源),Hadoop版本选取为2.8.0。作者也是初次搭建Hadoop集群,其间遇到了很多问题,故希望通过该博客让读者避免。

实验过程

1、基础集群的搭建

目的:获得一个可以互相通信的三节点集群

下载并安装VMware WorkStation Pro(支持快照,方便对集群进行保存)下载地址,产品激活序列号网上自行查找。

下载CentOS7镜像,下载地址

使用VMware安装master节点(稍后其他两个节点可以通过复制master节点的虚拟机文件创建)。

2、集群网络配置

目的:为了使得集群既能互相之间进行通信,又能够进行外网通信,需要为节点添加两张网卡(可以在虚拟机启动的时候另外添加一张网卡,即网络适配器,也可以在节点创建之后,在VMware设置中添加)。

两张网卡上网方式均采用桥接模式,外网IP设置为自动获取(通过此网卡进行外网访问,配置应该按照你当前主机的上网方式进行合理配置,如果不与主机通信的话可以采用NAT上网方式,这样选取默认配置就行),内网IP设置为静态IP。

本文中的集群网络环境配置如下:

master内网IP:192.168.1.100

slave1内网IP:192.168.1.101

slave2内网IP:192.168.1.102

设置完后,可以通过ping进行网络测试

注意事项:通过虚拟机文件复制,在VMware改名快速创建slave1和slave2后,可能会产生网卡MAC地址重复的问题,需要在VMware网卡设置中重新生成MAC,在虚拟机复制后需要更改内网网卡的IP。

每次虚拟机重启后,网卡可能没有自动启动,需要手动重新连接。

3、集群SSH免密登陆设置

目的:创建一个可以ssh免密登陆的集群

3.1  创建hadoop用户

为三个节点分别创建相同的用户hadoop,并在以后的操作均在此用户下操作,操作如下:

$su -

#useradd -m hadoop

#passwd hadoop

为hadoop添加sudo权限

#visudo

在该行root ALL=(ALL) ALL下添加hadoop ALL=(ALL) ALL保存后退出,并切换回hadoop用户

#su hadoop

注意事项:三个节点的用户名必须相同,不然以后会对后面ssh及hadoop集群搭建产生巨大影响

3.2  hosts文件设置

为了不直接使用IP,可以通过设置hosts文件达到ssh  slave1这样的的效果(三个节点设置相同)

$sudo vim /etc/hosts

在文件尾部添加如下行,保存后退出:

192.168.1.100  master

192.168.1.101  slave1

192.168.1.102  slave2

注意事项:不要在127.0.0.1后面添加主机名,如果加了master,会造成后面hadoop的一个很坑的问题,在slave节点应该解析出masterIP的时候解析出127.0.0.1,造成hadoop搭建完全正确,但是系统显示可用节点一直为0。

3.3  hostname修改

centos7默认的hostname是localhost,为了方便将每个节点hostname分别修改为master、slave1、slave2(以下以master节点为例)。

$sudo hostnamectl set-hostname master

重启terminal,然后查看:$hostname

3.3  ssh设置

下面以master节点ssh免密登陆slave节点设置为例,进行ssh设置介绍(以下操作均在master机器上操作):

首先生成master的rsa密钥:$ssh-keygen -t rsa

设置全部采用默认值进行回车

将生成的rsa追加写入授权文件:$cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

给授权文件权限:$chmod 600  ~/.ssh/authorized_keys

进行本机ssh测试:$ssh maste r正常免密登陆后所有的ssh第一次都需要密码,此后都不需要密码

将master上的authorized_keys传到slave1

sudo scp ~/.ssh/id_rsa.pub hadoop@slave1:~/

登陆到slave1操作:$ssh slave1输入密码登陆

$cat ~/id_rsa.pub >> ~/.ssh/authorized_keys

修改authorized_keys权限:$chmod 600  ~/.ssh/authorized_keys

退出slave1:$exit

进行免密ssh登陆测试:$ssh slave1

4、java安装

目的:hadoop是基于Java的,所以要安装配置Java环境(三个节点均需要操作,以下以master节点为例)

下载并安装:$sudo yum install java-1.8.0-openjdk  java-1.8.0-openjdk-devel

验证是否安装完成:$java -version

配置环境变量,修改~/.bashrc文件,添加行: export JAVA_HOME=/usr/lib/jvm/java-1.8.0

使环境变量生效:$source ~/.bashrc

5、Hadoop安装配置

目的:获得正确配置的完全分布式Hadoop集群(以下操作均在master主机下操作)

5.1  Hadoop安装

首先在master节点进行hadoop安装配置,之后使用scp传到slave1和slave2。

下载Hadoop二进制源码至master,下载地址,并将其解压在~/ 主目录下

$tar -zxvf ~/hadoop-2.8.1.tar.gz -C ~/

$mv ~/hadoop-2.8.1/* ~/hadoop/

注意事项:hadoop有32位和64位之分,官网默认二进制安装文件是32位的,但是本文操作系统是64位,会在后面hadoop集群使用中产生一个warning但是不影响正常操作。

5.2  Hadoop的master节点配置

配置hadoop的配置文件core-site.xml  hdfs-site.xml  mapred-site.xml  yarn-site.xml  slaves(都在~/hadoop/etc/hadoop文件夹下)

$cd ~/hadoop/etc/hadoop

$vim core-site.xml其他文件相同,以下为配置文件内容:

1.core-site.xml  

<configuration>
  <property>
    <name>fs.default.name</name>
    <value>hdfs://master:9000</value>
  </property>
  <property>
    <name>hadoop.tmp.dir</name>
    <value>file:/home/hadoop/hadoop/tmp</value>
  </property>
</configuration>

2.hdfs-site.xml 

<configuration>
  <property>
    <name>dfs.replication</name>
    <value>2</value>
  </property>
  <property>
    <name>dfs.namenode.name.dir</name>
    <value>file:/home/hadoop/hadoop/tmp/dfs/name</value>
  </property>
  <property>
    <name>dfs.datanode.data.dir</name>
    <value>file:/home/hadoop/hadoop/tmp/dfs/data</value>
  </property>
  <property>
    <name>dfs.namenode.secondary.http-address</name>
    <value>master:9001</value>
  </property>
</configuration>

3.mapred-site.xml  

<configuration>
  <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>
</configuration>

4.yarn-site.xml

<configuration>
  <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>master</value>
  </property>
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
  </property>
  <property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
  </property>
  <property>
    <name>yarn.log-aggregation.retain-seconds</name>
    <value>604800</value>
  </property>
</configuration>

5.slaves

slave1
slave2

5.3  Hadoop的其他节点配置

此步骤的所有操作仍然是在master节点上操作,以master节点在slave1节点上配置为例

复制hadoop文件至slave1:$scp -r ~/hadoop hadoop@slave1:~/

5.4  Hadoop环境变量配置

配置环境变量,修改~/.bashrc文件,添加行(每个节点都需要此步操作,以master节点为例):

#hadoop environment vars
export HADOOP_HOME=/home/hadoop/hadoop
export HADOOP_INSTALL=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin

使环境变量生效:$source ~/.bashrc

6、Hadoop启动

格式化namenode:$hadoop namenode -format

启动hadoop:$start-all.sh

master节点查看启动情况:$jps

slave1节点查看启动情况:$jps

slave2节点查看启动情况:$jps

Web浏览器输入127.0.0.1:50070,查看管理界面

7、Hadoop集群测试

目的:验证当前hadoop集群正确安装配置

本次测试用例为利用MapReduce实现wordcount程序

生成文件testWordCount:$echo "My name is Xie PengCheng. This is a example program called WordCount, run by Xie PengCheng " >> testWordCount

创建hadoop文件夹wordCountInput:$hadoop fs -mkdir /wordCountInput

将文件testWordCount上传至wordCountInput文件夹:$hadoop fs -put testWordCount /wordCountInput

执行wordcount程序,并将结果放入wordCountOutput文件夹:$hadoop jar ~/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.1.jar wordcount /wordCountInput /wordCountOutput

注意事项:/wordCountOutput文件夹必须是没有创建过的文件夹

查看生成文件夹下的文件:$hadoop fs -ls /wordCountOutput

在output/part-r-00000可以看到程序执行结果:$hadoop fs -cat /wordCountOutpart-r-00000

嗯嗯,作者就叫谢鹏程。

Hadoop完全分布式环境搭建的更多相关文章

  1. 【转】Hadoop HDFS分布式环境搭建

    原文地址  http://blog.sina.com.cn/s/blog_7060fb5a0101cson.html Hadoop HDFS分布式环境搭建 最近选择给大家介绍Hadoop HDFS系统 ...

  2. 【Hadoop离线基础总结】CDH版本Hadoop 伪分布式环境搭建

    CDH版本Hadoop 伪分布式环境搭建 服务规划 步骤 第一步:上传压缩包并解压 cd /export/softwares/ tar -zxvf hadoop-2.6.0-cdh5.14.0.tar ...

  3. hadoop ——完全分布式环境搭建

    hadoop 完全分布式环境搭建 1.虚拟机角色分配: 192.168.44.184 hadoop02 NameNode/DataNode ResourceManager/NodeManager 19 ...

  4. CentOS7下Hadoop伪分布式环境搭建

    CentOS7下Hadoop伪分布式环境搭建 前期准备 1.配置hostname(可选,了解) 在CentOS中,有三种定义的主机名:静态的(static),瞬态的(transient),和灵活的(p ...

  5. Hadoop完全分布式环境搭建(二)——基于Ubuntu16.04设置免密登录

    在Windows里,使用虚拟机软件Vmware WorkStation搭建三台机器,操作系统Ubuntu16.04,下面是IP和机器名称. [实验目标]:在这三台机器之间实现免密登录 1.从主节点可以 ...

  6. 《OD大数据实战》Hadoop伪分布式环境搭建

    一.安装并配置Linux 8. 使用当前root用户创建文件夹,并给/opt/下的所有文件夹及文件赋予775权限,修改用户组为当前用户 mkdir -p /opt/modules mkdir -p / ...

  7. Hadoop伪分布式环境搭建+Ubuntu:16.04+hadoop-2.6.0

    Hello,大家好 !下面就让我带大家一起来搭建hadoop伪分布式的环境吧!不足的地方请大家多交流.谢谢大家的支持 准备环境: 1, ubuntu系统,(我在16.04测试通过.其他版本请自行测试, ...

  8. hadoop全分布式环境搭建

    本文主要介绍基本的hadoop的搭建过程.首先说下我的环境准备.我的笔记本使用的是Windows10专业版,装的虚拟机软件为VMware WorkStation Pro,虚拟机使用的系统为centos ...

  9. Hadoop完全分布式环境搭建(四)——基于Ubuntu16.04安装和配置Hadoop大数据环境

    [系统环境] [安装配置概要] 1.上传hadoop安装文件到主节点机器 2.给文件夹设置权限 3.解压 4.拷贝到目标文件夹 放在/opt文件夹下,目录结构:/opt/hadoop/hadoop-2 ...

随机推荐

  1. javascript中slice() splice() concat()操作数组的方法

    这三个操作数组,哪个返回一个新数组呢.上代码 splice()方法,用于插入,删除和替换. var arr=[1,2,3,4,5]; var arr1=arr.splice(1,3); console ...

  2. 25个最基本的JavaScript面试问题及答案

    1.使用 typeof bar === "object" 来确定 bar 是否是对象的潜在陷阱是什么?如何避免这个陷阱? 尽管 typeof bar === "objec ...

  3. [01] Java语言的基本认识

    0.写在前面的话 我们都知道在计算机的底层,它是识别二进制的,也就是说,计算机只能认识0和1.这主要是因为电路的逻辑只有两种状态,所以只需要0和1两个数字就可以表示低电平和高电平.而计算机是由数不清的 ...

  4. 鸟哥Linux学习笔记06

    Linux 系统常用的压缩命令 1,*.Z compress程序压缩的文件,这个已经很老了,几乎不再使用,因此不再介绍. 2,gzip应用最广泛的压缩命令.目前gzip可以解开compress.zip ...

  5. Linux Ubuntu从零开始部署web环境及项目-----搭建ssh环境(一)

    linux搭建ssh环境 1,用户登录 成功输入用户名和密码后 进入Ubuntu界面  2,配置网络 参考:http://blog.csdn.net/liu782726344/article/deta ...

  6. Redis的安装以及在项目中使用Redis的一些总结和体会

    第一部分:为什么我的项目中要使用Redis 我知道有些地方没说到位,希望大神们提出来,我会吸取教训,大家共同进步! 注册时邮件激活的部分使用Redis 发送邮件时使用Redis的消息队列,减轻网站压力 ...

  7. ArrayList , Vector 数组集合

    ArrayList 的一些认识: 非线程安全的动态数组(Array升级版),支持动态扩容 实现 List 接口.底层使用数组保存所有元素,其操作基本上是对数组的操作,允许null值 实现了 Randm ...

  8. ubuntu环境配置eclipse+opencv

    blockquote { direction: ltr; color: rgb(0, 0, 0) } blockquote.western { font-family: "Liberatio ...

  9. Python打印乘法口诀表

    思路:第一行:1*1,第二行:1*2.,2*2,第三行:1*3,2*3,3*3-- 最后一行:1*9,2*9,3*9,-9*9,以此类推,可以设2个数:i,j:让 i 从1循环到9,让 j 从1到小于 ...

  10. php基础运算符语句

    /* 多行注释 *///常用数据类型//int string double/float bool//变量的定义$a = 123;$b = "123";$c = '456';//$d ...