软件世界网 购物 网址 三丰软件 | 小说 美女秀 图库大全 游戏 笑话 | 下载 开发知识库 新闻 开发 图片素材
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
移动开发 架构设计 编程语言 Web前端 互联网
开发杂谈 系统运维 研发管理 数据库 云计算 Android开发资料
  软件世界网 -> 云计算 -> 搭建6个节点的Hadoop集群 -> 正文阅读

[云计算]搭建6个节点的Hadoop集群



搭建6个节点的Hadoop集群



节点



在实验室192.168.100.20:8006,用户名:root,密码:**,申请了6个节点,分别是:
192.168.101.44  #主节点
192.168.101.45  #节点1
192.168.101.46  #节点2
192.168.101.47  #节点3
192.168.101.48  #节点4
192.168.101.49  #节点4

网络基本配置
255.255.254.0    #子网掩码
192.168.100.1    #网关
233.6.6.6        #使用阿里的DNS或者233.8.8.8

各个节点的初始用户名均是:zhujunpeng,密码均是:***,在配置hadoop集群时,新创建了hadoop用户,下面会讲这个过程。

安装操作系统



安装操作系统(centos 7)中注意三点:
  1. 请安装Development版本的操作系统,我安装的是Centos 7的Development版本。
  2. 请使用固定ip地址,因为整个集群将使用网络进行通讯,ip地址是他们进行通讯的关键。
  3. 在配置网络的过程中采用的是 muanul(手动设置),不要使用动态分配,这样不利用集群节点之间的通信

工具介绍



在整个操作的过程中未了方便,我将使用两种工具:
  • SecureCRT,该工具能够方便的与Linux系统进行交互,不用每次都在不同的虚拟机界面下切换,方便管理,如果没有呀用过该工具,请自行谷歌安装并学会使用,该工具需要破解,网上有很多破解的教程。
  • WinSCP,这是一个FTP工具,用于不通操作系统时间的文件传输,当然在我的应用中只涉及到了Windows向Centos系统传输已经下载好的hadoop安装包和JDK,传输速度快。

创建hadoop用户



如果你安装hadoop时不是采用“hadoop”用户,那么需要增加一个名为hadoop的用户(安装集群时形成习惯,每个集群都是用自己的用户名和密码,方便管理),密码也为hadoop,首先打开终端,在终端中输入:
su  #切换成root用户登录

输入密码之后,进入root权限,接着在终端中输入:
useradd -m hadoop -G root -s /bin/bash  #创建用户hadoop,使用/bin/bash作为shell

接着使用下面的命令修改密码,提示输入两次密码,可简单的设为“hadoop”(密码随意指定,若提示“无效的密码,过于简单”,不用理会,再次输入确认即可)。
passwd hadoop #该条命令设置hadoop用户的密码,输入此命令后会出现一个输入密码的提示,输入即可,但是不会在终端中显示你的密码,会让你再次确认你的密码

可以为hadoop用户增加管理员权限,方便部署,避免一些对新手来说比较棘手的权限问题,在终端中输入:
visudo  #该命令会打开一个编辑文件,在其中的98行进行操作

打开这个文件之后,在文件的98行会看见如下的一条命令:
root   ALL=(ALL)   ALL
hadoop ALL=(ALL)   ALL  #在上面一条命令的后面增加这条命令,意思是为hadoop用户增加管理员权限

另外一种比较常用的设置管理员权限的方法是:
vim /etc/sudoers  #依然是在第98行之后添加上面的命令

准备工作



使用hadoop用户登陆后,还需要安装几个软件才能安装hadoop,Centos采用的是yum来安装软件,需要联网环境,请检查你的操作系统是否已经连接网络,连接网络之后,需要安装ssh和java环境。
安装SSH、配置SSH无密码登陆


首先检查是否已经安装ssh,在终端中输入:
rpm -qa | grep ssh

在返回的结果中如果有clients和server说明已经安装成功,如果安装没有成功,在终端中输入:
sudo yum install openssh-clients
sudo yum install openssh-server

接着用下面的命令测试ssh是否可用,在终端中输入:
ssh localhost

但是仅仅这样登陆的话,每次都是需要密码的,我们需要配置ssh无密码登陆方式才比较方便,在终端中输入下面的命令:
cd ~/.ssh/  #若没有该目录,请先执行一次ssh localhost
ssh-keygen -t rsa #会有提示,都按回车就可以
cat id_rsa.pub >> authorized_keys #加入授权
chmod 600 ./authorized_keys  #修改文件的权限

增加了上述的操作之后,再次使用ssh localhost命令,无需密码就能直接登录了。
安装Java环境


