Hadoop安装与维护


Table of Contents

1.          系统环境... 2

1.1.       软件版本... 2

1.2.       网络配置... 2

2.          文档目的... 2

3.          Hadoop简介... 2

4.          HDFS安装部署。... 3

4.1.       安装准备... 3

4.1.1.        机器准备... 3

4.1.2.        Disable IPV6. 3

4.1.3.        Jdk安装... 4

4.1.4.        创建用户... 4

4.2.       介质下载... 4

4.3.       安装HDFS Cluster. 4

4.3.1.        复制解压... 4

4.3.2.        SSH设置... 4

4.3.3.        HDFS配置... 5

4.3.4.        启动HDFS. 7

5.          安装ZooKeeper. 7

5.1.       配置ZooKeeper. 7

5.2.       启动zookeeper. 8

6.          Hbase的安装... 8

6.1.       安装Hbase. 8

6.2.       配置Hbase. 8

6.3.       启动Hbase. 9

7.          Hive的安装... 9

7.1.       安装Hive. 9

7.2.       创建hive的hdfs目录... 9

7.3.       配置conf下的hive-default.xml 9

7.4.       复制jar包到Hadoop的lib下... 10

7.5.       启动Hive JDBC server. 10

8.          参考资料... 10

 



 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1.       系统环境

1.1.  软件版本

下表为本系统环境所安装的软件的版本信息:

软件类别

版本

下载地址

Hadoop

hadoop-0.20.2-cdh3u0.tar.gz

参考下文

zookeeper

zookeeper-3.3.3-cdh3u0.tar.gz

参考下文

zookeeper

hbase-0.90.1-cdh3u0.tar.gz

参考下文

hive

hive-0.7.0-cdh3u0.tar.gz

参考下文

 

 

 

 

 

 

 

1.2.  网络配置

总共7台服务器和一个VIP,详细信息如下:

主机名

IP地址

备注

hadoop001

192.168.63.201

 

hadoop002

192.168.63.202

 

hadoop003

192.168.63.203

 

hadoop004

192.168.63.204

 

hadoop005

192.168.63.205

 

hadoop006

192.168.63.206

 

hadoop007

192.168.63.207

 

hadoop

192.168.63.200

设置Hadoop的VIP

 

2.       文档目的

帮助读者快速掌握hadoop的安装和部署HDFS,Hbase,Hive等组件。

3.       Hadoop简介

Hadoopt是一个分布式系统基础架构,由Apache基金会开发。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力高速运算和存储。Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有着高容错性的特点,并且设计用来部署在低廉的硬件上。而且它提供高传输率来访问应用程序的数据,适合那些有着超大数据集的应用程序。HDFS放宽了POSIX的要求,这样可以流的形式访问文件系统中的数据。详细介绍请参见:

http://zh.wikipedia.org/wiki/Hadoop

http://baike.baidu.com/view/908354.htm

http://hadoop.apache.org/

http://www.blogjava.net/killme2008/archive/2008/06/05/206043.html

 

4.       HDFS安装部署。

4.1.  安装准备

4.1.1.           机器准备

本例stage2环境如下:

IP地址

HDFS

Zookeeper

Hbase

Hive

192.168.63.201

Namenode

Hmaster

hive

192.168.63.202

Namenode(second)

Hmaster

hive

192.168.63.203

Datanode1

zookeeper

HRegionServer

hive

192.168.63.204

Datanode2

zookeeper

HRegionServer

hive

192.168.63.205

Datanode3

zookeeper

HRegionServer

hive

192.168.63.206

Datanode4

HRegionServer

hive

192.168.63.207

Datanode5

HRegionServer

hive

 

请根据需要配置hostname或dns。另外,zookeeper最好使用独立server。

4.1.2.           Disable IPV6

如果采用IDC的标准安装系统,IPV6正常是没有启动的,所以不需要本步操作。

 

如果你的环境是启动IPV6的,请走以下3步:

n  在各节点上修改/etc/sysctl.conf

在文件末尾添加:

# add for hadoop
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1

 

n  修改/etc/modprobe.conf

确保文件中包括以下两条:

alias net-pf-10 off
alias ipv6 off

 

n  修改/etc/ sysconfig/network

确保NETWORKING_IPV6=no。

 

n  修改完后需要重启机器

重启后,通过命令:

# cat/proc/sys/net/ipv6/conf/all/disable_ipv6

查看是否已经disable。如果已经disable,结果是1。

4.1.3.           Jdk安装

按标准安装JDK,此处略!

