HDFS和Hbase安装指南
- 硬件和操作系统建议
CPU | Intel - Nehalem (2008发布) 或以后发布的CPU AMD - Bulldozer (2011发布)或以后发布的CPU |
CPU核心数 | 16或者24或者32核 |
内存 | 最低64GB内存,建议128G及以上 |
存储 | 提供足够大磁盘存储空间即可,这取决于数据量大小和文件副本数。 |
网卡 | 千兆或万兆以太网卡 |
64位 Linux的操作系统(推荐CentOS6.5) | |
Red Hat Enterprise Linux (RHEL) 5.7/6.2/6.4 | |
CentOS 5.7/6.2/6.5 | |
Ubuntu 10.04/12.04 or Debian 6.03. |
2.写在前面
文档中操作均为非 root 权限,所以有些命令行需要加 sudo,如果你是 root 身份运行,请忽略 sudo。下载安装的软件建议都放在 home 目录之上,比如/home/hadoop/workspace中(代表在hadoop用户目录下的workspace文件夹),这样比较方便,以免权限问题带来不必要的麻烦。
接下来的操作均以1个master,2个slave的集群方案来进行配置,多个slave操作请根据实际配置。
以下是本次安装的软件环境版本:
CentOS-6.5
jdk1.7.0_80
hadoop-2.7.3
zookeeper-3.4.9
hbase-1.2.4
注 : 所需软件统一放置在安装介质文件夹中
3.环境准备
1)修改主机名称
我们将搭建1个master,2个slave的集群方案。
首先修改主机名vi /etc/hostname
在master上修改为master,其中一个slave上修改为slave1,另一个slave上修改为slave2,依此类推。
2)配置hosts
每台主机上都要修改host文件
vi /etc/hosts
10.1.1.107 master
10.1.1.108 slave1
10.1.1.109 slave2
注:红色ip地址根据实际填写
3)配置之后在每台机器都ping一下用户名看是否生效
ping slave1
ping slave2
注意: 修改完以上两步之后记得断开重新连接下如果没有生效则要重启下机器显示才会生效,效果如下
- 创建用户
注意:创建用户要在所有机器都创建
1. adduser hadoop #创建hadoop用户
2. passwd hadoop #设置密码
3. usermod -a -G hadoop hadoop #将hadoop用户加入到hadoop用户组
4. vim /etc/sudoers #修改sudoers给hadoop用户赋予sudo权限
# 修改内容如下:
root ALL = (ALL) ALL
hadoop ALL = (ALL) ALL
强制保存 :wq!
- SSH免密码登录
注意 : 在设置免密前要先切换到hadoop用户
su - hadoop #切换hadoop用户
1)安装Openssh server(如果已安装忽略该步骤)
#ubuntu安装 sudo apt-get install openssh-server
#centos安装 sudo yum install openssh-server
2)在所有机器上都生成私钥和公钥(所有节点都要在hadoop用户下执行)
ssh-keygen -t rsa #一路回车
3)发送id_rsa.pub给master节点,传输公钥可以用scp来传输。
scp ~/.ssh/id_rsa.pub hadoop@master:~/.ssh/id_rsa.pub.slave1 #在slave1上执行
scp ~/.ssh/id_rsa.pub hadoop@master:~/.ssh/id_rsa.pub.slave2 #在slave2上执行
4)在master上,将所有公钥加到用于认证的公钥文件authorized_keys
cat ~/.ssh/id_rsa.pub* >> ~/.ssh/authorized_keys #合并id_rsa.pub文件
5)将公钥文件authorized_keys分发给每台slave
scp ~/.ssh/authorized_keys hadoop@slave1:~/.ssh/ #在master执行,发送给slave1
scp ~/.ssh/authorized_keys hadoop@slave2:~/.ssh/ #在master执行,发送给slave2
- 授权
chmod 600 ~/.ssh/* #每台机器都要执行,权限过大或过小都会影响免密登录
7)在每台机子上验证SSH无密码通信
ssh master
ssh slave1
ssh slave2
注意:验证完成后记得返回原节点,以免后续执行命令错误
6.安装 jdk
注意:安转jdk需要在所有机器都安装
1)将安装介质文件夹中的jdk-7u80-linux-x64.tar.gz上传到~/workspace目录下,然后解压
tar -zxvf jdk-7u80-linux-x64.tar.gz #解压文件
- 修改环境变量sudo vim /etc/profile,添加下列内容:
export WORK_SPACE=/home/hadoop/workspace
export JAVA_HOME=$WORK_SPACE/jdk1.7.0_80
export JRE_HOME=/home/hadoop/workspace/jdk1.7.0_80/jre
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export CLASSPATH=$CLASSPATH:.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
3)然后使环境变量生效,并验证 Java 是否安装成功
source /etc/profile #生效环境变量
java -version #如果打印出如下版本信息,则说明安装成功
java version "1.7.0_80"
Java(TM) SE Runtime Environment (build 1.7.0_80-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode)
#如果没有打印出以上信息,或者非1.7.0_80版本,输入以下内容
echo $JAVA_HOME #输出以下信息也能说明成功
/home/hadoop/workspace/jdk1.7.0_80
- 给java下的/bin授权
chmod 755 /home/hadoop/workspace/jdk1.7.0_80/bin/* #授权bin
5)在其他节点机器上执行相同操作(步骤同上)
7.安装配置 Hadoop HDFS
注意:在master上进行配置
1)首先将hadoop-2.7.3.tar.gz上传到~/workspace,在~/workspace中解压
tar -zxvf hadoop-2.7.3.tar.gz #执行解压
- 配置 Hadoop
cd ~/workspace/hadoop-2.7.3/etc/hadoop #进入hadoop配置目录
需要配置有以下7个文件:hadoop-env.sh,yarn-env.sh,slaves,core-site.xml,hdfs-site.xml,maprd-site.xml,yarn-site.xml
·hadoop-env.sh中配置JAVA_HOME
# The java implementation to use.
export JAVA_HOME=/home/hadoop/workspace/jdk1.7.0_80
·yarn-env.sh中配置JAVA_HOME
# some Java parameters
export JAVA_HOME=/home/hadoop/workspace/jdk1.7.0_80
·slaves中配置slave节点的ip或者host
sudo vim slaves #编辑slaves文件添加以下节点信息(如果原来有locahost的话记得删除)
slave1
slave2
·core-site.xml配置
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000/</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/home/hadoop/workspace/hadoop-2.7.3/tmp</value>
</property>
</configuration>
·hdfs-site.xml配置
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:9001</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/home/hadoop/workspace/hadoop-2.7.3/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/home/hadoop/workspace/hadoop-2.7.3/dfs/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
</configuration>
·mapred-site.xml配置,没有该文件直接执行以下命令
sudo vim mapred-site.xml #新建文件mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
·yarn-site.xml配置
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>master:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:8035</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>master:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master:8088</value>
</property>
</configuration>
- 将配置好的hadoop-2.7.3文件夹分发给所有slaves
注意:记得首先在各个机器上创建workspace目录
scp -r ~/workspace/hadoop-2.7.3 hadoop@slave1:~/workspace/ #分发给slave1
scp -r ~/workspace/hadoop-2.7.3 hadoop@slave2:~/workspace/ #分发给slave2
- 启动Hadoop HDFS
- 关闭防火墙
chkconfig iptables off #设置开机不自启
sudo service iptables stop #关闭防火墙
- 在 master 上执行以下操作,就可以启动 hadoop 了。
cd ~/workspace/hadoop-2.7.3 #进入hadoop目录
bin/hadoop namenode -format #格式化namenode
sbin/start-dfs.sh #启动dfs
sbin/start-yarn.sh #启动yarn
3)验证 Hadoop 是否安装成功
可以通过jps命令查看各个节点启动的进程是否正常。
master 上应该有以下几个进程:
$ jps #run on master
3407 SecondaryNameNode
3218 NameNode
3552 ResourceManager
3910 Jps
每个slave上应该有以下几个进程:
$ jps #run on slaves
2072 NodeManager
2213 Jps
1962 DataNode
或者在浏览器中输入 http://master:50070(也可以进入http://master:8088查看),应该有 hadoop 的界面出来了,并能看到 slave1 和 slave2 节点。
- 验证HDFS
随便上传个文件到hdfs
cd /home/hadoop/workspace/hadoop-2.7.3/bin #进入命令目录
./hdfs dfs -mkdir /master #创建master目录
./hdfs dfs -put hdfs.cmd /master #将hdfs.cmd上传到/master目录下
./hdfs dfs -ls /master #查看上传是否成功
如果能看到刚上传的文件则说明HDFS文件系统启动成功
还可以进入https://master:50070查看网页版验证(Utilities>Browse the file system),master不行就直接输入主节点ip
注:到这里HDFS文件系统就搭建完成了
9.安装 zookeeper-3.4.9
1)上传文件zookeeper-3.4.9.tar.gz到~/workspace目录下
解压缩 zookeeper-3.4.9.tar.gz
tar -zxvf zookeeper-3.4.9.tar.gz
3)进入到 /home/hadoop/workspace/zookeeper-3.4.9/conf 目录中
sudo vim zoo.cfg #新建zoo.cfg配置文件 ,添加以下内容
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/hadoop/workspace/zookeeper-3.4.9/data
dataLogDir=/home/hadoop/workspace/zookeeper-3.4.9/logs
clientPort=2182
server.1=master:2287:3387
server.2=slave1:2287:3387
server.3=slave2:2287:3387
保存并关闭 zoo.cfg 文件
- 进入到/home/hadoop/workspace/zookeeper-3.4.9/data目录下
注意:data目录如果没有要新建
mkdir data #在/home/hadoop/workspace/zookeeper-3.4.9/目录下新建data目录
sudo vim myid #生成一个myid文件,内容为1
1
5)用 vim 打开 /etc/ 目录下的配置文件 profile:
sudo vim /etc/profile #并在其尾部追加如下内容:
export ZOOKEEPER_HOME=/home/hadoop/workspace/zookeeper-3.4.9
export PATH=$ZOOKEEPER_HOME/bin:$PATH
export PATH
·使 /etc/ 目录下的 profile 文件即可生效:
source /etc/profile
- 将配置好的文件分发给各节点(注意zookeeper的节点数必须是单数且最少3个)
scp -r ~/workspace/zookeeper-3.4.9 hadoop@slave1:~/workspace/ #分发给slave1
scp -r ~/workspace/zookeeper-3.4.9 hadoop@slave2:~/workspace/ #分发给slave2
·分发完之后记得改下各个slave上的/home/hadoop/workspace/zookeeper-3.4.9/data目录下的myid
sudo vim myid #在slave1上修改myid文件,内容为 2
sudo vim myid #在slave2上修改myid文件,内容为 3
- 启动 zookeeper 服务
注意:记得在每个节点都要执行启动命令
进入/home/hadoop/workspace/zookeeper-3.4.9/bin
./zkServer.sh start #启动zoopeeper
如打印如下信息则表明启动成功:
ZooKeeper JMX enabled by default
Using config: /home/hadoop/workspace/zookeeper-3.4.9/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
8)查询 zookeeper 状态
./zkServer.sh status #查看状态
10.安装部署hbase
1)上传文件hbase-1.2.4-bin.tar.gz到~/workspace目录下
解压缩 hbase-1.2.4-bin.tar.gz
tar -zxvf hbase-1.2.4-bin.tar.gz #解压文件
2)进入~/workspace/hbase-1.2.4/conf修改配置文件
·hbase-env.sh配置
加上以下属性:
export JAVA_HOME=/home/hadoop/workspace/jdk1.7.0_80
export HBASE_LOG_DIR=/home/hadoop/workspace/hbase-1.2.4/logs
export HBASE_MANAGES_ZK=true
export HBASE_HOME=/home/hadoop/workspace/hbase-1.2.4
export HBASE_HEAPSIZE=4G
附加属性含义:
export JAVA_HOME # java安装路径
export HBASE_LOG_DIR # Hbase日志路径,要新建logs文件夹 mkdir logs
export HBASE_MANAGES_ZK #true表示由Hbase负责启动关闭zookeeper
export HBASE_HOME #Hbase 安装路径
export HBASE_HEAPSIZE #内存设置,根据实际情况设定
·hbase-site.xml配置
该文件默认没有任何属性,需要自行添加。
在 <configuration></configuration> 节点内添加以下属性:
<property>
<name>hbase.rootdir</name>
<value>hdfs://master:9000/hbase</value>
</property>
<property>
<name>hbase.master.port</name>
<value>60005</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.client.write.buffer</name>
<value>2097152</value>
</property>
<property>
<name>hbase.client.pause</name>
<value>100</value>
</property>
<property>
<name>hbase.client.retries.number</name>
<value>35</value>
</property>
<property>
<name>hbase.client.scanner.caching</name>
<value>100</value>
</property>
<property>
<name>hbase.client.keyvalue.maxsize</name>
<value>10485760</value>
</property>
<property>
<name>hbase.rpc.timeout</name>
<value>60000</value>
</property>
<property>
<name>hbase.snapshot.enabled</name>
<value>true</value>
</property>
<property>
<name>hbase.security.authentication</name>
<value>simple</value>
</property>
<property>
<name>zookeeper.session.timeout</name>
<value>60000</value>
</property>
<property>
<name>zookeeper.znode.parent</name>
<value>/hbase</value>
</property>
<property>
<name>zookeeper.znode.rootserver</name>
<value>root-region-server</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>master,slave1,slave2</value>
</property>
<property>
<name>hbase.zookeeper.property.clientPort</name>
<value>2181</value>
</property>
<property>
<name>hbase.regionserver.handler.count</name>
<value>100</value>
</property>
部分属性值解释:
Hbase.rootdir #Hbase在hdfs上的存储根目录
Hbase.master.port #Hbase运行master 的端口号,设置的时候,保证不冲突就行
Hbase.cluster.distributed #设置集群处于分布式模式
Hbase.client.write.buffer #客户端读写缓冲区内存设置
Hbase.client.pause #客户端最大等待时间
Hbase.client.retries.number #客户端最大尝试次数
Zookeeper.znode.paren #Hbase的zookeeper配置文件路径设置
Hbase.zookeeper.quorum #全分布设置,zookeeper的法定服务器列表。
Hbase.regionserver.handler.coun #Hbase 事件句柄数量设置
·regionservers配置
此文件中的默认值是localhost,表示Hbase只在本机上运行,如果是集群环境,我们设置Hbase运行在各个datanode上
例:
我们将Hbase安装在namenode 节点上,设置Hbase运行在datanode上
所以配置如下:
slave1
slave2
·权限设置
sudo chmod a+x -R /bin #添加可执行权限
- 配置完成分发文件到各个节点吧
scp -r ~/workspace/hbase-1.2.4 hadoop@slave1:~/workspace/ #分发给slave1
scp -r ~/workspace/hbase-1.2.4 hadoop@slave2:~/workspace/ #分发给slave2
注意:传完后记得在slave节点给/bin目录授权
sudo chmod a+x -R /bin #添加可执行权限
- 验证hbase
·启动hbase服务
cd ~/workspace/hbase-1.2.4/bin #进入hbase bin目录
./start-hbase.sh #启动hbase
进入网页版验证
hbase网页监控:http://master:16010 #如果master进不去改为主节点ip
·进入habse库
./bin/hbase shell #进入hbase库
出现上图所示为成功进入输入
status #查看服务状态,出现如下结果表示hbase正常
·验证hbase库
list #查看所有表
create 'member','m_id','address','info' #创建一个表member
·向member表插入几条记录
put'member','scutshuxue','info:age','24'
put'member','scutshuxue','info:birthday','1987-06-17'
put'member','scutshuxue','info:company','alibaba'
put'member','scutshuxue','address:contry','china'
scan 'member' #查看表的数据,成功说明安装完成
注意:可能出现的问题
Hbase数据库在机器重启后,会自动关闭。
因为Linux 操作系统在重启的时候会清空/tmp目录,而Hbase 数据库在启动的时候会在tmp 目录下生成以下三个文件
所以如果启动遇到以下问题,就是机器重启过,不要担心直接启动Hbase 就行。
- ntpd服务开启
注:hadoop 需要各节点的时间差不能超过30秒,否则会报错。在局域网环境,必须配置 ntpd 服务器,保证各节点之间时间一致。
以下做法的原理是:三台都去127.0.0.1 这台机器同步时间,故应该保证这个机器的时间是正常的。
·安装前首先检查下各个服务器是否有ntp服务
# service ntpd status #检查状态(centos6.5带这个服务)
如果有直接跳到第二步。
注意:在每台机器上都要进行以下步骤
1) 安装
NTP可以使用yum直接安装
# sudo yum install ntp
2) NTP配置
修改NTP的配置文件sudo vim /etc/ntp.conf默认配置内容为:
#取消该配置的注释
# Hosts on local network are less restricted.
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
3) 启动服务
# /etc/rc.d/init.d/ntpd start
或者
# service ntpd start
查看ntpd状态:
# service ntpd status
为了使NTP服务可以在系统引导的时候自动启动,执行:
# sudo chkconfig ntpd on