首先下载相应版本的JDK,我推荐sun公司发行的JDK,并且在当前生态环境下使用JDK 1.7就够了,我的计算机中使用的是:jdk-7u79-linux-x64.tar.gz(实验室一直使用这哥版本的JDK)。并且放在”/home/hadoop(即~)”中。注意hadoop用户必须有管理员权限,因为下面的操作全部都包含sudo操作,前面已经设置过,在传输文件时用WinSCP前面已经介绍过这种工具
#解压JDK压缩包
$ sudo tar -zxvf jdk-7u79-linux-x64.tar.gz  #在解压的过程中并没有给出应该讲解压的文件放在哪里,原因是本身这个压缩包里面就有一个名为jdk-7u79-linux的文件夹

#复制JDK文件夹到/usr/lib/jvm目录中
$ sudo cp -r ~/jdk1.7.0_79/ /usr/lib/jvm   #Centos 7的java安装包都放在这里

#配置环境变量
$ sudo vim /etc/profile
#在末尾加上:
export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_79  #只加这个环境变量远远不够,在本文结束部分,会给出配置hadoop必须加的所有环境变量

#然后保存关闭,使用source命令更新下
$ source /etc/profile
#使用env命令查看JAVA_HOME环境变量的值
$ env
#如果JAVA_HOME=/usr/lib/jvm/jdk1.7.0_79,说明配置成功。

#修改系统默认的JDK
$ sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.7.0_79/bin/java 300

$ sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk1.7.0_79/bin/javac 300

$ sudo update-alternatives --config java #输入/usr/lib/jvm/jdk1.7.0_79/bin/java前面的数字就可以了

$ sudo update-alternatives --config javac #输入/usr/lib/jvm/jdk1.7.0_79/bin/javac前的数字就好了

#查看是否安装成功
$ java
$ javac
$ java -version

#删除冗余文件,该操作在“/home/hadoop”下进行
$ sudo rm -rf jdk1.7.0_79/
$ sudo rm -rf jdk-7u79-linux-x64.tar.gz

在各个节点上安装hadoop 2.7.2稳定版



可用从apache官网下载最新版本的hadoop,但是请下载稳定版。下载时请下载hadoop-2.x.x.tar.gz这个格式的文件,这是编译好的文件,另一个包含src的文件时是hadoop源代码,需要进行编译才能使用。在Windows上下载好hadoop的安装包,使用WinSCP将其传入”/home/hadoop”中,接着进行下面的过程。
$ sudo tar -zxf /home/hadoop/hadoop-2.7.2.tar.gz -C /usr/local #解压到/usr/local中
$ cd /usr/local/  
$ sudo mv ./hadoop-2.7.2/ ./hadoop #将文件夹命名改为hadoop
$ sudo chown -R hadoop:hadoop ./hadoop #修改文件权限

#hadoop解压后即可使用,输入如下命令来检查hadoop是否可用,成功则会显示hadoop版本信息。
$ cd /usr/local/hadoop
$ ./bin/hadoop version

测试实例看单节点是否成功配置



