主要是希望对以后能有个笔记的东西所以记下所有安装的步骤,也希望跟我同样初学这方面知识的朋友能有一些分享的意义。
一 使用VmWare安装CentOS6.4虚拟机
安装所需软件vmware、CentOS,我使用的vmware版本是7.0.0 build-203739,下载地址https://my.vmware.com/cn/web/vmware/downloads,注册什么的就请大家自己去解决了,CentOS用的是比较新的版本CentOS-6.4,镜像下载地址http://isoredirect.centos.org/centos/6/isos/x86_64/,只需要CentOS-6.4-x86_64-bin-DVD1.iso,2是一些附带的软件包。这个应该是32位和64位都支持的,本机是64位Windows7,本人没有测试过32位Windows7。
1.安装好VmWare后选择File-New-Virtual Machine,然后选择Custom(如下图),Next
2.选择默认WorkStation即可(如下图),Next
3.然后选择稍后安装操作系统(如下图),Next
4.然后选择所要安装的系统类型,这里选择Linux的CentOS 64-bit(如下图),Next
5. 然后选择名称以及相应wmware对应的文件路径,因为要安装hadoop所以我取名master(如下图),Next
6.然后选择CPU数和处理核心数,默认即可(如过cpu数超过实际cpu数量会出现警告,如下图),Next
7. 设置内存,由于本机只有4G内存,还要安装两台虚拟机所以就选了1G,如果实际内存比较大的话也可以酌情增加虚拟机内存,肯定是越大越好(如下图),Next
8.然后选择虚拟机联网方式,三种方式区别大致如下:
(1) BRIDGE:相当于主机和虚拟机连接到同一个hub上,虚拟机要和主机配置到同一网段上
(2) NAT:使用vmnet8,主机开启必要的vmware服务,如vmvare dhcp,虚拟机设置成dhcp方式即可,当然也可以手工设置成vmnet1同一网段,比较麻烦
(3)HOST-ONLY:使用vmnet1,直接和主机互联,可以使用ifconfig查看配置情况
详细可以参见http://blog.csdn.net/collection4u/article/details/14127671,本人选择的是桥接方式(如下图),Next
9.然后选择IO适配器,默认即可(如下图),Next
10.然后选择虚拟硬盘,由于是新建虚拟机所以选择create(如下图),Next
11.然后选择硬盘类型,默认即可(如下图),Next
12.然后设置硬盘大小以及虚拟硬盘文件存储方式,如果硬盘比较充裕的话建议选择第一项,即是不管虚拟机实际使用多少空间硬盘文件都为20g,本人的电脑硬盘装了太多视频,就选择第二项即是虚拟硬盘使用多少就占用多少实际硬盘空间(如下图),Next
13.然后设置镜像文件名称及路径,用于以后如果卸载Vmware或者其他原因,可以从此文件中直接恢复原来的虚拟机,本人选择和vmware相关虚拟机文件相同路径(即是上文中第5步的路径,如下图),Next
14. 然后还可以更改之前的选择,或者在这里就直接finish(如下图)
15.然后再到vmware的对应的WorkStation中配置选项,本例是右击master选择setting(如下图)
16.然后设置安装镜像文件即是前文中CentOS-6.4-x86_64-bin-DVD1.iso文件的地址(如下图)
17.然后ok,启动master,右击master->power on,然后选择第二项Next,开始安装虚拟机(如下图)
18.检查disc,skip即可
19.然后选择安装语言,不太清楚中文有没有乱码问题,不过英语也不会太难,就选择English吧(如下图),Next
20.然后选择键盘,U.S.English
21.然后选择存储设备,默认即可(如下图),Next
22.然后是否格式化虚拟机硬盘,选择是(如下图)
23. 然后设置虚拟机hostname,为后面安装hadoop做准备本机为master(如下图),Next
24.然后选择时区,上海台北香港重庆皆可(如下图),Next
25.然后设置root用户的密码,可以随便设自己记住就好,我怕记不住就设的master(如下图),Next,然后会提示你密码太简单了,选use anyway即可
26.然后是设置linux硬盘分区,我不太懂就选默认的分区方式了(如下图)
27.然后提示是否要覆写原有硬盘,选择是(如下图),然后需要一段时间
28.然后需要选择安装系统的类型,为了安装组件方便可以选minimal desktop就是带桌面的最小安装,不过本人由于电脑性能选择了minimal,同时自定义一些软件功能选择Customize now
29.然后选择安装定制软件功能,这步比较重要,一般选择Base System中的Base项和Compatibility Libraries(兼容)以及Perl Support(用来Vmware安装增强功能,必选)以及Performance Tools(可选,如下图)
30.然后Next开始安装,会花上10到20分钟不等,根据你选择系统及定制软件不同而不同,然后reboot重启,然后需要输入用户名和密码登录,用户现在只有root,密码即是前文所设置的master(如下图)
31.然后需要配置网络,使虚拟机能与真实主机互联
输入,如下图
然后按i键进行修改,结果如下图
其中IPADDR表示虚拟机ip地址,GATEWAY表示网关,NETMASK为子网掩码,一般家庭的路由器的gateway192.168.1.1居多,tenda路由器好像是192.168.0.1,不过也都可以修改,子网掩码一般为255.255.255.0,虚拟机地址由于使用的桥接方式,需要配置为和宿主机同一网段,即是192.168.0.*,并且该地址不能被其他局域网中主机所使用。
32.重启网络
输入命令
然而在重启成功之后,却无法连接到宿主机,后面发现是因为桥接所选用的网卡问题,如下图
修改vmware桥接网卡选择edit->Virtual Network Editor即可出现上述界面, 因为当时我是用的有线上网故应该使用Broadcom NetLink (TM) Gigabit Ethernet,而不是无线网卡,修改之后主机虚拟机能够互相ping通,如下图,
至此,centOS6.4的虚拟机安装结束,根据相同步骤可以配置一台slave配置其ip为192.168.0.169,用于实现分布式集群。
二 安装hadoop
需要的软件,SecureCRT用于远程连接CentOS,下载地址http://www.vandyke.com/download/index.html,java本文采用的jdk1.7.0_45 64位虚拟机,下载地址http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html,hadoop采用的版本为1.2.1,下载地址http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-1.2.1/其中的hadoop-1.2.1.tar.gz.将上述文件下载的jdk-7u45-linux-x64.tar.gz和hadoop-1.2.1.tar.gz使用filezilla上传到虚拟机master的usr目录下,filezilla下载地址https://filezilla-project.org/download.php,其中filezilla使用和scrt使用不再赘述,也可用其他工具只是个人喜好。
1.创建hadoop用户,配置ssh免登录
编辑本机hostname,这一步需要在master和slave上分别执行
- [root@master usr]# vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=master
NETWORKING=yes
HOSTNAME=slave
#::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.0.168 master
192.168.0.169 slave
passwd hadoop
使用root账户给每个hadoop用户设置权限
后进入hadoop用户
建立ssh目录,敲回车到底,(一般敲三次)这个命令将为hadoop
上的用户hadoop生成其密钥对,询问其保存路径时直接回车采用默认路径,当提示要为生成的密钥输入passphrase的时 候,直接回车,也就是将其设定为空密码。生成的密钥对
id_rsa,id_rsa.pub,默认存储在/home/hadoop/.ssh目录下
赋予755权限
此时在该目录下会有两个文件:id_rsa id_rsa.pub
这一步骤仅在master中上执行,下列命令会提示你输入其他机器的密码,按照提示输入即可,
如果失败可重新尝试执行命令
# 上面这条命令是把其他节点的公钥拷贝到master节点中的authorized_keys,有几个节点就需要运行几次命令,slave是节点名称
#把authorized_keys文件拷贝回每一个节点,在master上连接所有节点,输入如下命令,上有几个节点就要输入几次,
注意每次输入后,要返回slave节点,输入命令exit即可:
# 需要选择yes/no 选择yes即可
此时 ls .ssh 结果如下:
authorized_keys id_rsa id_rsa.pub known_hosts
当在master上用hadoop用户ssh slave时能够进入slave,反之在slave上用hadoop用户ssh master也能够进入master则说明ssh免登录配置成功,如果失败可以删除.ssh目录继续从新建ssh目录开始重新配置
2.安装java,这一步只需在master上执行
进入到usr目录下解压jdk-7u45-linux-x64.tar.gz
- [root@master ~]# cd /usr
- [root@master usr]# tar -zvxf jdk-7u45-linux-x64.tar.gz
配置环境变量,编辑/etc/profile
- [root@master usr]# vi /etc/profile
在文件末尾增加
- export JAVA_HOME=/usr/jdk1.7.0_45
为了使配置立即生效可以使用source命令
- [root@master usr]# source /etc/profile
验证java安装成功可输入
- [root@master usr]# java -version
出现下述信息安装成功
然后通过scp将java和配置文件发送到slave上,和直接在slave上面安装一样,这样更方便一些,如果没有配置JAVA_HOME目录权限可使用root账户
会提示,先选择yes,然后会要求输入root密码因为我们并没有配置root用户免登录,输入slave的root密码即可,然后就会显示文件传输的信息,在slave上使用java -version成功即可
3.1 将hadoop-1.2.1.tar.gz上传至usr目录并解压
编辑profile文件,vi /etc/profile增加如下内容:
export PATH=$HADOOP_HOME/bin$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
- # The java implementation to use. Required.
- xport JAVA_HOME=/usr/jdk1.7.0_45
3.6 配置core-site.xml 文件
- <property>
- <name>fs.default.name</name>
- <value>hdfs://master:9000</value>
- </property>
- <property>
- <name>hadoop.tmp.dir</name>
- <value>/home/hadoop/hadoopcore/hadoop-${user.name}</value>
- </property>
3.7 配置 mapred-site.xml 文件
- <property>
- <name>mapred.job.tracker</name>
- <value>master:9001</value>
- </property>
3.8 配置 hdfs-site.xml 文件
- <property>
- <name>dfs.datanode.max.xcievers</name>
- <value>8192<alue>
- </property>
- <property>
- <name>dfs.replication</name>
- <value>1</value>
- </property>
- <property>
- <name>dfs.support.append</name>
- <value>true</value>
- </property>
- <property>
- <name>dfs.permissions</name>
- <value>false</value>
- </property>
- <property>
- <name>dfs.name.dir</name>
- <value>/mnt/hadoopdata/name<alue>
- </property>
- <property>
- <name>dfs.data.dir</name>
- <value>/mnt/hadoopdata/data</value>
- </property>
[root@master conf]# chown -hR hadoop /mnt/hadoopdata
/etc/init.d/iptables status
会得到一系列信息,说明防火墙开着。
/etc/init.d/iptables stop
永久关闭:
chkconfig --level 35 iptables off (datanode 启动不了可能是这个原因)
3.10 hadoop的启动和停止
启动:配置好后在master机器上使用hadoop账户进入hadoop的bin目录 格式化文件系统(一定要)
检查hadoop是否正常启动,注意配置文件中直接复制代码可能会有乱码问题。同时可以通过观察日志查看是否正常。
A:
jps #查看是否启动正常!
B:
查看50070,54310,50030端口是否启动
#1080
#50030
#50060
netstat -tnl
或者远程访问如下链接
http://master:50070
http://master:50030
停止hadoop集群
4.1 下载zookeeper-3.4.5.tar.gz压缩包,上传至usr目并解压
4.2 zookeeper的环境变量配置
4.3将安装好的zookeeper目录下的 conf下的 zoo-example.cfg 文件重命名为 zoo.cfg,
[root@master conf]# vi zoo.cfg
修改其中的内容如下(未改动的内容省略):
clientPort=2181
server.0=master:2888:3888
server.1=slave:2888:3888
#dataDir 默认在/tmp 下,系统重启会导致数据丢失。后面的两行新增在文件的末尾,每行描述一 个节点。在 dataDir,即/home/hadoop/zookeeper 下创建一个 myid 文件,其中包含一个该 节点对应的数字,即 server.0 中'.'后面的数字,该数字应该在 1-255 之间。 这里输入的数字为“0”每台都要,下面列出master对应的操作及代码,
[root@master hadoop]# mkdir zookeeper
[root@master hadoop]# cd zookeeper/
[root@master zookeeper]# vi myid
插入0即可,对应在slave下面输入1
4.4 zookeeper的启动和停止
启动:/zookeeper-3.4.5/bin目录下
停止:/zookeeper-3.4.3/bin目录下
#HBase 集群需要依赖于一个 Zookeeper ensemble。HBase 集群中的所有节点以及要访问 HBase 的客户端都需要能够访问到该 Zookeeper ensemble。HBase 自带了 Zookeeper, 但为了方便 其他应用程序使用 Zookeeper,最好使用独安装的 Zookeeper ensemble。 此外,Zookeeper ensemble 一般配置为奇数个节点,因为此处主要是学习所以忽略掉很多安全性可靠性方面的问题。并且 Hadoop 集群、Zookeeper ensemble、 HBase 集群是三个互相独立的集群,并不需要部署在相同的物理节点上,它们之间是通过网 络通信的,此外因为没有给hadoop账户/usr/zookeeper-3.4.5目录的权限,所以zookeeper只能用root用户启动,也可以使用命令,
赋予hadoop权限,使得用hadoop账户也能启动zookeeper。
最后需要将zookeeper发送到slave上,仍然会提示输入slave的root账户密码
5.hbase安装配置
5.1 下载hbase-0.94.12.tar.gz压缩包,上传至usr目录并解压
5.2 hbase的环境变量配置 vi /etc/profile
export PATH=$HABSE_HOME/bin:$ZOOKEEPER_HOME/bin:$HADOOP_HOME/bin:$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
5.3配置 hbase-env.sh 该文件设定了 hbase 的环境,修改的部分如下(部分设置需要打开注释,即删除前面的#):
export HBASE_CLASSPATH=/usr/hadoop-1.2.1/conf
export HBASE_HEAPSIZE=768
export HBASE_MANAGES_ZK=false
其中,HBASE_CLASSPATH 指向存放有 Hadoop 配置文件的目录,这样 HBase 可以找到HDFS 的配置信息,由于本文 Hadoop 和 HBase 部署在相同的物理节点,所以就指向了Hadoop 安 装路径下的 conf 目录。HBASE_HEAPSIZE 单位为 MB,可以根据需要和实际剩余内存设置, 默认为 1000,因为是虚拟机并非实际应用所以应该小于虚拟机内存。HBASE_MANAGES_ZK=false 指示 HBase 使用已有的Zookeeper 而不是自带的。
5.4 配置hbase-site.xml 该文件是 hbase 最主要的配置文件:
在<configuration></configuration>之间添加如下语句:
- <property>
- <name>hbase.rootdir</name>
- <value>hdfs://master:9000/hbase</value>
- </property>
- <property>
- <name>hbase.master</name>
- <value>master</value>
- </property>
- <property>
- <name>hbase.cluster.distributed</name>
- <value>true</value>
- </property>
- <property>
- <name>hbase.zookeeper.quorum</name>
- <value>master,slave</value>
- </property>
- <property>
- <name>hbase.zookeeper.property.clientPort</name>
- <value>2181</value>
- </property>
- <property>
- <name>hbase.regionserver.restart.on.zk.expire</name>
- <value>true</value>
- </property>
- <property>
- <name>hbase.master.wait.on.regionservers.timeout</name>
- <value>10</value>
- </property>
- <property>
- <name>zookeeper.session.timeout</name>
- <value>180000</value>
- </property>
- <property>
- <name>hbase.regionserver.lease.period</name>
- <value>240000</value>
- </property>
- <property>
- <name>hbase.regionserver.handler.count</name>
- <value>15</value>
- </property>
- <property>
- <name>hbase.rpc.timeout</name>
- <value>240000</value>
- </property>
- <property>
- <name>hfile.block.cache.size</name>
- <value>0.3</value>
- </property>
第一项指定了 hbase 所使用的文件系统为 HDFS,根目录为 hdfs://master:9000/hbase, 该目录 应该由 HBase 自动创建,只需要指定到正确的 HDFS NameNode 上即可。第二项知道该hbase集群的master的IP。第三项指定 HBase 的工作模式为分布式的. 第四项指定zookeeper所在地址,第五项为zookeeper端口:2181
第六项 为遇到ZooKeeper session expired , regionserver将选择 restart 而不是 abort,
第七项 master和regionserver不能同时挂掉。只要不是同时挂掉,就不会导致recovery block的发生,也就不会发生lease的杯具了。不过这种情况很难发生,所以我们决定将hbase.master.wait.on.regionservers.timeout参数改为10秒。
第八项 ZK的超期参数,默认配置为3分钟,在生产环境上建议减小这个值在1分钟或更小。 设置原则:这个值越小,当RS故障时Hmaster获知越快,Hlog分裂和region 部署越快,集群恢复时间越短。但是,设置这个值得原则是留足够的时间进行GC回收,否则会导致频繁的RS当机(一般保持默认)。
第九项 regionserer租约时间,默认值是60s,也有点小,如果你的生产环境中,在执行一些任务时,如mapred时出现lease超时的报错,那这个时候就需要去调大这个值了
第十一项 出现租约过期的时候,可以根据需求适当的增加租约的有效时间,但却忽略了RPC超时的问题,所以在增大hbase.regionserver.lease.period的时候应该同时增大hbase.rpc.timeout,同时hbase.rpc.timeout应该等于或大于hbase.regionserver.lease.period。
第十二项 hfile.block.cache.size默认值:0.2说明:storefile的读缓存占用Heap的大小百分比,0.2表示20%。该值直接影响数据读的性能。
调优:当然是越大越好,如果写比读少很多,开到0.4-0.5也没问题。如果读写较均衡,0.3左右。如果写比读多,果断默认吧。设置这个值的时候,你同时要参考hbase.regionserver.global.memstore.upperLimit,该值是memstore占heap的最大百分比,两个参数一个影响读,一个影响写。如果两值加起来超过80-90%,会有OOM的风险,谨慎设置。
5.5 配置 regionservers 此文件指定了HBase 的RegionServers,相当于hadoop 配置文件中的slaves
修改其内容为:
将/usr/ hadoop-1.2.1/conf下的hdfs-site.xml 拷贝到 /usr/hbase-0.94.12/conf
5.6在将HBASE_HOME/lib下的hadoop-core-1.0.4.jar替换为HADOOP_HOME/lib目录下对应版本的jar包
5.7 将配置好的hbase发送到slave
5.8 hbase的启动和停止
启动 :hbase/bin目录下
启动成功的jps,以及hbase shell命令如下:
master
6571 Jps
4677 SecondaryNameNode
6225 HMaster
5729 QuorumPeerMain
4517 NameNode
4769 JobTracker
slave
27561 HRegionServer
2782 DataNode
27759 Jps
2879 TaskTracker
27361 QuorumPeerMain
在master上使用hbase shell,并用status查看,以及建立test表进行测试
Type "exit<RETURN>" to leave the HBase Shell
Version 0.94.12, r1524863, Fri Sep 20 04:44:41 UTC 2013
hbase(main):001:0> status
1 servers, 0 dead, 2.0000 average load
hbase(main):002:0> list
TABLE
0 row(s) in 0.1860 seconds
hbase(main):003:0> create 'test','testrow','testcolumn'
0 row(s) in 1.4720 seconds
hbase(main):004:0> put 'test','r1','testcolumn','v1'
0 row(s) in 0.3120 seconds
hbase(main):005:0> scan 'test'
ROW COLUMN+CELL
r1 column=testcolumn:, timestamp=1385331995265, value=v1
1 row(s) in 0.1280 seconds
hbase(main):006:0>
停止 :hbase/bin 目录下
* 注意:在启动的时候必须首先启动hadoop,再启动zookeeper,最后再启动hbase
1. start-all.sh
2. zkServer.sh start
3. start-hbase.sh
启动时可能会遇到permission denied这样的问题,应该是权限不够,只需要使用root账户将相应文件目录赋予hadoop账户权限即可,例如
停止的时候必须先停止hbase 再停止zookeeper 最后再停止hadoop
1. stop-hbase.sh
2. zkServer.sh stop
3. stop-all.sh