zoukankan      html  css  js  c++  java
  • Hadoop集群搭建

    Hadoop集群搭建

     

     搭建文档:

    https://pan.baidu.com/s/1dPUHiwhcDNrMsKNIgOjj0Q

    一、实验环境

    虚拟机数量:3台

    操作系统:Ubuntu 14.04

    Hadoop:Hadoop 2.6.5

    Java:java version "1.7.0_51"

    二、实验内容及步骤

    为方便阐述,本实验只搭建一个有三台主机的小集群。

    三台机器的具体分工命名如下:

    IP

    主机名

    功能角色

    10.49.23.127

     Master

    namenode(控制节点)、JobTracker(工作分配)

    10.49.23.134

     slave1

    datanode(数据节点)、TaskTracker(任务执行)

    10.49.23.129

     slave2

    datanode(数据节点)、TaskTracker(任务执行)

    (一)JDK安装

    1、解压
    tar –zxvf jdk-7u67-linux-x64.tar.gz

     2、修改/etc/profile文件

    1)vim /etc/profile

    文件末尾加:

    export JAVA_HOME=/home/ubuntu/jdk1.7.0_51

    export JRE_HOME=/home/ubuntu/jdk1.7.0_51/jre  

    export PATH=$PATH:/home/ubuntu/jdk1.7.0_51/bin  

    export CLASSPATH=./:/home/ubuntu/jdk1.7.0_51/lib

     

    1-2

    2)使/etc/profile文件生效:

    source /etc/profile

     

     

    3)验证JDK安装成功:

    java –version

     

    1-4 

    4)按此步骤在集群剩余服务器中配置好JDK

    (二)SSH安装

    1、单台安装ssh.

     1)apt-get install ssh.

    2)进入.ssh目录下面,在每台机器上执行:ssh-keygen -t  dsa  之后一路回车,产生密钥;如果没有.ssh目录则在/home文件mkdir .ssh

    2-1

    3)完成第二步后会产生两个文件:

    id-dsa     #私钥

    id-dsa.pub   #公钥

    4)在第一台机器的目录.ssh下执行命令,cat id_dsa.pub >> authorized_keys;此后.ssh下面会出现authorized_keys文件。

    5)然后将第一台机器的.ssh目录下面的authorized_keys文件拷贝到第二台计算机的.ssh目录下,如:scp authorized_keys slaver1:~/.ssh/

    6)再转到第二台机器的.ssh目录下,会发现刚刚传输过来的文件-authorized_keys,然后执行命令,将第二台计算机的公钥也加进来,如:cat id_dsa.pub >> authorized_keys.

    7)将第二台计算机新生成的authorized_keys传输第三台计算机,将第三台计算机的公钥-id-rsa.pub添加到从第二台计算机传过来的authorized_keys里面。

    8)依次类推,直至集群中的最后一台计算机。

    9)在集群的最后一台计算机执行完添加后,生成的authorized_keys文件就包含集群中所有计算机的公钥,如果以后还有机器加进到集群中来,可以直接添加到文件-authorized_keys。最后,将最后生成的authorized_keys复制到集群中的每一台计算机的.ssh目录下,覆盖掉之前的authorized_keys。

    10)完沉第九步后,就可以在集群中任意一台计算机上,免密码ssh登录到其他计算了。

    (三)Hadoop搭建

    1.在三台主机上分别设置/etc/hostname:vim /etc/hostname修改为对应的master或slavehosts文件用于定义主机名与IP地址之间的对应关系(三台主机配置相同)。

    修改/etc/hostsvim /etc/hosts

    图3-1

    三台hadoop文件配置相同,所以配置完一台后,可以把整个hadoop复制过去就行了,现在开始配置master主机的hadoop文件。

    2.需要配置的文件涉及到的有7个(mapred-site.xml.tmplate除外)如下图标示部分:

    mapred-site.xml默认不存在的,可以复制相应的template文件获得。

    1)配置文件1:hadoop-env.sh

    修改JAVA_HOME值如下图:

    3-3

    2)配置文件2:yarn-env.sh

    末尾添加JAVA_HOME值如下图:

    3-4

    3)配置文件3:slaves(保存所有slave节点)删除localhost写入slave1,slave2:

    3-5

    4)配置文件4:core-site.xml

    添加配置内容如下图:

    <property>

    <name>fs.default.name</name>

    <value>hdfs://master:9000</value>

    </property>

    <property>

    <name>hadoop.tmp.dir</name>

    <value>/home/software/hdfs_all/tmp</value>

    </property>

    3-6 

    5)配置文件5:hdfs-site.xml

    <property>

    <name>dfs.replication</name>

    <value>2</value>

    </property>

    <!-- 以下两个参数可以不进行配置,在2.20版本中只要在core-site.xml

    文件中指定了hadoop.tmp.dir以下目录会自动生成在tmp目录中,但是为

    了维护方便,有必要将其路径明确指定在配置文件中 -->

    <property>

    <name>dfs.namenode.name.dir</name>

    <value>file:/home/software/hdfs_all/dfs/name</value>

    </property>

    <property>

    <name>dfs.namenode.data.dir</name>

    <value>file:/home/software/hdfs_all/dfs/data</value>

    </property> 

    图3-7

    6)配置文件6:mapred-site.xml

    <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>

    图3-8

    7)配置文件7:yarn-site.xml

    <property>

    <name>yarn.nodemanager.aux-services</name>

    <value>mapreduce_shuffle</value>

    </property>

    <property>

    <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>

    <value>org.apache.hadoop.mapred.ShuffleHandler</value>

    </property>

    <property>

    <name>yarn.resourcemanager.address</name>

    <value>master:8032</value>

    </property>

    <property>

    <name>yarn.resourcemanager.scheduler.address</name>

    <value>master:8030</value>

    </property>

    <property>

    <name>yarn.resourcemanager.resource-tracker.address</name>

    <value>master:8031</value>

    </property>

    <property>

    <name>yarn.resourcemanager.admin.address</name>

    <value>master:8033</value>

    </property>

    <property>

    <name>yarn.resourcemanager.webapp.address</name>

    <value>master:8088</value>

    </property>

    图3-9

    上面配置完毕后,基本上完成了90%的工作,剩下的就是复制。我们可以把整个hadoop复制过去使用命令如下:

     scp -r hadoop-2.6.5/ slave1:/home/

    scp -r hadoop-2.6.5/ slave2:/home/

    为方便用户和系统管理使用hadoop、hdfs相关命令,需要在/etc/environment配置系统环境变量,使用命令:vim /etc/environment

    配置内容为hadoop目录下的bin、sbin路径,具体如下

    图3-10

    添加完后执行生效命令:source /etc/environment

    下面要做的就是启动验证,建议在验证前,把以上三台机器重启,使其相关配置生效。

    (四)启动验证

    在maser节点格式化namenode:

    hadoop  namenode -format

    启动hadoop:

    start-all.sh

    使用Jps命令master有如下进程,说明配置正确

    图4-1

    使用Jps命令slave1、slave2有如下进程,说明配置正确

    4-2

     

     

    查看分布式文件系统:http://master:50070

    图4-3

    查看MapReduce:http://master:8088

     

     

     

     

     

     

    Zookeeper的安装与配置

    实验学时1学时

    虚拟机个数:3

    实验环境:Ubuntu14.04系统3虚拟机

    一、 实验目的

    1 .可靠性:具有简单、健壮、良好的性能,如果消息m被到一台服务器接受,那么它将被所有的服务器接受。
    2 .实时性:Zookeeper保证客户端将在一个时间间隔范围内获得服务器的更新信息,或者服务器失效的信息。但由于网络延时等原因,Zookeeper不能保证两个客户端能同时得到刚更新的数据,如果需要最新数据,应该在读数据之前调用sync()接口。
    3.等待无关(wait-free):慢的或者失效的client不得干预快速的client的请求,使得每个client都能有效的等待。
    4.原子性:更新只能成功或者失败,没有中间状态。
    5 .顺序性:包括全局有序和偏序两种:全局有序是指如果在一台服务器上消息a在消息b前发布,则在所有Server上消息a都将在消息b前被发布;偏序是指如果一个消息b在消息a后被同一个发送者发布,a必将排在b前面。

    二、实验原理

    Zookeeper 是分布式服务框架,主要是用来解决分布式应用中经常遇到的一些数据管理问题. Zookeeper 的核心是广播,这个机制保证了各个Server之间的同步。实现这个机制的协议叫做Zab协议。Zab协议有两种模式,它们分别是恢复模式(选主)和广播 模式(同步)。当服务启动或者在领导者崩溃后,Zab就进入了恢复模式,当领导者被选举出来,且大多数Server完成了和leader的状态同步以后, 恢复模式就结束了。状态同步保证了leaderServer具有相同的系统状态。为了保证事务的顺序一致性,zookeeper采用了递增的事务id号 (zxid)来标识事务。所有的提议(proposal)都在被提出的时候加上了zxid。实现中zxid是一个64位的数字,它高32位是epoch用 来标识leader关系是否改变,每次一个leader被选出来,它都会有一个新的epoch,标识当前属于那个leader的统治时期。低32位用于递 增计数。

    三、实验内容

    三台ubuntu系统中搭建好Zookeeper

    四、实验指导

    1、解压zooker-3-4-5.tar.gz

    解压:#  tar -zxf zookeeper-3.4.5.tar.gz

    更改名字为zookeeper#  mv zookeeper-3.4.5  u-zookeeper

    2、修改zoo.cfg配置文件

    Zookeeper集群环境下只要一半以上的机器正常启动了,那么Zookeeper服务将是可用的。因此,集群上部署Zookeeper最好使用奇数台机器,这样如果有5台机器,只要3台正常工作则服务将正常。
    下面我们将对Zookeeper的配置文件的参数进行设置 

    进入到u-zookeeperconf目录下将zoo_sample.cfg文件拷贝一份,命名为为:zoo.cfg

    进入目录 # cd u-zookeeper/conf

    拷贝

    命名#  mv  zoo_sample.cfg zoo.cfg

    vim  zoo.cfg修改内容如下:

    配置文件里面的目录需要自己创建

    4# vim /etc/environment

     

    5远程复制分发安装文件

    接下来将上面的安装文件拷贝到集群中的其他机器上对应的目录下:

    master节点/roor/u-zookeeper/data/里面创建myid文件

    echo "1" > /roor/u-zookeeper/data/myid

    同理拷贝/etc/profile/etc/environmentslaver1,slaver2,拷贝完成后修改对 应的机器上的myid。例如修改slaver1中的myid如下:

    echo "2" > /roor/u-zookeeper/data/myid

    cat  /roor/u-zookeeper/data/myid

    结果: 2

    Slaver2中的myid如下:

    echo "3" > /roor/u-zookeeper/data/myid

    cat  /roor/u-zookeeper/data/myid

    结果: 3

    以上操作完成后,请所有节点服务器重启。

    6启动zookeeper集群

    ZooKeeper集群的每个结点上,执行启动ZooKeeper服务的脚本:zkServer.sh start

    如下图所示:

    其中,QuorumPeerMainzookeeper进程,启动正常。

    如上依次启动了所有机器上的Zookeeper之后可以通过ZooKeeper的脚本来查看启动状态,包括集群中各个结点的角色(或是Leader,或是Follower),如下所示,是在ZooKeeper集群中的每个结点上查询的结果:

    通过上面状态查询结果可见,slaver1是集群的Leader,其余的两个结点是Follower

    另外,可以通过客户端脚本,连接到ZooKeeper集群上。对于客户端来说,ZooKeeper是一个整体(ensemble),连接到ZooKeeper集群实际上感觉在独享整个集群的服务,所以,你可以在任何一个结点上建立到服务集群的连接,例如:

    7停止zookeeper进程

    #  zkServer.sh stop

    至此,Zookeeper集群安装完成!

    4、HBase的安装和配置

    # tar -zxvf hbase-0.96.0.tar.gz

    更改名字为hbasemv hbase-0.96.0 /soft/hbase

    4.1 配置conf/hbase-env.sh

    图4-1 配置HBase配置文件

    图4-2 配置HBase配置文件

     

    export JAVA_HOME==/usr/lib/jvm/jdk1.7.0_51

    export HBASE_CLASSPATH=~/u/etc/hadoop

    export HBASE_PID_DIR=/soft/hbase/pids

    修改:

    export HBASE_MANAGES_ZK=false

    一个分布式运行的Hbase依赖一个zookeeper集群。所有的节点和客户端都必须能够访问zookeeper。默认的情况下Hbase会管理一个zookeep集群,即Hbase默认自带一个zookeep集群。这个集群会随着Hbase的启动而启动。而在实际的商业项目中通常自己管理一个zookeeper集群更便于优化配置提高集群工作效率,但需要配置Hbase。需要修改conf/hbase-env.sh里面的HBASE_MANAGES_ZK 来切换。这个值默认是true的,作用是让Hbase启动的时候同时也启动zookeeper.在本实验中,我们采用独立运行zookeeper集群的方式,故将其属性值改为false

    4.2 配置conf/hbase-site.xml

    配置效果图如下:

    图4-3 hbase-site.xml配置文件

     

    要想运行完全分布式模式,加一个属性 hbase.cluster.distributed 设置为 true 然后把 hbase.rootdir 设置为HDFS的NameNode的位置

    hbase.rootdir:这个目录是region server的共享目录,用来持久化Hbase。URL需要是'完全正确'的,还要包含文件系统的scheme

    hbase.cluster.distributed :Hbase的运行模式。false是单机模式,true是分布式模式。若为false,Hbase和Zookeeper会运行在同一个JVM里面。

    hbase-site.xml配置zookeeper:当Hbase管理zookeeper的时候,你可以通过修改zoo.cfg来配置zookeeper,对于zookeepr的配置,你至少要在 hbase-site.xml中列出zookeepr的ensemble servers,具体的字段是 hbase.zookeeper.quorum.在这里列出Zookeeper集群的地址列表,用逗号分割。

    hbase.zookeeper.property.clientPortZooKeeper的zoo.conf中的配置,客户端连接的端口。

    hbase.zookeeper.property.dataDirZooKeeper的zoo.conf中的配置。

    对于独立的Zookeeper,要指明Zookeeper的host和端口。需要在 hbase-site.xml中设置。

    4.3 配置conf/regionservers

    写入:slaver1、slaver2

     

    图4-4 配置集群信息

     

    在这里列出了你希望运行的全部 HRegionServer,一行写一个host (就像Hadoop里面的 slaver 一样). 列在这里的server会随着集群的启动而启动,集群的停止而停止

    4.4 hadoop配置文件拷入

    # cp ~/u/etc/hadoop/hdfs-site.xml /soft/hbase/conf

    # cp ~/u/etc/hadoop/core-site.xml /soft/hbase/conf

    4.5 分发hbase

    # scp  -r  /soft/hbase slaver1:/soft/hbase

    # scp  -r  /soft/hbase slaver2:/soft/hbase

    4.6 运行和测试

    master上执行:

    (1)、# start-dfs.sh  

    (2)、# start-yarn.sh

    (3)、# zkServer.sh  start(各个节点均执行)

    (4)、# start-hbase.sh  (涵盖web管理界面的启动)

    使用jps查看进程,在master上:

     

    图4-5 master进程列表

     

     

    图4-6 从节点进程列表

     

     

    图4-7 从节点进程列表

     

    通过浏览器查看60010,60030端口查看端口号改成了16010和16030

    http://192.168.60.190:60010/

     

    图4-8 浏览器主节点信息

     

    http://192.168.60.199:60030/rs-status

     

    图4-9 浏览器从节点信息

     

    4.7 多节点启动HMaster

    root@master:/soft/hbase/bin# hbase-daemon.sh start master

    在其他子节点同时启动HMaster

    可以做等待备份作用;

     

    5、HBase简单操作

    Hbase脚本

    启动:hbase shell

     

    图5-1 启动HBase

     

    1) status命令

    hbase(main):008:0> status

    1 servers, 0 dead, 3.0000 average load

     

    2) version命令

    hbase(main):007:0> version

    0.94.12, r1524863, Fri Sep 20 00:25:45 UTC 2013

     

    3) create 命令

    创建一个名为 test 的表,这个表只有一个列为 cf。其中表名、列都要用单引号括起来,并以逗号隔开。

    hbase(main):001:0> create 'test', 'cf'

    0 row(s) in 10.3830 seconds

     

    4) list 命令

    查看当前 HBase 中具有哪些表。

    hbase(main):009:0> list

    TABLE                                                                           

    test                                                                            

    1 row(s) in 0.3590 seconds

     

    6、备注

    问题解决:

    1、在安装完HBase后,启动hbase时会报slf4j-log4j的错误,这是因为hadoop的slf4j-log4j与HBase中的slf4j-log4j启冲突。

    2、在web上查看HBase时,之前用的时:

    http://master:60010/

    http://slaver1:60030/

    但是存在问题,不能打开页面进行查看HBase里边的信息。是因为在HBase1.X之后的版本中端口号改成了16010和16030

    运行PI实例:

    root@master:/home/hadoop-2.6.5/share/hadoop/mapreduce# hadoop jar hadoop-mapreduce-examples-2.6.5.jar pi 2 10

     

  • 相关阅读:
    JavaScript提供了哪些定时器
    谈谈对CSS盒子模型的理解
    我们来谈谈类的加载机制
    谈谈你对ThreadLocal的理解
    谈谈你对线程安全的理解?
    JDK提供的线程池有哪些?实际开发我们该怎么使用?
    Pytest系列(7)
    Pytest系列(6)
    Pytest系列(5)
    Pytest系列(4)
  • 原文地址:https://www.cnblogs.com/mzc1997/p/9200529.html
Copyright © 2011-2022 走看看