搭建方案(no_HA):
project |
hadoop |
hadoop |
Hbase |
zookeeper |
主机 |
||||
master1 |
Namenode |
datanode(NM) |
HMaster HRegionServer |
zk |
slave1 |
SNM,JHS |
datanode(NM) |
HMaster HRegionServer |
zk |
slave2 |
RM |
datanode(NM) |
HRegionServer |
zk |
安装JDK(jdk-7u40-linux-i586.tar.gz);(此步骤所有机子都要做)
部署目录 /opt/ jdk1.7.0_45
配置环境变量
(1) vi/etc/profile.d/java.sh (编辑文件)
(2) 添加
#set java environment
export JAVA_HOME=/opt/jdk1.7.0_45
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre:$PATH
export CLASSPATH=$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar
(3) 验证是否安装成功:java –version
修改hosts
(此步骤所有机子都要做)
vi /etc/hosts
修改为:ip自定义
192.168.1.101 master1
192.168.1.102 slave1
192.168.1.103 slave2
修改hostname(此步骤所有机子都要做)
vi/etc/sysconfig/network
修改为:
NETWORKING=yes
HOSTNAME=master1(slave1,slave2)
配置ssh访问(看说明)
1)在(master1)当前用户(hadoop)主目录下执行
(1)$ ssh-keygen-t rsa
(2)cat.ssh/id_rsa.pub >> .ssh/authorized_keys
(3)chmod700 .ssh
(4)chmod644 .ssh/authorized_keys
2)master1到slave1,slave2机器的SSH无密码登录
接下来把authorized_keys复制到的slave1,slave2上。
scp~/.ssh/authorized_keys 远程用户名@远程服务器IP:~/
现在是master1可以无密码访问slave1,slave2.
要想实现任意两台机器互访,就在每台机器上都生成id_rsa和id_rsa.pub,然后把每台机器的公钥都添加进authorized_keys,然后把authorized_keys分发到所有机器上。
关闭机器的防火墙和selinux(此步骤所有机子都要做)
关闭防火墙:
#/etc/init.d/iptables stop #关闭防火墙。
#chkconfig iptables off #关闭开机启动。
关闭selinux:
vi/etc/selinux/config,
把SELINUX=enforcing改成SELINUX=disable;需要重启机器
授时服务(此步骤所有机子都要做)
配置时间同步
crontab-e
/usr/sbin/ntpdatecn.pool.ntp.org
手动同步时间
/usr/sbin/ntpdatecn.pool.ntp.org
创建用户账号和Hadoop部署目录和数据目录(此步骤所有机子都要做)
#创建hadoop 用户
/usr/sbin/groupaddhadoop
#分配hadoop 到 hadoop组中
/usr/sbin/useraddhadoop -g hadoop
#创建hadoop,hbase,zookeepr部署目录
opt/hadoop-2.2.0
opt/hbase-0.96.0-hadoop2
opt/zookeeper-3.4.5
#修改目录结构权限为为hadoop
#本地文件系统涉及到的目录
mkdir -p /data/tmp_hadoop /data/hdfs/dn /data/hdfs/nn
/data/log/hadoop-hdfs /data/log/hadoop-yarn /data/log/hadoop-mapred
/data/yarn/local /data/yarn/logs
mkdir -p
/data/zookeeper/data/data/zookeeper/datalog
/data/tmp_hbase
/data/hbase
/data/journal
部署3个节点的 ZooKeeper,分别部署在master1、slave1、slave2三台机器上。ZooKeeper 部署的节点数为奇数个。
每个 ZooKeeper节点:
部署目录:/opt/zookeeper-3.4.5
创建目录
mkdir –p/data/zookeeper/data
mkdir –p/data/zookeeper/datalog
vi/etc/profile.d/zookeeper.sh
添加
#set zookeeper environment
export ZOOKEEPER_HOME=/opt/zookeeper-3.4.5
export PATH=$PATH:$ZOOKEEPER_HOME/bin
export ZOO_LOG_DIR=/data/zookeeper/datalog
#编辑zookeeper-3.4.5 /conf/zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir= /data/zookeeper/data
dataLogDir=/data/zookeeper/datalog
clientPort=2181
server.1=master1:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888
在各个zookeepr节点上修改myid
在dataDir目录中创建名为 “myid” 的文件,在 server.1 的myid 文件中写入”1”这个数字,在 server.2 的myid 文件写入”2”, server.3 写”3”。
比如:在master3上
echo 1 > /data/zookeeper/data/myid
zookeeper(所有zookeeper服务器都要运行)
zkServer.sh start
jps: QuorumPeerMain
部署目录:/opt/hadoop-2.2.0
创建目录
master1,slave1(NN,SNN)
mkdir –p /data/hdfs/nn
所有hadoop节点:
mkdir–p /data/tmp_hadoop /data/hdfs/dn /data/log/hadoop-hdfs /data/log/hadoop-yarn /data/log/hadoop-mapred /data/yarn/local /data/yarn/logs
vi/etc/profile.d/hadoop.sh
添加
#set hadoop environment
export HADOOP_HOME=/opt/hadoop-2.2.0
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
1) 配置masters,(这里指定Secondarynamenode)
slave1
2) 配置slaves
#标识集群的datanode
master1
lave1
slave2
3) 配置hadoop-env.sh
export JAVA_HOME=/opt/jdk1.7.0_45
export HADOOP_LOG_DIR=/data/log/hadoop-hdfs
export YARN_LOG_DIR=/data/log/hadoop-yarn
export HADOOP_MAPRED_LOG_DIR=/data/log/hadoop-mapred
4) 配置yarn-env.sh
export JAVA_HOME=/opt/jdk1.7.0_45
5) 编辑core-site.xml
6) 编辑hdfs-site.xml
7) 编辑mapred-site.xml
8) 编辑yarn-site.xml
master1(第一次需要格式化namenode)
hadoop namenode -format
启动(namenode,secondarynamenode,datanode)
start-dfs.sh
slave2,启动yarn(RM,NM)
start-yarn.sh
slave1,启动JHS
mr-jobhistory-daemon.sh start historyserver
访问:http://master1:50070
http://slave2:8088
http://slave1:19888
前提:Hadoop集群,zookeeper集群已搭建好。
部署目录:/opt/hbase-0.96.0-hadoop2
Hbase节点上创建目录:
mkdir –p/data/hbase/logs
mkdir –p/data/hbase/tmp_hbase
vi/etc/profile.d/java.sh (编辑文件)
#set HBase environment
export HBASE_HOME=/opt/hbase-0.96.0-hadoop2
export PATH=$PATH:$HBASE_HOME/bin
export HBASE_HEAPSIZE=4096
HBase是数据库,会在同一时间使用很多的文件句柄。大多数linux系统使用的默认值1024是不能满足的,
(ubuntu为例)
gedit /etc/security/limits.conf
hadoop -nofile 32768
hadoop soft/hard nproc 32000
gedit /etc/pam.d/ common-session
session required pam_limits.so
在分布式模式下,Hadoop版本必须和HBase下的版本一致。用你运行的分布式Hadoop版本jar文件替换HBaselib目录下的Hadoop jar文件,以避免版本不匹配问题。确认替换了集群中所有HBase下的jar文件。Hadoop版本不匹配问题有不同表现,但看起来都像挂掉了。(habse-0.96.0+hadoop-2.2.0,其中替换17个jar包)
1)修改/conf/regionservers文件,增加regionserver
master1
slave1
slave2
2)修改 /conf/hbase-env.sh
export JAVA_HOME=/opt/jdk1.7.0_45
export HBASE_CLASSPATH=/opt/hadoop-2.2.0/etc/hadoop
export HBASE_MANAGES_ZK=false
export HBASE_LOG_DIR=/data/hbase/logs
3)修改/conf/hbase-site.xml文件
master1上
bin/start-hbase.sh
访问 http://master1:60010
测试:bin/hbase shell