本文以三台机器组成的一个Hadoop集群的安装与配置为例。
三台机器的信息如下:
hostname 角色 IP
dc01 mast 192.168.68.57
dc02 slave 192.168.68.58
dc03 slave 192.168.68.59
用户名均为root。
1.安装JDK1.6并配置好java环境,参考:
CentOS6 安装Tomcat7 中的安装jdk部分
2.配置centos的SSH无密码登录:
ssh-keygen -t dsa -P "" -f ~/.ssh/id_dsa
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
测试是否配置成功:
ssh localhost
第一次运行会提示你是否连接,输入yes回车即可。
修改机器名(以dc01为例,其他两台机器方法相同):
vi /etc/sysconfig/network-scripts/ifcfg-eth0
增加一行:
HOSTNAME=dc01
保存
vi /etc/sysconfig/network
HOSTNAME修改为dc01
保存
vi /etc/hosts
增加以下信息:
192.168.68.57 dc01
192.168.68.58 dc02
192.168.68.59 dc03
保存
至此,hostname修改完毕。重启机器使得hostname生效。
配置dc01无密码登录dc02、dc03:
在dc01中
scp ./.ssh/authorized_keys dc02:~/.ssh/
scp ./.ssh/authorized_keys dc03:~/.ssh/
测试无密码登录配置是否成功:
ssh dc02
ssh dc03
下载hadoop,这里使用的是hadoop-1.0.3
tar -xzvf hadoop-1.0.3.tar.gz
mv hadoop-1.0.3 /usr/local/hadoop
3. 配置Hadoop:
关闭防火墙:
service iptables stop(重启失效)
chkconfig iptables off(重启生效)
配置NTP服务:
修改ntp.conf配置文件
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
server 1.cn.pool.ntp.org
server 1.asia.pool.ntp.org
server 0.asia.pool.ntp.org
用本机器与互联网时钟同步,即作为集群中其他机器的ntp服务器
同理,在其他机器中修改ntp.conf配置文件
server ntpserver
配置hadoop:
echo $JAVA_HOME
把JAVA_HOME 的值拷贝一下,
修改hadoop-env.sh
vim /usr/local/hadoop/conf/hadoop-env.sh
找到:
# The java implementation to use. Required.
# export JAVA_HOME=/usr/lib/j2sdk1.5-sun
在下面添加一行:
export JAVA_HOME=/usr/java/jdk1.6.0_37
#将hbase中的jar包加入到hadoop的classpath中去:
#设置hbase的安装目录:
export HBASE_HOME=/usr/local/hbase
# Extra Java CLASSPATH elements. Optional.
export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$HBASE_HOME/hbase-0.94.1.jar:$HBASE_HOME/hbase-0.94.1-test.jar:$HBASE_HOME/conf:${HBASE_HOME}/lib/zookeeper-3.4.3.jar:${HBASE_HOME}/lib/protobuf-java-2.4.0a.jar:${HBASE_HOME}/lib/*
保存
修改core-site.xml
vim /usr/local/hadoop/conf/core-site.xml
将文件改为如下:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://dc01:9000</value>
</property>
</configuration>
保存
修改mapred-site.xml
vim /usr/local/hadoop/conf/mapred-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>dc01:9001</value>
</property>
</configuration>
保存
修改masters
vim /usr/local/hadoop/conf/masters
改为:
dc01
保存
修改slaves
vim /usr/local/hadoop/conf/slaves
改为:
dc02
dc03
保存
修改HDFS
vim /usr/local/hadoop/conf/hdfs-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>dfs.name.dir</name>
<value>/opt/hdfs/name</value>
<final>true</final>
</property>
<property>
<name>dfs.data.dir</name>
<value>/opt/hdfs/data</value>
<final>true</final>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
</configuration>
创建HDFS的存储目录:
分别到三台机器上创建以下目录:
第一台:
mkdir /opt/hdfs/
mkdir /opt/hdfs/name/
mkdir /opt/hdfs/data/
第二台:
ssh dc02
mkdir /opt/hdfs/
mkdir /opt/hdfs/name/
mkdir /opt/hdfs/data/
第三台:
ssh dc03
mkdir /opt/hdfs/
mkdir /opt/hdfs/name/
mkdir /opt/hdfs/data/
至此,dc01已经配置完毕,将dc01的hadoop的文件拷贝到其他两台机器:
scp -r /usr/local/hadoop dc02:/usr/local/
scp -r /usr/local/hadoop dc03:/usr/local/
至此整个Hadoop集群配置完毕,下面来启动Hadoop。
4. 启动Hadoop:
将hadoop的bin目录添加至当前用户的.bash_profile中:
cd ~
vim .bash
找到PATH一行,在改行后面加入:
:/usr/local/hadoop/bin/:/usr/local/hbase/bin/
保存并使其立即生效:
source .bash_profile
这样以后可以在任何目录中运行hadoop命令
cd /usr/local/hadoop/bin/
./hadoop namenode -format
./start-all.sh
关闭系统防火墙(最好直接停止防火墙服务,或者可以增加允许通过的端口,具体端口我还没来得及查找)
service iptables stop
添加防火墙规则,允许通过网页查看hadoop集群的状态.
vi /etc/sysconfig/iptables
增加下面两行:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 50030 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 50070 -j ACCEPT
保存。
重启iptables服务:
service iptables restart
通过浏览器输入下面地址查看集群的状态:
http://192.168.68.57:50070
通过浏览器输入下面地址查看Map/Reduce状态:
http://192.168.68.57:50030
我的打开后是正在初始化,一直是这样,不知道是什么原因(已解决,关掉防火墙即可)。
成功后:
5. 安装Hbase:
下载Hbase,本文使用的Hbase版本为:hbase-0.94.1.tar.gz
将文件上传至服务器dc01,解压缩:
tar -xzvf hbase-0.94.1.tar.gz
cp -r hbase-0.94.1 /usr/local/
改名字:
mv /usr/local/hbase-0.94.1 /usr/local/hbase
修改hbase配置:
cd /usr/local/hbase/conf
vim hbase-env.sh
将内容修改为下面的配置:
找到 #export JAVA_HOME=
修改为: export JAVA_HOME=/usr/java/jdk1.6.0_37
确保 export HBASE_MANAGES_ZK=true
保存
vim hbase-site.xml
将内容修改为以下部分:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
/**
* Copyright 2010 The Apache Software Foundation
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-->
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://dc01:9000/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.master</name>
<value>dc01:60000</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>dc01,dc02,dc03</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/usr/local/hbase/zookeeper</value>
</property>
</configuration>
保存
vim regionservers
将内容修改为:
dc02
dc03
保存
至此,Hbase配置完毕.
将Hbase拷贝到其他机器:
scp -r /usr/local/hbase dc02:/usr/local
scp -r /usr/local/hbase dc03:/usr/local
到现在,hbase安装完毕。
启动hbase:
start-hbase.sh
等脚本执行完毕后,到各个机器上查看下hbase安装是否成功:
master:
运行:jps
25483 Jps
25275 HMaster
9804 NameNode
10039 JobTracker
25222 HQuorumPeer
9966 SecondaryNameNode
说明hadoop和hbase运行均正常,
dc02:
运行jps:
19232 Jps
4135 DataNode
19107 HRegionServer
19033 HQuorumPeer
4229 TaskTracker
说明一切正常。
dc03:
运行jps:
jps
3557 DataNode
18484 HQuorumPeer
18720 Jps
18565 HRegionServer
3651 TaskTracker
一切正常。
在dc01上运行:hbase shell查看hbase是否正常:
hbase shell
HBase Shell; enter 'help<RETURN>' for list of supported commands.
Type "exit<RETURN>" to leave the HBase Shell
Version 0.94.1, r1365210, Tue Jul 24 18:40:10 UTC 2012
hbase(main):001:0>
说明进入了hbase的shell环境,现在用list命令来看一下hbase中有哪些表:
hbase(main):001:0> list
TABLE
0 row(s) in 0.9550 seconds
hbase(main):002:0>
说明hbase运行是正常的。
至此,可以说明hbase安装并启动成功了。
下面为hbase的一些基本操作,可以忽略。
Hbase基本操作:
接下来创建一张表:
hbase(main):002:0> create 'user_info','name'
0 row(s) in 1.2780 seconds
hbase(main):003:0>
创建成功,查看一下表是否存在:
hbase(main):003:0> list
TABLE
user_info
1 row(s) in 0.0500 seconds
hbase(main):004:0>
表果然存在。
现在往表中插入一条数据:
put 'user_info','1','name:','Tom'
插入完毕。
现在查询是否表中存在数据:
输入:scan 'user_info'
显示:
ROW COLUMN+CELL
1 column=name:, timestamp=1376370874591, value=Tom
删除表:
删除hbase表时,需要先disable '表名称',然后在drop '表名称':
输入:disable 'user_info'
显示:0 row(s) in 2.1390 seconds
drop 'user_info'
0 row(s) in 1.4880 seconds
查询该表是否还存在(用list)命令:
输入:list
显示:
TABLE
0 row(s) in 0.0320 seconds
说明该表已经被我删除。
至此,所有工作圆满结束。