Hadoop Hbase完全分布式环境搭建(呕心沥血之作,为表支持请下载doc文件版,里面图文并茂详细介绍了hadoop完全分布式环境搭建全部步骤,条例清晰,并且经过测试验证通过!)http://download.csdn.net/detail/xh16319/7483027
Hadoop生态其他的相关产品的安装后续会更新,请持续关注!
由于资源限制,本文档的Hadoop的节点环境均部署在虚拟的linux上,使用的虚拟机和linux的版本如下:
VMware-workstation-full-8.0.2-591240.exe
[红帽企业.Linux.5].TLF-SOFT-RedHat.Enterprise.Linux.5.Update.2-XiSO.iso
Hadoop及其相关包版本如下:
hadoop-1.1.2.tar.gz
hbase-0.94.7-security.tar.gz
其他软件包版本如下:
jdk-6u24-linux-i586.bin
安装步骤省略
这里需要说明的是虚拟机的Network Adapter选择Host-only方式,并且保证VMware Network Adapter VMnet1为打开状态。
关于Network Adapter的几种桥接方式的区别如下,这里由于宿主机和客户机都在同一个电脑上,所以采用Host-only的方式。
宿主机(windows)与客户机(安装在虚拟机中的Linux)网络连接方式:
(1) host-only 宿主机与客户机单独组网。
优点:网络隔离
缺点:虚拟机与其他服务器之间不能通信
(2)bridge 客户机与宿主机在同一个局域网中。
优点:都在同一个局域网,可以互相访问
坏处:不安全
安装时,对于网卡的设置,采用默认的DHCP方式,后面再进行ip设置。
1. 关闭防火墙
执行命令:service iptables stop
验证:service iptables status
2. 关闭防火墙的自动运行
执行命令:chkconfig iptables off
验证:chkconfig --list | grep iptables
JDK同一安装在/opt/java/jdk1.6.0_24目录下,具体的安装和设置步骤省略
(1)选中将被复制的linux虚拟机,单击菜单“VM”-->“Manage”-->“Clone”
(2)按照步骤即可复制一个Linux虚拟机环境。
注意:
1.查看windows下VMware1的ip地址和子网掩码
2.分别设置三个节点的ip地址、子网掩码和网关。
重启网卡,执行命令service network restart,让其立即生效。
测试:在三个节点虚拟机中分别输入ping 192.168.75.10,ping 192.168.75.20,ping 192.168.75.30
(1)查看当前虚拟机的主机名:hostname
(2)修改当前会话中的主机名,执行命令hostname hadoop
但此种方式只对当前会话有效
(3)修改配置文件中的主机名,执行命令vi /etc/sysconfig/network
验证:重启reboot
对三个节点分别执行命令: vi /etc/hosts,均增加三行行内容,如下:
192.168.75.10 hadoop1
192.168.75.20 hadoop2
192.168.75.30 hadoop3
验证:ping hadoop1, ping hadoop2, ping hadoop3
Ø n客户端向服务器端发出连接请求
Ø n服务器端向客户端发出自己的公钥
Ø 客户端使用服务器端的公钥加密通讯密钥然后发给服务器端
Ø 如果通讯过程被截获,由于窃听者即使获知公钥和经过公钥加密的内容,但不拥有私钥依然无法解密(RSA算法)
Ø 服务器端接收到密文后,用私钥解密,获知通讯密钥
Ø ssh-keygen命令给服务器端产生公私钥密钥对,cp命令将服务器端公钥复制到客户端(注意在伪分布模式下服务器端和客户端是同一台机器),因此客户端本身就拥有了服务器端公钥,可以直接进行免密码接入
Ø n注意要以grid用户登录,在grid用户的主目录下进行操作!
Ø n每个节点作相同操作
(1)进入用户主目录,cd ~,执行命令 ssh-keygen -t rsa 产生秘钥,位于~/.ssh文件夹中
(2)执行命令 cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
(3)验证:ssh hadoop2(由于公钥还未分发到各个节点,所以这里只能ssh 本机)
ssh配置前,这里以hadoop3为例:
ssh配置后,这里以hadoop2为例:
对于每个节点,对集群中包括自己在内的所有节点均进行ssh登录,知道生成known_hosts文件未知,known_hosts文件中应该包括集群中所有节点的登录信息
注意:每次ssh登录 其他节点以后,要执行logout命令退回到本身的节点。
如:ssh hadoop2
logout
把各个节点的authorized_keys的内容互相拷贝加入到对方的此文件中,然后就可以免密码彼此ssh连入
验证:在hadoop1中执行ssh hadoop2,ssh hadoop3 看是否需要输入密码
在hadoop2中执行ssh hadoop1,ssh hadoop3 看是否需要输入密码
在hadoop3中执行ssh hadoop1,ssh hadoop2 看是否需要输入密码
(1) 用grid用户上传并解压hadoop-1.1.2.tar.gz,执行命令:tar zxvf hadoop-1.1.2.tar.gz
(2)将生成的hadoop-1.1.2拷贝至/home/grid/目录下
(3)用root用户修改环境变量:vi /etc/profile ,在grid用户下,其为只读文件
(4)修改hadoop-env.sh文件
取消掉第9行的注释,并配置自己的JAVA_HOME
export JAVA_HOME=/opt/java/jdk1.6.0_24
(5)修改core-site.xml文件
覆盖<configuration></configuration>
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://hadoop1:9000</value>
<description>change your own hostname</description>
</property>
</configuration>
注意:这里fs.default.name的值为要将作为NameNode的节点的IP,本示例中使用hadoop1作为 NameNode,故设置为hadoop1:9000,其他的节点的该配置文件中该值也是hadoop1:9000
(6)修改hdfs-site.xml文件
覆盖<configuration></configuration>
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
</configuration>
(7)修改mapred-site.xml文件
覆盖<configuration></configuration>
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>hadoop1:9001</value>
<description>change your own JobTracker hostname</description>
</property>
</configuration>
注意:这里mapred.job.tracker的值为要将作为JobTracker的节点的IP,本示例中使用hadoop1作为 JobTracker,故设置为hadoop1:9001,其他的节点的该配置文件中该值也是hadoop1:9001
(8)修改masters和slaves文件
masters中设置的是namenode、jobtracker、SecondaryNameNode所在的节点
Slaves中设置的是datanode和tasktracker所在的节点
(1)执行命令scp -r ./hadoop-1.1.2 hadoop2:/home/grid/
scp -r ./hadoop-1.1.2 hadoop3:/home/grid/
执行命令hadoop namenode -format 对hadoop进行格式化
格式化成功后将在/tmp目录下生成hadoop-grid目录
NameNode进程没有启动成功可能的因素?
(1)没有格式化
(2)配置文件只copy,不修改自己的hostname
(3)hostname与ip没有绑定
(4)SSH的免密码登录没有配置成功
注意:多次格式化hadoop也是错误的
解决办法:删除/tmp/*文件夹后,重新格式化
进入hadoop1/$HADOOP_HOME/bin(namenode和jobtracker所在的节点),执行start-all.sh命令启动守护进程,即可启动所有的服务
停止守护进程命令:stop-all.sh
hadoop1、hadoop2、hadoop3节点下分别执行jps命令:
用grid用户上传并解压hbase-0.94.7-security.tar.gz,执行命令:tar zxvf hbase-0.94.7-security.tar.gz,将解压后目录hbase-0.94.7-security 复制到/home/grid/目录下,并重命名为hbase-0.94.7
注意:选择hbase的版本的时候最好百度下,找到与已经安装的hadoop版本兼容的hbase版本,这里hadoop-1.1.2与hbase-0.94.7兼容。
切换到root账户,修改/etc/profile文件,新增如下两句:
执行source /etc/profile使其生效,执行hbase version命令查看安装版本
#Java环境
export JAVA_HOME=/opt/java/jdk1.6.0_24
#通过hadoop的配置文件找到hadoop集群
export HBASE_CLASSPATH=/home/grid/hadoop-1.1.2/conf
如下图:
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://hadoop1:9000/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.master</name>
<value>hadoop1:60000</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>hadoop1,hadoop2,hadoop3,hadoop4</value>
</property>
</configuration>
hbase.rootdir指定Hbase数据存储目录,如果/hbase目录不存在,则需要在namenode节点中通过hadoop fs -mkdir /hbase创建该目录
hbase.cluster.distributed 指定是否是完全分布式模式,单机模式和伪分布式模式需要将该值设为false
hbase.master指定Master的位置
hbase.zookeeper.quorum 指定zooke的集群,多台机器以逗号分隔
将所有的slavenode添加到这个文件,类似与hadoop中slaves文件,该文件原本为localhost,如下是我添加的内容,两台slavenode机器的域名(hosts文件中已做解析):
hadoop2
hadoop3
hadoop4
(1)将/home/grid/hbase-0.94.7/lib/hadoop-core-1.0.4.jar改为hadoop-core-1.0.4.jar.bak
(2)将/home/grid/hadoop-1.1.2/hadoop-core-1.1.2.jar拷贝到/home/grid/hbase-0.94.7/lib/
7. 复制Hbase到其它节点
scp -r /home/grid/ hbase-0.94.7 hadoop2:/home/grid/
scp -r /home/hadoop/ hbase-0.94.7 hadoop3:/home/grid/
scp -r /home/hadoop/ hbase-0.94.7 hadoop4:/home/grid/
启动hbase之前必须保证hadoop已经正常启动
启动hbase命令: start-hbase.sh
启动验证:
master节点输入jps
Slaves节点输入jps
或者在浏览器上输入http://192.168.75.10:60010/master-status
停止hbase命令:stop-hbase.sh
启动顺序:先启动Hadoop-》hbase,如果使用自己安装的zookeeper启动顺序是:Hadoop->zookeeper->hbase
停止顺序:hbase->zookeeper->hadoop
进入hbase的shell客户端:cd $HBASE_HOME/bin hbase shell
退出hbase的shell客户端:quit