Home  >  Article  >  Database  >  VMware虚拟机、centos6下安装部署hadoop2.2

VMware虚拟机、centos6下安装部署hadoop2.2

WBOY
WBOYOriginal
2016-06-07 15:37:531344browse

最近要搭hadoop环境,不想装双系统,所以就想在虚拟机上实验一番 环境准备 1、光盘镜像:CentOS-6.0-i386-bin-DVD.iso 2、VMware10 3、hadoop版本:hahadoop-2.2.0 4、jdk1.8.0 我们要建立一个具有如下配置的集群: host name ip address os 1 master 192.168

最近要搭hadoop环境,不想装双系统,所以就想在虚拟机上实验一番

环境准备
1、光盘镜像:CentOS-6.0-i386-bin-DVD.iso

2、VMware10
3、hadoop版本:hahadoop-2.2.0 
4、jdk1.8.0

我们要建立一个具有如下配置的集群:

 host name   ip address   os
1  master  192.168.230.128  CentOS6.0
2  slave1  192.168.230.129  CentOS6.0
其中master为name node和job tracker节点,slaveN为data node和task tracker节点。


安装和配置步骤具体如下:

1. 配置虚拟网络

如果你对VMWare和网络配置比较熟悉,可以忽略这一步,但是后面配置IP地址时具体的参数可能和我说的不一样。如果你想通过一步一步操作就能成功的话,就需要这些设置

通过VMWare -> Edit -> Virtual Network Editor打开如下对话框:

VMware虚拟机、centos6下安装部署hadoop2.2

在上面的列表中选中VMnet8 NAT那一行,然后按图设置所有内容,之后点击NAT Setting按钮,打开如下对话框,确保各个参数如图中所示设置。

VMware虚拟机、centos6下安装部署hadoop2.2

创建虚拟机比较简单,注意VMnet配置使用NAT就可以了,创建两个centOS6虚拟机,当然为了方便,最好装一下VMware Tools,这种资料网上很多,就不赘述了。

2. 配置网络

关掉SELINUX:vi /etc/selinux/config ,设置SELINUX=disabled,保存退出。

关闭防火墙:/sbin/service iptables stop;chkconfig --level 35 iptables off 

修改IP地址为静态地址:vi /etc/sysconfig/network-scripts/ifcfg-eth0,将其内容改为如下图所示,注意HWADDR那一行,你所创建的虚拟机的值很可能与之不同,保持原值,不要修改它!

VMware虚拟机、centos6下安装部署hadoop2.2

修改主机名称: vi /etc/sysconfig/network,将其内容改为如下图所示:

VMware虚拟机、centos6下安装部署hadoop2.2

修改hosts映射:vi /etc/hosts,将其内容改为如下图所示。我们在这里加入了master和slave1的映射项。(这里我把localhost都给删了,最好还是保留吧,直接在后面append这些映射项就可以了)

VMware虚拟机、centos6下安装部署hadoop2.2

执行:service network restart 以重启网络。

3. 安装JDK

下载最新版本的jdk,然后在namenode和datanode节点上安装

rpm -ivh jdk-8-linux-i586.rpm

root用户登陆,命令行中执行命令”vi /etc/profile”,配置环境变量

VMware虚拟机、centos6下安装部署hadoop2.2

保存并退出,执行以下命令使配置生效

source  /etc/profile

在终端输入java –version 查看java配置情况

VMware虚拟机、centos6下安装部署hadoop2.2

4. 配置所有节点之间SSH无密码验证

(1)所有节点执行以下命令,生成rsa密钥对:

ssh-keygen -t rsa

这将在/root/.ssh/目录下生成一个私钥id_rsa和一个公钥id_rsa.pub。

(2)将所有datanode节点的公钥id_rsa.pub传送到namenode上:

cp  id_rsa.pub datanode01.id_rsa.pub//复制一份id_rsa.pub

scp datanode01.id_rsa.pub namenode节点ip地址:/root/.ssh/

//将公钥文件传送到namenode 

(3)namenode节点上综合所有公钥(包括自身)并传送到所有节点上

cp id_rsa.pub authorized_keys //authorized_keys名字不能错!

cat datanode01.id_rsa.pub >> authorized_keys

    然后使用SSH协议将所有公钥信息authorized_keys复制到所有DataNode的.ssh目录下

scp authorized_keys data节点ip地址: /root/.ssh/

    这样配置过后,所有节点之间可以相互SSH无密码登陆,可以通过命令

“ssh  节点ip地址”来验证。

配置完毕,在namenode上执行“ssh 本机,所有数据节点”命令,因为ssh执行一次之后将不会再询问。

VMware虚拟机、centos6下安装部署hadoop2.2