hadoop默认模式为非分布式,无需进行其他的配置即可运行,非分布式即单java进程,方便进行调试。现在我们可以执行例子来感受一下hadoop的运行。hadoop附带了丰富的例子(运行./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-example-2.7.2.jar可以看到所有的例子),包括wordcount、terasort、join、grep等。在此我们选择运行grep的例子,我们将input文件夹中的所有文件作为输入,筛选当中符合正则表达式dfs[a-z.]+的单词并统计出现的次数,最后输出结果到output文件夹中。
$ cd /usr/local/hadoop
$ mkdir ./input
$ cp ./etc/hadoop/*.xml ./input  #将配置文件作为输入文件
$ ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep ./input  ./output  'dfs[a-z.]+'
cat ./output/*  #查看运行结果

上述代码的运行结果为:
1 dfsadmin #注意hadoop不会覆盖结果文件,因此再次运行上面实例会提示出错,需要先将`./output`删

输入下面的命令:
rm -rf ./output

集群生态系统之间互相通信-网络配置



首先应该保证集群在同一个局域网,如果使用的是虚拟机安装的系统,需要更改网络连接方式为桥接(Bridge)模式,才能实现多个节点之间的互联。
  • 修改主机名:hostname
$ sudo vim /etc/hostname #修改节点的名字,我的节点一次为:Master、Slave1、Slave2、Slave3、Slave4  
$ 在打开的文件中依次写入MasterSlave1Slave2Slave3Slave4,如果有其他的内容全部删除hostname只出现MasterSlave1Slave2Slave3Slave4,该名字用来标识你所使用的计算机
  • 修改/etc/hosts文件
$ sudo vim /etc/hosts #修改IP映射关系

打开后出现下面的内容,如果有其他的内容,删除它,那些信息并没有什么用:
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 #ipv4地址,不能删除
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6  #ipv6地址,不能删除

在打开的/etc/hosts文件后面追加下面的内容:
#在打开的文件中写入下面的内容
192.168.101.44 Master
192.168.101.45 Slave1
192.168.101.46 Slave2
192.168.101.47 Slave3
192.168.101.48 Slave4
192.168.101.49 Slave5

完成上述操作之后,ping一下看是否能联通
ping Master -c 3 #只ping3次
ping Slave1 -c 3
ping Slave2 -c 3
ping Slave3 -c 3
ping Slave4 -c 3 
ping Slave5 -c 3

修改完成后,需要重新启动一下(exit即可,只是重启终端,并不需要重启操作系统),重启后在终端中才能看到机器名的变化。后面的操作请注意区分Master和Slave节点的操作

ssh无密码登陆节点



这个操作是让Master节点可以无密码ssh登陆到各个Slave节点上,首先生成Master节点的公钥,在Master节点的终端执行(因为改过主机名,所以还需要删掉原来有的重新生成一次,凡是修改了Master节点的内容,都要执行此步进行更新公钥,当然会对后续的过程有影响,请更改有影响的步骤,也就是进行redo操作)。
# 在Master节点上执行下面所有的命令
$ cd ~/.ssh      #如果没有该目录,先执行一次ssh localhost
$ rm ./id_rsa*    #删除之前生成的公钥
$ ssh-keygen -t rsa   #一直按回车就可以
$ cat ./id_rsa.pub >> ./authorized_keys #让Master节点能首先无密码ssh登陆本机,在Master执行该命令
$ ssh Master  #验证是否能成功的登陆本机
$ scp ~/.ssh/id_rsa.pub hadoop@Slave1:/home/hadoop #scp是Secure Copy的简写,用于在Linux下进行远程拷贝文件,类似于cp命令,不过cp只能在本机中拷贝,执行scp时会要求输入Slave1节点上hadoop用户的密码(hadoop),输入完成后会提示传输完毕。
$ scp ~/.ssh/id_rsa.pub hadoop@Slave2:/home/hadoop #传入2号节点
$ scp ~/.ssh/id_rsa.pub hadoop@Slave3:/home/hadoop #传入3号节点
$ scp ~/.ssh/id_rsa.pub hadoop@Slave4:/home/hadoop #传入4号节点
$ scp ~/.ssh/id_rsa.pub hadoop@Slave5:/home/hadoop #传入5号节点

#在各个子节点上将ssh公钥介入授权
$ cat ~/id_rsa.pub  >> ~/.ssh/authorized_keys
$ rm ~/id_rsa.pub  #用完就可以删掉了

#接着在Slave1节点上将ssh公钥添加到授权中
$ cat ~/id_rsa.pub >> ~/.ssh/authorized_keys #在Slave1节点上执行
$ rm ./id_rsa.pub #用完删掉

#接着在Slave2节点上将ssh公钥添加到授权中
$ cat ~/id_rsa.pub >> ~/.ssh/authorized_keys #在Slave2节点上执行
$ rm ./id_rsa.pub #用完删掉

#接着在Slave3节点上将ssh公钥添加到授权中
$ cat ~/id_rsa.pub >> ~/.ssh/authorized_keys #在Slave3节点上执行
$ rm ./id_rsa.pub #用完删掉

#接着在Slave4节点上将ssh公钥添加到授权中
$ cat ~/id_rsa.pub >> ~/.ssh/authorized_keys #在Slave4节点上执行
$ rm ./id_rsa.pub #用完删掉

#接着在Slave5节点上将ssh公钥添加到授权中
$ cat ~/id_rsa.pub >> ~/.ssh/authorized_keys #在Slave5节点上执行
$ rm ./id_rsa.pub #用完删掉

#最后我们在Master节点上测试是否能成功登陆各个子节点
$ ssh Slave1  #登陆子节点1
$ exit        #退出Slave1节点 
$ ssh Slave2  #登陆子节点2
$ exit 
$ ssh Slave3  #登陆子节点3
$ exit 
$ ssh Slave4  #登陆子节点4
$ exit 
$ ssh Slave5  #登陆子节点5
$ exit 

配置PATH环境变量



可以将hadoop安装目录加入到PATH变量中,这样就有可以在任意目录中使用hadoop、hdfs等命令,需要在Master节点上进行配置,注意下面命令只须在Master节点上执行,其他的Slave节点不需要
$ vim ~/.bashrc
#加入下面的命令
$
export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_79 #加入Java环境变量
export PATH=$PATH:/usr/local/hadoop/bin:/usr/local/hadoop/sbin
$ source ~/.bashrc  #刷新一下

配置集群/分布式环境



集群/分布式环境需要修改/usr/local/hadoop/etc/hadoop中的5个配置文件,更多设置项可查看官方说明,这里仅仅设置了正常启动所必须的设置项:slaves、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml。
  • 文件slaves,将作为DataNode的主机名写入该文件,每行一个,默认为localhost,所谓在伪分布式节点配置时,节点即作为NameNode也可以作为DataNode。分布式配置可以保留localhost,也可以删掉,让Master节点近作为NameNode节点。本教程让Master节点仅仅作为NameNode节点使用,因此将文件中原来的localhost删除,在slaves中添加:
Slave1  #作为DataNode节点
Slave2  #作为DataNode节点
Slave3  #作为DataNode节点
SLave4  #作为DataNode节点
Slave5  #作为DataNode节点
  • 将core-site.xml文件改为下面的配置:
<configuration>
      <property>
          <name>fs.defaultFS</name>
          <value>hdfs://Master:9000</value>
      </property>
      <property>
          <name>hadoop.tmp.dir</name>
          <value>file:/usr/local/hadoop/tmp</value>
          <description>Abase for other temporary directories.</description>   
      </property>
</configuration>
  • 文件hdfs-site.xml,dfs.replication一般设置为3,但是我们现在有5个Slave节点,所以dfs.replication的值设置为5。
  <configuration>
      <property>
          <name>dfs.namenode.secondary.http-address</name>
          <value>Master:50090</value>
      </property>
      <property>
          <name>dfs.replication</name>
          <value>5</value>  
      </property>
      <property>
          <name>dfs.namenode.name.dir</name>
          <value>file:/usr/local/hadoop/tmp/dfs/name</value>
      </property>
      <property>
          <name>dfs.datanode.data.dir</name>
          <value>file:/usr/local/hadoop/tmp/dfs/data</value>
       </property>
  </configuration>
  • 文件mapred-site.xml(可能需要先重命名,默认文件名为madred-site.xml.template),然后配置修改如下:
    首先重命名,在终端中输入:
mv madred-site.xml.template madred-site.xml  #将前一个文件的名字修改为后者
<configuration>
        <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
        </property>
        <property>
                <name>mapreduce.jobhistory.address</name>
                <value>Master:10020</value>
        </property>
        <property>
                <name>mapreduce.jobhistory.webapp.address</name>
                <value>Master:19888</value>
        </property>
</configuration>
  • 修改文件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>
</configuration>
  • 最基本的配置完成,我们需要将Master节点上的/usr/local/hadoop文件夹复制到各个节点上,因为之前在节点上跑过单节点的例子,所以在切换到集群模式之前应先删除之前临时的文件,在Master节点上执行:
$ cd /usr/local
$ sudo rm -r ./hadoop/tmp #删除hadoop临时文件
$ `sudo rm -r ./hadoop/logs/*`  #删除日志文件
$ tar -zcf ~/hadoop.master.tar.gz ./hadoop #先压缩再执行复制
$ cd ~
$ scp ./hadoop.master.tar.gz Slave1:/home/hadoop #传输到Shave1节点上
$ scp ./hadoop.master.tar.gz Slave2:/home/hadoop #传输到Shave2节点上
$ scp ./hadoop.master.tar.gz Slave3:/home/hadoop #传输到Shave3节点上
$ scp ./hadoop.master.tar.gz Slave4:/home/hadoop #传输到Shave4节点上
$ scp ./hadoop.master.tar.gz Slave5:/home/hadoop #传输到Shave5节点上
  • 在各个slave节点上执行下面的命令,我有5个slave节点,所有在5个节点下都应该执行下面的命令:
$ sudo rm -r /usr/local/hadoop  #删掉旧的
$ sudo tar -zxf ~/hadoop.master.tar.gz -C /usr/local  #解压缩到/usr/local文件夹中
$ sudo chown -R hadoop:hadoop /usr/local/hadoop  #修改/usr/local/hadoop文件夹权限

首次启动hadoop


  • 首次启动需要先在Master节点上执行NameNode的格式化,如果要重新格式化,要删除所有节点上tmp文件,否则是不能格式化成功的,即使成功也不会刷新状态。
$ hdfs namenode -format  #首次运行需要执行格式化操作,之后不需要

  • 关闭防火墙,Centos中默认开启了防火墙,在开启hadoop集群之前,需要关闭集群中每个节点的防火墙,有防火墙会导致ping得通但是telnet端口不通,从而导致DataNode启动了,但是Live datanodes为0的情况。

    • 在Centos 6.x中关闭防火墙命令
      $ sudo service iptables stop #关闭防火墙服务
      $ sudo chkconfig iptables off #禁止防火墙开机自启动,这样就不用手动去关闭了

    • 在Centos 7中需要通过如下命令(防火墙改成了firewall)
      $ systemctl stop firewalld.service #关闭firewall
      $ systemctl disable firewalld.service #禁止firewall开机自启动

  • 启动hadoop,需要在Master上进行:
$ start-dfs.sh
$ start-yarn.sh
$ start-all.sh
$ mr-jobhistory-daemon.sh start historyserver

启动的过程如果报错,可能是环境变量设置有问题,将下面我已经设置好的环境变量放到指定的部分就可以。

最终环境变量设置



最终在~/.bashrc和~/.bash_profile文件中应该有下面的环境变量,请直接复制下面的环境变量,这种设置可以方便你izai任意路径下打开相应的可执行文件。
export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_79
export PATH=$PATH:/usr/local/hadoop/bin:/usr/local/hadoop/sbin:$JAVA_HOME/bin
export HADOOP_PREFIX=/usr/local/hadoop
export HADOOP_HOME=/usr/local/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
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop

查看运行结果



是否启动成功呢?这可能是我们最为关心的问题,下面一些方式去查看你的集群是否已经成功的启动。

  • jps,在各个节点上输入jps命令
    • 在Master必须包含的信息,必须至少包含下面的4个进行,否则就可以判定你的集群没有成功的启动。
    ResourceManager   #资源管理
    Jps
    NameNode
    SecondaryNameNode
    • 在Slave节点上应该包含3个进程,三个进行却一不可。
    Jps
    NodeManager
    DataNode

  • Master:50070
    将上面的Master换成你的Master节点的IP地址,在启动的界面中,查看,如下图,其中的LiveNode应该为你的Slave节点数:
    [img]http://blog.csdn.net/jpzhu16/article/details/50985683/E:JAVA\hadoop-LiveNode.png

  • 在终端中输入:hdfs dfsadmin -report,其中的LiveNode应该为你的LiveNode数目,否则说明集群没有成功的启动。

停止hadoop集群



停止过程十分简单,只需要在Master节点上执行命令:
stop-all.sh   #停止所有的进程

可能出现的问题


  • 在你输入一些命令比如jps时,会提示“can not found“,这个命令本身不属于hadoop,这是Java的JDK自带的一条命令,出现这种情况的原因有二:
    • 你的JDK安装不正确,但是如果你跟我的教程做,不会出现这种情况
    • 环境变量的导入不正确,在本文中最后给出了你应该导入的环境变量,请自己仔细检查是否正确

  • 第一次启动hadoop时不成功,之后一会报错该怎么办?
    • 出现这种情况的原因可能是你第一次开启hadoop的姿势不正确,请删除/usr/local/hadoop路径下的tmp文件夹,重新进行格式化操作,看是否能够成功。

  • 在启动的过程中可能会伴随一个警告,还警告直接忽略,它不会影响你的正常启动,这个警告的解决需要编译源代码,还是比较复杂的,一般不建议修改。

联系我


*[img]http://img.blog.csdn.net/20160326103701060
......显示全文...
    点击查看全文


上一篇文章      下一篇文章      查看所有文章
2016-03-26 16:28:57  
云计算 最新文章
CentOS7上安装Zabbix(快速安装监控工具Zab
十分钟搭建NeuralStyle服务
solr入门之拼写纠错深入研究及代码Demo
3个netty5的例子,简单介绍netty的用法
RedhatOpenshift云平台注册使用
Akka框架——第一节:并发编程简介
Hadoop实战:Linux报tmp磁盘存储不足
linux安装thrift
感觉快更快规划计划高考韩国
solr相似匹配
360图书馆 软件开发资料 文字转语音 购物精选 软件下载 美食菜谱 新闻资讯 电影视频 小游戏 Chinese Culture 股票 租车
生肖星座 三丰软件 视频 开发 短信 中国文化 网文精选 搜图网 美图 阅读网 多播 租车 短信 看图 日历 万年历 2018年1日历
2018-1-20 7:31:41
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  软件世界网 --