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。
n 生成密钥
执行生成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很多时,这是个灾难。
n 分发公钥
由于两个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台服务器都相同。
n 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"
|
n 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>
|
n 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
|
n 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
n masters
定义Secondary NameNode的地址,此处设置为空。
n slaves
定义DataNode的地址,可以是主机名或者IP。
hadoop003
hadoop004
hadoop005
hadoop006
hadoop007
|
n 配置同步
将以上修改过的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
n 修改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
|
n 将zookeeper目录复制到各个zookeeper节点上
我们的环境共3台zookeeper,复制到这3台即可。
n 新建目录
在各zookeeper服务器上新建dataDir中配置的目录,并添加myid文件,里面内容是该节点对应的server号,如上例hadoop003对应的myid文件内容就是:
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
n 修改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
n 修改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
|
n 在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》