4.1.4.           创建用户

Hadoop需要统一用户,请使用IDC标准系统中的oracle账号。

4.2.   介质下载

我们需要安装的组件是clouderahadoop,下载网址:

https://ccp.cloudera.com/display/SUPPORT/CDH3+Downloadable+Tarballs

我们需要的组件是hadoop,zookeeper,hbase和hive。

下载后的版本如下:

hadoop-0.20.2-cdh3u0.tar.gz

zookeeper-3.3.3-cdh3u0.tar.gz

hbase-0.90.1-cdh3u0.tar.gz

hive-0.7.0-cdh3u0.tar.gz

99BILL环境下的以上软件包,请从标准软件库下载:

\\192.168.63.150\software\新环境软件\hadoop

4.3.  安装HDFS Cluster

4.3.1.           复制解压

复制下载好的压缩包到需要安装的所有服务器指定目录,并解压修改目录名。我们的环境下的hadoop及相关组件解析后如下:

[oracle@hadoop001 oracle]$ pwd
/opt/oracle
[oracle@hadoop001 oracle]$ ls
hadoop  hbase  hive  zookeeper

 

4.3.2.           SSH设置

设置从两台namenode无密码登录到其它5台datanode。

生成密钥

执行生成rsa密钥的命令:

[oracle@hadoop001]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter fi le in which to save the key (/home/oracle/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identifi cation has been saved in /home/oracle/.ssh/id_rsa.
Your public key has been saved in /home/oracle/.ssh/id_rsa.pub.

这样就生成了一对公钥和私钥,私钥保留在NameNode上,公钥需要分发给其他各datanode节点。注意,不要输入密码,否则NameNode启动的时候连接每个节点都需要你输入密码,当DataNode很多时,这是个灾难。

 

分发公钥

由于两个NameNode节点都需要访问各datanode节点,因此我们这里上传到datanode的认证文件分别命名为authorized_keys和authorized_keys2。

Hadoop001上执行:

scp .ssh/id_rsa.pub hadoop003:/home/oracle/.ssh/authorized_keys
scp .ssh/id_rsa.pub hadoop004:/home/oracle/.ssh/authorized_keys
scp .ssh/id_rsa.pub hadoop005:/home/oracle/.ssh/authorized_keys
scp .ssh/id_rsa.pub hadoop006:/home/oracle/.ssh/authorized_keys
scp .ssh/id_rsa.pub hadoop007:/home/oracle/.ssh/authorized_keys

Hadoop002上执行:

scp .ssh/id_rsa.pub hadoop003:/home/oracle/.ssh/authorized2_keys
scp .ssh/id_rsa.pub hadoop004:/home/oracle/.ssh/authorized2_keys
scp .ssh/id_rsa.pub hadoop005:/home/oracle/.ssh/authorized2_keys
scp .ssh/id_rsa.pub hadoop006:/home/oracle/.ssh/authorized2_keys
scp .ssh/id_rsa.pub hadoop007:/home/oracle/.ssh/authorized2_keys

 

此时,可以从两台namenode上使用oracle账号无密码登录到各datanode服务器。

 

4.3.3.           环境变量设置:

修改~/.bashrc增加如下内容:

export HADOOP_HOME=/home/oracle/hadoop
export PATH=$PATH:$HADOOP_HOME/bin

 

4.3.4.           HDFS配置

HDFS可以在单机上部署进行模拟,本文不做该配置的介绍,请参考《hadoop in action》

本文仅做cluster的配置介绍。

HDFS的配置文件均放在$hadoop/conf目录下。以下配置7台服务器都相同。

 

hadoop-env.xml

定义hadoop环境变量增加下面2行

export HADOOP_HEAPSIZE=6000
export JAVA_HOME=/opt/j2sdk1.6.5
export HADOOP_DATANODE_OPTS="-server -XX:+UseParallelGC -XX:ParallelGCThreads=4 -XX:+AggressiveHeap -XX:+HeapDumpOnOutOfMemoryError"


core-site.xml

定义HDFS的NameNode地址和端口。

<?xml version=”1.0”?>
<?xml-stylesheet type=”text/xsl” href=”confi guration.xsl”?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
    <property>
    <name>fs.default.name</name>
    <value>hdfs://hadoop:9000</value>
</property>
<property>
    <name>io.file.buffer.size</name>
    <value>16384</value>
  </property>
</configuration>

 

mapred-site.xml

定义MapReduce的JobTracker的地址和端口。

<?xml version=”1.0”?>
<?xml-stylesheet type=”text/xsl” href=”confi guration.xsl”?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
    <name>mapred.job.tracker</name>
<value>hadoop:9001</value>
</property>
</configuration>

 

Map-reduce的参数配置,推荐值为(本部分暂时没有优化,这部分请略过):

mapred.map.tasks = number of datanodes x 2
 mapred.reduce.tasks = number of atanodes x 2
 mapred.tasktracker.map.tasks.maximum = number of CPU Cores of the datanodes – 2
 mapred.tasktracker.reduce.tasks.maximum = number of CPU Cores of the datanodes – 2

 

hdfs-site.xml

定义文件复制份数。

<?xml version=”1.0”?>
<?xml-stylesheet type=”text/xsl” href=”confi guration.xsl”?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
    <name>dfs.replication</name>
    <value>3</value>
</property>
<property>
    <name>dfs.data.dir</name>
    <value>/opt/hadoop/data/dfs</value>
</property>
<property>
    <name>dfs.name.dir</name>
    <value>/opt/hadoop/name</value>
</property>
<property>
    <name>dfs.datanode.handler.count</name>
    <value>300</value>
</property>
<property>
    <name>dfs.block.size</name>
    <value>33554432</value>
</property>
<property>
     <name>dfs.datanode.max.xcievers</name>
     <value>4096</value>
 </property></configuration>

 

注意:

1)  在两台namenode上建立以下目录

