Hadoop集群搭建java
搭建文档:node
https://pan.baidu.com/s/1dPUHiwhcDNrMsKNIgOjj0Qlinux
虚拟机数量: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或slave。hosts文件用于定义主机名与IP地址之间的对应关系(三台主机配置相同)。
修改/etc/hosts:vim /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 .可靠性:具备简单、健壮、良好的性能,若是消息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的状态同步之后, 恢复模式就结束了。状态同步保证了leader和Server具备相同的系统状态。为了保证事务的顺序一致性,zookeeper采用了递增的事务id号 (zxid)来标识事务。全部的提议(proposal)都在被提出的时候加上了zxid。实现中zxid是一个64位的数字,它高32位是epoch用 来标识leader关系是否改变,每次一个leader被选出来,它都会有一个新的epoch,标识当前属于那个leader的统治时期。低32位用于递 增计数。
在三台ubuntu系统中搭建好Zookeeper
解压:# tar -zxf zookeeper-3.4.5.tar.gz
更更名字为zookeeper:# mv zookeeper-3.4.5 u-zookeeper
在Zookeeper集群环境下只要一半以上的机器正常启动了,那么Zookeeper服务将是可用的。所以,集群上部署Zookeeper最好使用奇数台机器,这样若是有5台机器,只要3台正常工做则服务将正常。
下面咱们将对Zookeeper的配置文件的参数进行设置
进入到u-zookeeper的conf目录下将zoo_sample.cfg文件拷贝一份,命名为为:zoo.cfg
进入目录: # cd u-zookeeper/conf
拷贝
命名:# mv zoo_sample.cfg zoo.cfg
vim zoo.cfg修改内容以下:
配置文件里面的目录须要本身建立
接下来将上面的安装文件拷贝到集群中的其余机器上对应的目录下:
在master节点/roor/u-zookeeper/data/里面建立myid文件
echo "1" > /roor/u-zookeeper/data/myid
同理拷贝/etc/profile,/etc/environment至slaver1,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
以上操做完成后,请全部节点服务器重启。
在ZooKeeper集群的每一个结点上,执行启动ZooKeeper服务的脚本:zkServer.sh start
以下图所示:
其中,QuorumPeerMain是zookeeper进程,启动正常。
如上依次启动了全部机器上的Zookeeper以后能够经过ZooKeeper的脚原本查看启动状态,包括集群中各个结点的角色(或是Leader,或是Follower),以下所示,是在ZooKeeper集群中的每一个结点上查询的结果:
经过上面状态查询结果可见,slaver1是集群的Leader,其他的两个结点是Follower
另外,能够经过客户端脚本,链接到ZooKeeper集群上。对于客户端来讲,ZooKeeper是一个总体(ensemble),链接到ZooKeeper集群实际上感受在独享整个集群的服务,因此,你能够在任何一个结点上创建到服务集群的链接,例如:
# zkServer.sh stop
至此,Zookeeper集群安装完成!
四、HBase的安装和配置
# tar -zxvf hbase-0.96.0.tar.gz
更更名字为hbase:mv 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.clientPort:ZooKeeper的zoo.conf中的配置,客户端链接的端口。
hbase.zookeeper.property.dataDir:ZooKeeper的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
hbase(main):008:0> status
1 servers, 0 dead, 3.0000 average load
hbase(main):007:0> version
0.94.12, r1524863, Fri Sep 20 00:25:45 UTC 2013
建立一个名为 test 的表,这个表只有一个列为 cf。其中表名、列都要用单引号括起来,并以逗号隔开。
hbase(main):001:0> create 'test', 'cf'
0 row(s) in 10.3830 seconds
查看当前 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时,以前用的时:
可是存在问题,不能打开页面进行查看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