Hadoop集群搭建

Hadoop集群搭建java

 

 搭建文档:node

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

1、实验环境

虚拟机数量:3台web

操做系统:Ubuntu 14.04shell

Hadoop:Hadoop 2.6.5apache

Java:java version "1.7.0_51"ubuntu

 

2、实验内容及步骤vim

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

三台机器的具体分工命名以下:服务器

IP

主机名

功能角色

10.49.23.127

 Master

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

10.49.23.134

 slave1

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

10.49.23.129

 slave2

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

 

 

(一)JDK安装

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

 二、修改/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安装

一、单台安装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命令slave一、slave2有以下进程,说明配置正确

 

4-2

 

 

 

 

 

 

 

 

 

 

 

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

 

图4-3

查看MapReduce:http://master:8088

 

 

 

 

 

 

Zookeeper的安装与配置

 

 

实验学时1学时

虚拟机个数:3

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

1、 实验目的

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

2、实验原理

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

3、实验内容

三台ubuntu系统中搭建好Zookeeper

4、实验指导

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集群安装完成!

 

 

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

写入:slaver一、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

能够作等待备份做用;

 

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

 

六、备注

问题解决:

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

二、在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