1、第 1 章 集群的搭建1.1 集群的结构实验环境中共有 6 台服务器,搭建完全分布式 HDFS 与 HBase 环境,采用的 Hadoop 与 HBase 版本为 hadoop0.20.2HBase0.92.0,其中一台节点做为NameNode 和 Master,另一台做为 Master 备份节点(可以不要备份 Master 节点),剩余四台则做为 DataNode 和 RegionServer 节点,并且在其上运行 Zookeeper服务,整个实验环境结构如 图 3-1 所示。D a t a N o d e 集群运行 R e g i o n S e r v e r 和 Z o o k e e
2、 p e rM a s t e r 热备份主备图 1-1 HBase 集群结构1.2 基础环境整个系统要能正常的运行,在各机器上安装需要的程序软件之前,也要正确的配置好网络连接、程序参数和系统设置等,主要包括:操作系统Ubuntu10.04、sun-java-6 和 OpenSSH。分别在每台服务器上安装上述的系统和程序,过程中要注意:根据 Hadoop 和 HBase 的系统兼容性要求 Linux 系统的版本可以不一致,不影响 HDFS 和 HBase 的运行。JDK 的版本、安装位置和环境变量的设置都应保持一致。OpenSSH 要设置为无密码访问,确保各服务器之间能正常通信。各服务器配置如
3、 表 3-1 所示。表 1-1 服务器的配置信息主机名 IP 地址(在同一网段内) 备注Master1Master2Slave1Slave2Slave3Slave4192.168.1.100192.168.1.99192.168.1.101192.168.1.102192.168.1.103192.168.1.104NameNode 和 Master 节点Master 备份节点DataNode 和 RegionServerDataNode 和 RegionServerDataNode 和 RegionServerDataNode 和 RegionServer1.3 软件的安装集群中 Hadoo
4、p 和 HBase 的版本要保持一致,并确保 Hadoop 和 HBase 版本相互之间兼容。1.3.1 SSH 设置1.3.1.1 免密码 SSH 设置。生成密钥对,执行如下命令:$ ssh-keygen -t rsa然后一直按 键,就会按照默认的选项将生成的密钥对保存在.ssh/id_rsa 文件中,如图 1-9 所示。图 1-9 将密钥对保存在.ssh/id.rsa 文件中进入.ssh 目录,执行如下命令:$ cp id_rsa.pub authorized_keys此后执行$ ssh localhost,可以实现用 SSH 连接并且不需要输入密码。1.3.1.2 SSH 配置。该配置主
5、要是为了实现在机器之间执行指令时不需要输入密码。在所有机器上建立.ssh 目录,执行:$ mkdir .ssh在 ubuntunamenode 上生成密钥对,执行:$ ssh-keygen -t rsa然后一直按 键,就会按照默认的选项将生成的密钥对保存在.ssh/id_rsa 文件中。接着执行如下命令:$cd /.ssh$cp id_rsa.pub authorized_keys$scp authorized_keys ubuntudata1:/home/grid/.ssh$scp authorized_keys ubuntudata2:/home/grid/.ssh最后进入所有机器的.ss
6、h 目录,改变 authorized_keys 文件的许可权限:$chmod 644 authorized_keys这时从 ubuntunamenode 向其他机器发起 SSH 连接,只有在第一次登录时需要输入密码,以后则不再需要。1.3.2 JDK 安装实验使用 jdk-6u24-linux-x86.bin,软件放在共享文件夹下。把 Java 安装到目录/usr/ java/jdk1.6.0_24 ,使用如下命令:$ cd /usr/java/$ /mnt/hgfs/share/jdk-6u24-linux-x86.bin1.3.2.1 JDK 设置编辑系统文件/etc/profile ,在
7、文件最后添加 JDK 的环境变量。#set java environmentJAVA_HOME=/usr/ java/jdk1.6.0_24CLASSPATH=.:$JAVA_HOME/bin:$PATHPATH=$JAVA_HOME/bin:$PATHExport JAVA_HOME CLASSPATH PATH1.3.3 Hadoop 的安装实验使用的是 Hadoop-0.20.2.tar.gz 安装包,包括 HDFS 和 MapReduce,安装过程如下:首先把 Hadoop-0.20.2.tar.gz 安装包解压到 Linux /home/UserName 目录下,命令为:$tar -
8、zxvf / Hadoop-0.20.2.tar.gz /home/UserName解压文件之后需要对 Hadoop 进行配置,Hadoop 的配置文件存放在/home/UserName/hadoop-0.20.2/conf 目录之下,其中包括一个环境配置文件Hadoop-env.sh、核心配置文件 core-site.xml、分布式文件系统 HDFS 配置文件hdfs-site.xml、 MapReduce 计算框架配置文件 mapred-site.xml、主节点配置文件masters 和从节点配置文件 slaves,需要对各文件进行 表 3-2 所示配置。表 1-2 Hadoop 配置文件
9、文件名 注释Hadoop-env.shcore-site.xmlhdfs-site.xmlmapred-site.xmlmastersslaves配置 Java 环境变量:JAVA_HOME=/usr/java/jdk1.6.0_21HDFS 服务端口:fs.default.name=hdfs:/localhost:9000配置 HDFS 的参数:如数据副本数目等MapReduce 服务端口:mapred.job.tracker=localhost:9001设置 NameNode,添加 NameNode 主机名设置 Slaves,所有 DataNode 主机名在一台服务器上安装完之后,可以把
10、Hadoop 目录下的所有文件 Copy 到集群中其它服务器上来完成整个集群的安装,其命令为:$scp -rf /home/UserName/hadoop-0.20.2/ slave1:/home/Username/运行 Hadoop 前要对 NameNode 的命名空间进行初始化,在 Hadoop 目录下运行:$bin/hadoop NameNode -format然后启动 Hadoop 的守护进程:$bin/start-all.sh系统成功运行之后 master 之上将会运行 NameNode、Secondary NameNode和 JobTracker 三个进程, slave 节点之上会
11、运行 DataNode 和 TaskTracker 二个进程。通过命令:$bin/hadoop dfsadmin -report可以查看整个系统的运行状态信息。1.3.4 HBase 的安装HBase 的安装包 hbase-0.92.0.tar.gz 包含分布式数据库 HBase 和Zookeeper,将其解压到目录 /home/UserName/下。 HBase 的配置文件在 conf 目录下,包含环境配置文件 hbase-env.sh、HBase 数据库运行参数配置文件 hbase-site.xml 和 Region 服务器列表文件 regionservers,需要对文件进行如 表 3-3
12、 所示配置:表 1-3 HBase 配置文件文件名 注释hbase-env.shhbase-site.xmlregionservers设置由 HBase 管理 Zookeeper:HBASE_MANAGES=true设置 HBase 的参数:hbase:rootdir=hdfs:/UbuntuMaster:9000/hbasehbase.cluster.distributed=trueRegion 服务器列表HBase 是运行在 HDFS 之上的,所以必须确保 HDFS 处于正常运行状态。同时因为存在版本兼容性问题,在启动 HBase 之前必须让 HBase 确定集群中所使用的 Hadoop
13、的版本,需要把 Hadoop 目录下的 hadoop-0.20.2-core.jar 替换掉HBase/lib 目录下的 hadoop-core-1.0.0.jar。最后确保集群中每台服务器的系统时间保持相对一致(误差小于 30 秒) ,进入 HBase 目录输入命令以启动 HBase:$bin/start-hbase.sh接着启动 HBase 的外壳程序,命令如下:$bin/hbase shell在 shell 模式下可以对 HBase 进行创建表、添加数据、读取数据和删除表等操作。第 2 章 实验中常见的问题和解决方法2.1 问题 1:节点不能正常启动1.Datanode, RegionS
14、erver 进程可以启动但是系统不能正常使用- 节点系统时间不同步。解决方法:修改集群各个节点的系统时间,把时间误差控制在 30 秒之内,命令为:$Sudo Date s time$hwclock systohc 2.Datanode 进程启动后不久,自动结束-系统命名空间出错解决方法:由于 namenode 和 datanode 空间版本不匹配,需要把所有Datanode 节点存储的内容删除,然后重新 formate 命名空间,在重新启动Hadoop,可以解决这个问题2.2 问题 2:节点能够正常启动,但是某些 datanode 不能访问。1如果是在版本较新的桌面 linux 系统中,可能是
15、 IP 配置出现问题,要把IPV6 的配置清空,禁用 IPV6 服务。2.长时间运行之后,也会出现个别节点不提供服务的情况,这是需要把该节点的服务关闭后重新启动。$HBase regionserver start2.3 问题 3:HMaster 不能启动错误 Address already in use9000 端口已经被占用,可以查看系统占用 9000 端口的服务,很有可能是多吃启动 HBase 并且没有正常结束的原因,可以重新启动计算机。如果 9000端口被其他服务占用可以为 HBase 重新配置其他端口2.4 问题 4:数据备份和数据库切换问题HBase 数据库是在 HDFS 的文件系统
16、上创建一个存储目录,所以要备份HBase 数据只需要在 HDFS 的 shell 中,在 HBase 目录 copy 到本地即可。如果要更换数据库,需要修改 HBase 的配置文件,改变 HBase 指向的文件目录即可。2.5 问题 5:Call to master:9000 failed on local exception主要解决方法:关闭 Master 的防火墙2.6 为题 6:WebServer 访问 HBase 数据连接问题解决方法:在所有的集群节点上面运行 zookeeper 服务,特别是 Master 节点上。因为,访问 HBase 的第一步是通过 Zookeeper 访问.ROOT.表。2.7 问题 7 :WebServer 访问 HBase 的 DNS 问题,不能解析所有的节点解决方法,把 Master 节点上的 HOSTS 文件内容拷贝到访问上去。