/opt/hadoop/name

2)  在两台datanode上建立以下目录

/opt/hadoop/data/dfs

 

masters

定义Secondary NameNode的地址,此处设置为空。

 

 

slaves

定义DataNode的地址,可以是主机名或者IP。

hadoop003
hadoop004
hadoop005
hadoop006
hadoop007

 

配置同步

将以上修改过的5个配置文件,复制到其它6台机器。

 

4.3.5.           启动HDFS

在NameNode的$hadoop安装目录下,执行如下命令:

[oracle@hadoop001 hadoop]$ bin/hadoop namenode -format
[oracle@hadoop001 hadoop]$ bin/start-all.sh

 

可以在各个节点上运行jps命令查看是否启动成功:

[oracle@hadoop003 ~]$ jps
6160 TaskTracker
6039 DataNode
6879 Jps
6357 HRegionServer

 

同时可访问HDFS监控页面:http://192.168.63.200:50070/dfshealth.jsp查看各节点状况。

 

5.       安装ZooKeeper

在Hadoop的复制解压部分已经完成安装。这部分介绍zookeeper的配置。

 

5.1.  配置ZooKeeper

修改zookeepr/conf/zoo.cfg

配置里面的server是zookeeper服务器的主机名。

# The number of milliseconds of each tick
tickTime=2000
maxClientCnxns=0
# The number of ticks that the initial
# synchronization phase can take
initLimit=50
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
dataDir=/opt/hadoop/zookeeperdata
# the port at which the clients will connect
clientPort=2181
server.1=hadoop003:2888:3888
server.2=hadoop004:2888:3888
server.3=hadoop005:2888:3888

 

将zookeeper目录复制到各个zookeeper节点上

我们的环境共3台zookeeper,复制到这3台即可。

 

新建目录

在各zookeeper服务器上新建dataDir中配置的目录,并添加myid文件,里面内容是该节点对应的server号,如上例hadoop003对应的myid文件内容就是:

1

5.2.  启动zookeeper

在各zookeeper节点上运行zkServer.sh start。

cd /opt/oracle/zookeeper
./bin/zkServer.sh start
tail zookeeper.out

 

6.       Hbase的安装

6.1.  安装Hbase

安装Hbase需要先安装好hadoop和ZooKeeper。

Hadoop的复制解压部分已经完成安装。这部分介绍Hbase的配置。

6.2.  配置Hbase

修改hbase/conf/hbase-site.xml

<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://hadoop:9000/hbase</value>
<description>The directory shared by region servers.</description>
</property>
<property>
  <name>hbase.cluster.distributed</name>
  <value>true</value>
</property>
<property>
  <name>hbase.master.port</name>
  <value>60000</value>
</property>
<property>
  <name>hbase.zookeeper.quorum</name>
  <value>hadoop003,hadoop004,hadoop005</value>
</property>
<property>
  <name>hbase.regionserver.handler.count</name>
  <value>300</value>
</property>
<property>
  <name>hbase.hstore.blockingStoreFiles</name>
  <value>70</value>
</property>
<property>
  <name>zookeeper.session.timeout</name>
180000</value>
</property>
 