在namenode和datanode节点上的/usr/etc/目录下新建hadoop文件夹,将hadoop-2.2.0解压到namenode节点的hadoop文件夹下(对于datanode节点上的hadoop,将用scp指令直接从namenode节点拷贝过去,这样更方便一些),修改namenode节点的/etc/profile文件,在后面添加环境变量,如下图所示:

VMware虚拟机、centos6下安装部署hadoop2.2

保存并退出,执行以下命令使配置生效

source  /etc/profile

5. 安装hadoop2.2

   1)解压缩hadoop-2.2.0.tar.gz
       tar -zxf hadoop-2.2.0.tar.gz
       默认解压缩到当前目录下面,这里解压缩/usr/etc/hadoop/目录下面
   2) 修改hadoop配置文件
       打开hadoop-2.2.0/etc/hadoop,修改里面的配置文件

      a) hadoop-env.sh,找到里面的JAVA_HOME,修改为实际地址(java_home不能写${JAVA_HOME},经过测试)
      b) yarn-env.sh ,同样找到里面的JAVA_HOME,修改为实际路径(java_home不能写${JAVA_HOME},经过测试)
      c) slave  这个文件配置所有datanode节点,以便namenode搜索,本例配置如下
         slave1
      d) core-site.xml
       

    

        

            fs.defaultFS

            hdfs://master:9000

        

        

            io.file.buffer.size

            131072

        

        

            hadoop.tmp.dir

            /usr/etc/hadoop/hadoop-2.2.0/mytmp

            A base for other temporarydirectories.

        

        

            hadoop.proxyuser.root.hosts

            master

        

        

            hadoop.proxyuser.root.groups

            *

        

    

  注意fs.defaultFS为2.2.0新的变量,代替旧的:fs.default.name  

 e) hdfs-site.xml
     

    

        

            dfs.namenode.name.dir

            /usr/etc/hadoop/name

        true

        

        

            dfs.datanode.data.dir

            /usr/etc/hadoop/data

        true

        

        

            dfs.replication

        1

        

        

            dfs.permissions

            false

        

    

新的:dfs.namenode.name.dir,旧:dfs.name.dir,新:dfs.datanode.name.dir,旧:dfs.data.dir
dfs.replication确定 data block的副本数目,hadoop基于rackawareness(机架感知)默认复制3份分block,(同一个rack下两个,另一个rack下一 份,按照最短距离确定具体所需block, 一般很少采用跨机架数据块,除非某个机架down了)

  f) mapred-site.xml.template(或者mapred-site.xml,这两个名字都可以,已通过测试)
  

    

        

            mapreduce.framework.name

            yarn

        

        

            mapreduce.jobhistory.address

            master:10020

        

        

            mapreduce.jobhistory.webapp.address

            master:19888

        

        

                mapreduce.jobhistory.intermediate-done-dir

                /mr-history/tmp

        

        

            mapreduce.jobhistory.done-dir

            /mr-history/done

        

    

配置其使用 Yarn 框架执行 map-reduce 处理程序

这个地方需要把mapred-site.xml.template复制重新命名

新的计算框架取消了实体上的jobtracker, 故不需要再指定mapreduce.jobtracker.addres,而是要指定一种框架,这里选择yarn. 备注2:hadoop2.2.还支持第三方的计算框架,但没怎么关注过。
配置好以后将$HADOOP_HOME下的所有文件,包括hadoop目录分别copy到其它3个节点上。

 g) yarn-site.xml
   

    

        

        yarn.resourcemanager.address

        master:18040

    

    

        yarn.resourcemanager.scheduler.address

        master:18030

    

    

        yarn.resourcemanager.resource-tracker.address

        master:18025

    

    

            yarn.resourcemanager.admin.address

            master:18041

     

     

            yarn.resourcemanager.webapp.address

            master:8088

    

    

        yarn.nodemanager.local-dirs

        /usr/etc/hadoop/mynode/my

    

    

            yarn.nodemanager.log-dirs

            /usr/etc/hadoop/mynode/logs

    

    

            yarn.nodemanager.log.retain-seconds

            10800

      

        

            yarn.nodemanager.remote-app-log-dir

            /logs

        

        

            yarn.nodemanager.remote-app-log-dir-suffix

            logs

        

        

            yarn.log-aggregation.retain-seconds

            -1

        

        

            yarn.log-aggregation.retain-check-interval-seconds

            -1

        

        

            yarn.nodemanager.aux-services

            mapreduce_shuffle

        

    

  3) 将上述文件配置好后,将hadoop-2.2.0文件复制到其余datanode机器上的相同路径下。

scp -r /usr/etc/hadoop/hadoop-2.2.0 slave1:/usr/etc/hadoop

切换到root用户,修改/etc/profile文件 设置hadoop环境变量,

VMware虚拟机、centos6下安装部署hadoop2.2


    增加之后保存,设置生效:source /etc/profile


    最后两行特殊说明下,有的文章中遗漏掉这部分配置,最后在启动hadoop2.2时报了下面的错误
  

