最近花几天测试了HBase的搭建和数据迁移。这里把搭建情况写一下。
HBase基于Hadoop的HDFS,需要先搭建出Hadoop的管理节点namenode(master)和数据节点datanode(slave)。测试环境中,使用一台namenode和三台datanode。
首先需要对主机系统进行设置:
将每个节点的ip地址、主机名加入/etc/hosts文件中,并且注意删除127.0.0.1上对应的主机名。这是因为hbase需要在配置文件中通过主机名进行访问。如果直接使用ip地址,将会产生各种问题。
多台服务器集群最好使用NTP服务进行时间统一,防止产生数据不一致。
设置系统最大打开文件数。hadoop同时访问文件数量会很大,需要更改linux这些参数。
#vi /etc/sysctl.conf
fs.file-max = 262144
net.ipv4.ip_local_port_range = 1024 65000
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.rmem_default = 1048576
net.core.wmem_default = 524288
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.core.netdev_max_backlog = 2500
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30
立即生效
# sysctl –p
#vi /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
hadoop soft nofile 32768
hadoop hard nofile 65535
hadoop soft nproc 30000
hadoop hard nproc 32000
将pam_limits.so加入启动文件中
#vi /etc/pam.d/login
32:session required /lib/security/pam_limits.so
64:session required /lib64/security/pam_limits.so
关闭iptables
Hadoop服务可能被iptables所拦截。测试环境中可直接关闭iptables,实际环境中根据需要打开相应端口。
#service iptables stop
或在/etc/rc.d/rc.local文件末尾添加如下内容,使得开机时关闭防火墙:
service iptables stop
创建系统用户hadoop
#useradd hadoop
#passwd hadoop
hadoop和hbase的操作将默认使用这个用户进行。而且hadoop、hbase的所在文件夹归属也要改为hadoop用户。
ssh无密码访问
使用ssh的rsa密钥方式,让master主机可以直接访问slave节点的相应目录。
使用hadoop用户,在/home/hadoop下执行
$ssh-keygen –t rsa
$cd .ssh
$cat id_rsa.pub >>authorized_keys
交换公钥
在master上hadoop用户
$cd /home/hadoop
$ssh-copy-id -i $HOME/.ssh/id_rsa.pubhadoop@node2
安装hadoop
创建目录
#mkdir /hadoop
将目录归属给予hadoop用户
#chown -R hadoop:hadoop /hadoop
su – hadoop
创建HDFS存储目录
$mkdir -p /hadoop/tmp
解压
$cp hadoop-1.0.4-bin.tar.gz /hadoop/
$cd /hadoop
$tar -zxvf hadoop-1.0.4-bin.tar.gz
更改hadoop环境配置文件
$cd /hadoop/hadoop-1.0.4/conf
$vi hadoop-env.sh
export JAVA_HOME=/opt/jdk1.6.0_32
更改配置文件
在/hadoop/conf目录下
$vi core-site.xml
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://node1:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/hadoop/tmp</value>
</property>
</configuration>
第一项指定文件系统为node1节点9000端口上的HDFS,第二项指定hadoop所有数据的保存路径(该路径要存在)该项默为/tmp/hadoop-{username},系统重启可能会导致数据丢失。
$vi mapred-site.xml
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>node1:9001</value>
</property>
<property>
<name>mapred.map.java.opts</name>
<value>-Xmx512m</value>
</property>
<property>
<name>mapred.child.java.opts</name>
<value>-Xmx512m</value>
</property>
</configuration>
第一项指定JobTracker的服务端口为node1的9001端口,第二、三项设定jvm堆空间,防止运行Map-Reduce作业时出现内存不足,这两项要根据实际的需要和系统空闲的内存容量设定。
$vi hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.support.append</name>
<value>true</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
<property>
<name>dfs.datanode.max.xcievers</name>
<value>4096</value>
</property>
</configuration>
第一项设定了文件系统备份的个数,通常为3,第二项允许对文件的append操作,是为HBase设置的,第三项关闭权限检查,方便以后的远程的hadoop-eclipse插件访问hdfs,第四项设置DataNode同时可供访问的文件数上限,由于HBase需要同时操作大量的文件,该项至少要设置为4096。
指定namenode
$vi masters
此文件指定HDFS的SecondaryNameNode所在的节点,例如:
node1
指定datanode
$vi slaves
此文件指定HDFS的DataNode所在的节点,例如包含三行:
node2
node3
node4
Hadoop配置完成后,将配置好的Hadoop安装目录下所有文件分发到集群中所有节点的/hadoop/hadoop-1.0.4路径下。各个节点文件夹内容一致,只有slaves文件可以不在slave节点上标明。
$cd /hadoop/hadoop-1.0.4/conf/
$scp core-site.xml hadoop-env.shhdfs-site.xml mapred-site.xml masters slaveshadoop@node2:/hadoop/hadoop-1.0.4/conf/
启动hadoop
在master节点上(node1)格式化HDFS
$ /hadoop/hadoop-1.0.4/bin/hadoop namenode –format
启动hadoop
$ /hadoop/hadoop-1.0.4/bin/start-all.sh
管理
可使用浏览器访问以下网址进行hadoop的管理
http://192.168.11.26:50070
http://192.168.11.26:50030