<property>
  <name>hbase.replication</name>
  <value>false</value>
</property>
 
 
<property>
  <name>hfile.block.cache.size</name>
  <value>0.4</value>
</property>
 
<property>
  <name>hbase.regionserver.global.memstore.upperLimit</name>
  <value>0.35</value>
</property>
 
<property>
  <name>hbase.hregion.memstore.block.multiplier</name>
  <value>8</value>
</property>
 
<property>
  <name>hbase.server.thread.wakefrequency</name>
  <value>100</value>
</property>
 
<property>
  <name>hbase.master.distributed.log.splitting</name>
  <value>false</value>
</property>
 
<property>
  <name>hbase.regionserver.hlog.splitlog.writer.threads</name>
  <value>3</value>
</property>
<property>
  <name>hbase.hstore.blockingStoreFiles</name>
  <value>20</value>
</property>
<property>
<name>hbase.hregion.memstore.flush.size</name>
<value>134217728</value>
</property>
</configuration>

红色部分是可能需要修改的,更多配置项请参考:

http://hbase.apache.org/book.html#configuration

 

修改hbase/conf/hbase-env.sh

添加如下4行内容:

export HBASE_HEAPSIZE=4000
export JAVA_HOME=/opt/j2sdk1.6.5
export HBASE_OPTS="-Xmx8g -Xms8g -Xmn128m -XX:+UseParNewGC  -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=70 -verbose:gc  -XX:+PrintGCDetails -XX:+PrintGCTimeStamps  -Xloggc:$HBASE_HOME/logs/gc-$(hostname)-hbase.log"
export HBASE_MANAGES_ZK=false
export HBASE_CLASSPATH=/opt/oracle/hadoop/conf

 

 

n  修改hbase/conf/log4j.properties

修改如下内容

hbase.root.logger=WARN,console
log4j.logger.org.apache.hadoop.hbase=WARN

 

 

在conf/regionservers中添加所有datanode的节点

添加以下内容:

hadooop003
hadooop004
hadooop005
hadooop006
hadooop007


6.3.  启动Hbase

通过Hbase的安装目录执行bin/start-hbase.sh和bin/stop-hbase.sh脚本启动和停止HBase服务。

启动方法:

[oracle@hadoop003 ~]$ cd /opt/oracle/hbase
[oracle@hadoop003 hbase]$ bin/start-hbase.sh

 

7.       Hive的安装

7.1.  安装Hive

Hadoop的复制解压部分已经完成安装。这部分介绍Hive的配置。

7.2.  创建hive的hdfs目录

在namenode的hadoop安装目录下的bin目录下执行创建操作:

[oracle@hadoop001 ~]$ cd /opt/oracle/hadoop/bin/
[oracle@hadoop001 ~]$ ./hadoop fs -mkdir /user/hive/warehouse

7.3.  配置conf下的hive-default.xml

找到hive.zookeeper.quorum,配置为如下所示:

# modify|以下修改红色部分
<property>
  <name>hive.zookeeper.quorum</name>
  <value> hadoop003,hadoop004,hadoop005</value>
  <description></description>
</property>
# add|以下添加红色部分
<property>   
   <name>hbase.zookeeper.quorum</name>   
   <value>hadoop003,hadoop004,hadoop005</value>
   <description>
   </description> 
</property>
# default|以下默认即可
<property>
  <name>hive.zookeeper.client.port</name>
  <value>2181</value>
  <description></description>
</property>

7.4.  复制jar包到Hadoop的lib下

第一台服务器都要执行:

cd /opt/oracle/hive/lib
cp -a hbase-0.90.1-cdh3u0.jar zookeeper-3.3.1.jar hive-hbase-handler-0.7.0-cdh3u0.jar /opt/oracle/hadoop/lib

创建hive表:

cd /opt/oracle/hive/bin
hive -auxpath ../lib/hive-hbase-handler-0.7.0-cdh3u0.jar,../lib/hbase-0.90.1-cdh3u0.jar,../lib/zookeeper-3.3.1.jar -hiveconf hbase.zookeeper.quorum=hadoop003

在hive提示符下输入:

CREATE TABLE app_log_rule(id STRING,app_code STRING,merchant_id STRING,order_type STRING,log_level STRING,log_location STRING,disabled STRING,param_map STRING)
STORED BY
'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES (
"hbase.columns.mapping" = 
":key,cf1:app_code,cf1:merchant_id,cf1:order_type,cf1:log_level,cf1:log_location,cf1:disabled,cf1:param_map")
TBLPROPERTIES (
"hbase.table.name" = "hbase_app_log_rule"
);
 