Hadoop 2.2.0 - warning: You have loaded library /home/hadoop/2.2.0/lib/native/libhadoop.so.1.0.0 which might have disabled stack guard.


 

Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Starting namenodes on [Java HotSpot(TM) 64-Bit Server VM warning: You have loaded library /home/hadoop/2.2.0/lib/native/libhadoop.so.1.0.0 which might have disabled stack guard. The VM will try to fix the stack guard now.
It's highly recommended that you fix the library with 'execstack -c ', or link it with '-z noexecstack'.
localhost]
sed: -e expression #1, char 6: unknown option to `s'
HotSpot(TM): ssh: Could not resolve hostname HotSpot(TM): Name or service not known
64-Bit: ssh: Could not resolve hostname 64-Bit: Name or service not known
Java: ssh: Could not resolve hostname Java: Name or service not known
Server: ssh: Could not resolve hostname Server: Name or service not known
VM: ssh: Could not resolve hostname VM: Name or service not known

 配置完成之后需要重启电脑,所有datanode节点也需要对环境变量增加上面配置,配置完成之后重启电脑


6. hadoop的启动与关闭

   1)hadoop namenode的初始化,只需要第一次的时候初始化,之后就不需要了
       cd /usr/etc/hadoop/hadoop-2.2.0/bin
        hdfs namenode -format

   2)启动
       启动:在namenode机器上,进入/usr/etc/hadoop/hadoop-2.2.0/sbin
       执行脚本start-all.sh
   3) 关闭
       在namenode节点上,进入/usr/etc/hadoop/hadoop-2.2.0/sbin
      stop-all.sh

7. web接口地址

启动hadoop后,在主节点的浏览器中输入地址查看

http://master:50070

http://master:8088

http://master:19888(访问有问题,不知道为什么)

至此,hadoop平台的搭建全部结束。

=================================================================================

PS:配置文件里面的文件夹如果不存在不需要自己创建,会自动生成,已经过测试。

DataNode启动不了,可能是防火墙没关,也可能是需要编辑/etc/hosts,改成这样:

127.0.0.1 localhost

192.168.230.128 master

192.168.230.129 slave1

再重新启动就可以了。(用jps可能看不到slave1,但是http://master:50070可以看到slave1已经启动成功了

1 )datanode无法启动的问题,报错如下:

2013-06-08 17:57:27,519 FATAL org.apache.hadoop.hdfs.server.datanode.DataNode: Initialization failed for block pool Block pool BP-770817654-172.17.50.119-1370685416301 (storage id DS-803461661-172.17.50.119-50010-1370681848198) service to localhost/127.0.0.1:9000
java.io.IOException: Incompatible clusterIDs in /usr/hadoop/tmp/dfs/data: namenode clusterID = CID-cd47cf1e-0f81-41b0-97df-7407db9f1fa5; datanode clusterID = CID-0462092f-2740-40a4-bf96-246be2efc49f
at org.apache.hadoop.hdfs.server.datanode.DataStorage.doTransition(DataStorage.java:390)
at org.apache.hadoop.hdfs.server.datanode.DataStorage.recoverTransitionRead(DataStorage.java:190)
at org.apache.hadoop.hdfs.server.datanode.DataStorage.recoverTransitionRead(DataStorage.java:218)
at org.apache.hadoop.hdfs.server.datanode.DataNode.initStorage(DataNode.java:851)
at org.apache.hadoop.hdfs.server.datanode.DataNode.initBlockPool(DataNode.java:822)
at org.apache.hadoop.hdfs.server.datanode.BPOfferService.verifyAndSetNamespaceInfo(BPOfferService.java:279)
at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.connectToNNAndHandshake(BPServiceActor.java:218)
at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.run(BPServiceActor.java:661)
at java.lang.Thread.run(Thread.java:619)

通过在网上查找资料得出:每次namenode format会重新创建一个namenodeId,而tmp/dfs/data下包含了上次format下的id,namenode format清空了namenode下的数据,但是没有清空datanode下的数据,导致启动时失败,所要做的就是每次fotmat前,清空tmp一下 的所有目录.

最后,删除/usr/hadoop/tmp下的所有内容即可。

2 )运行脚本的时候报out of memory

解决的方法是:修改配置文件hadoop-env.sh中的export HADOOP_CLIENT_OPTS="-Xmx1024m $HADOOP_CLIENT_OPTS"这个选项,把XMX改大就可以了。


=========================================================================

参考文章:http://blog.itpub.net/7483882/viewspace-1069062/

http://blog.csdn.net/dyllove98/article/details/9228673

http://blog.csdn.net/w13770269691/article/details/16883663


Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Previous article:V4L2(二)Next article:Oracle 中merge into的使用介绍