CREATE TABLE app_log_queue(id STRING,queue_name STRING,biz_line STRING,app_code STRING)
STORED BY
'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES (
"hbase.columns.mapping" = ":key,cf1:queue_name,cf1:biz_line,cf1:app_code")
TBLPROPERTIES (
"hbase.table.name" = "hbase_app_log_queue"
);

 

 

7.5.  启动Hive JDBCserver

到Hive的安装目录,启动Hive服务。

cd /opt/oracle/hive/
bin/hive --service hiveserver &

 

8.       Hadoop环境启动顺序

8.1.  启动HDFS

在NameNode的$hadoop安装目录下,执行如下命令:

[oracle@hadoop001 hadoop]$ bin/hadoop namenode -format

[oracle@hadoop001 hadoop]$ bin/start-all.sh

 

可以在各个节点上运行jps命令查看是否启动成功:

[oracle@hadoop003 ~]$ jps
6160 TaskTracker
6039 DataNode
6879 Jps

 

同时可访问HDFS监控页面:http://hadoop001:50070/dfshealth.jsp查看各节点状况。

8.2.  启动zookeeper

在各zookeeper节点上运行zkServer.sh start。

cd /opt/oracle/zookeeper
./bin/zkServer.sh start
tail zookeeper.out

8.3.  启动Hbase

通过Hbase的安装目录执行bin/start-hbase.sh和bin/stop-hbase.sh 脚本启动和停止HBase服务。

启动方法:

[oracle@hadoop003 ~]$ cd /opt/oracle/hbase
[oracle@hadoop003 hbase]$ bin/start-hbase.sh

 

可以在各个节点上运行jps命令查看是否启动成功,hadoop003~hadoop007上是否有HRegionServer,hadoop001上是否有HMaster:

 

同时可访问HDFS监控页面:http://hadoop001:60010/ 查看是否所有的datanode和zookeeper都活着。

8.4.  启动Hive JDBCserver

到Hive的安装目录,启动Hive服务。

cd /opt/oracle/hive/
bin/hive --service hiveserver &

9.       Hadoop环境关闭顺序

9.1.  关闭Hive JDBCServer

用jps命令找到RunJar进程kill掉

9.2.  关闭Hbase

通过Hbase的安装目录执行bin/stop-hbase.sh停止HBase服务,会出现等待的提示符,等待结束才可以执行下一步

9.3.  关闭zookeeper

在各zookeeper节点上运行zkServer.sh stop

cd /opt/oracle/zookeeper
./bin/zkServer.sh stop
tail zookeeper.out

 

9.4.  关闭HDFS

在NameNode的$hadoop安装目录下,执行如下命令:

[oracle@hadoop001 hadoop]$ bin/stop-all.sh

 

可以在各个节点上运行jps命令查看是否关闭成功

 

10.   常见问题

10.1.            Namenode非正常关闭

在所有的hadoop环境机器上用jps命令,把所有的进程列出,然后kill掉,再按照启动顺序启动

10.2.            Datanode非正常关闭

l  在namenode上启动HDFS

运行hadoop/bin/start-all.sh

l 如果Datanode同时是zookeeper,还需要启动zookeeper

在该datanode上运行zookeeper/bin/zkServer.sh start。

l  在namenode上启动Hbase

运行hbase/bin/start-hbase.sh

10.3.            增加Hadoop新节点

l  重启hadoop

l  master的slaves文件中增加上相的节点,只要修改hbase下的slaves,增加新的节点的hostname就可以

l  进行block块的均衡

在hdfs-site.xml中增加设置balance的带宽,默认只有1M:

<property> 
     <name>dfs.balance.bandwidthPerSec</name> 
     <value>10485760</value> 
     <description>
         Specifies the maximum bandwidth thateach datanode can utilize for the balancing purpose in term of the number ofbytes per second.
     </description> 
 </property>

运行以下命令:

sh hadoop/bin/start-balancer.sh -threshold 3

等看到类似下面的日志:Balancing took 2.9950980555555557 hours 表示均衡完成

 

11.   监控端口

11.1.            Namenode监控端口(hadoop001):

60010,60000,50070,50030,9000,9001,10000

11.2.            zookeeper监控端口(hadoop003,hadoop004,hadoop005)

2181

11.3.            Datanode监控端口(hadoop003,hadoop004,hadoop005,hadoop006,hadoop007)

60030,50075

12.   参考资料

参考文件:《hadoop in action》