关于 十月, 2012 的文章

实现Zabbix通过邮件发送Screen图形报表

在使用Zabbix的过程中,我们通常会建立一些需要的Screen图形报表来汇总需要监控的Graph。
而下面的两个脚本,则是通过从Zabbix数据库中获取所有的Screen图形参数,提供Zabbix的WEB接口将所有图形保存到本地,然后通过脚本以Email形式发送过来,作为每天的自动报表。

$ sudo mkdir -p /data/script
$ sudo mkdir -p /data/graph

$ sudo vim /data/scripts/save-graph.pl

#!/usr/bin/perl
use File::Path;
use DBI;

my $path = '/data/graph';
if(-e $path) { rmtree($path); }
mkdir($path);

my $stime = `date +%Y%m%d`; chop($stime); $stime .= '1000';
if( length($stime) != 12 ) { print "Error get date"; exit; }

my $period = 86400;    # 24 hours

my $login = 'admin';   # Zabbix Web User
my $pass = 'password'; # Zabbix Web User Password, must be URL Encoded

my $cook = "/tmp/cookie";
my $dsn = 'DBI:mysql:zabbix:localhost'; # Connect MySQL DB "zabbix" on localhost
my $db_user_name = 'zabbix'; # MySQL DB user
my $db_password = 'dbpassword'; # MySQL DB user password

my $dbh = DBI->connect($dsn, $db_user_name, $db_password);
my $sth = $dbh->prepare(qq{select a.name,a.hsize,a.vsize, b.resourceid, b.width, b.height,b.x,b.y from screens a,screens_items as b where a.screenid=b.screenid and a.templateid<=>NULL order by a.name});
$sth->execute();
my %screens;

# Get all graphs by using curl
while (my ($name,$hsize,$vsize, $id,$width,$height,$x,$y) = $sth->fetchrow_array())
{
    if(length($id) > 2){
        #print "$id => $ids\n";
        my $p = "$path/$name.$hsize.$vsize.$y.$x.$id.png";
        my $strcomm  = `curl  -c $cook -b $cook -d "request=&name=$login&password=$pass&autologin=1&enter=Sign+in"  localhost/zabbix/index.php`;
        $strcomm  = `curl  -b $cook -F  "graphid=$id" -F "period=$period" -F "stime=$stime" -F "width=$width" -F "height=$height" localhost/zabbix/chart2.php > $p`;
    }
}

exit ;

阅读全文 »

, ,

15 Comments

Hadoop使用lzo压缩提升I/O性能

参考文档:
http://www.haogongju.net/art/1576460

Hadoop经常用于处理大量的数据,如果期间的输出数据、中间数据能压缩存储,对系统的I/O性能会有提升。
综合考虑压缩、解压速度、是否支持split,目前lzo是最好的选择。

下面是具体的安装与配置过程:

1. 安装系统lzo
$ sudo apt-get install liblzo2-2 liblzo2-dev

2. 下载hadoop-lzo的tar包
$ wget -O kevinweil-hadoop-lzo.tar.gz https://nodeload.github.com/kevinweil/hadoop-lzo/tarball/master

3. 编译hadoop-lzo
$ sudo apt-get install gcc ant

$ export JAVA_HOME=/usr/lib/jvm/java-6-sun
$ tar xzvf kevinweil-hadoop-lzo.tar.gz
$ cd kevinweil-hadoop-lzo-6bb1b7f/
$ ant compile-native tar
...
BUILD SUCCESSFUL
Total time: 20 seconds

4. 将编译完成的文件复制到Hadoop中
$ cp build/hadoop-lzo-0.4.15.jar /usr/lib/hadoop-0.20/lib/
$ cp build/native/Linux-amd64-64/lib/libgplcompression.* /usr/lib/hadoop-0.20/lib/native/Linux-amd64-64/

5. 重启Hadoop的tasktracker进程
$ sudo /etc/init.d/hadoop-0.20-tasktracker restart

6. 接着,我们就可以在程序中,把输出结果通过lzo进行压缩:
SequenceFileOutputFormat.setOutputCompressionType(job, CompressionType.BLOCK);
SequenceFileOutputFormat.setCompressOutput(job, true);
SequenceFileOutputFormat.setOutputCompressorClass(job, LzoCodec.class);

7. 最后,修改Hadoop配置文件,增加以下参数
$ sudo vim /etc/hadoop-0.20/conf/core-site.xml

<property>
<name>io.compression.codecs</name>
<value>
    org.apache.hadoop.io.compress.GzipCodec,
    org.apache.hadoop.io.compress.DefaultCodec,
    org.apache.hadoop.io.compress.BZip2Codec,
    com.hadoop.compression.lzo.LzoCodec,
    com.hadoop.compression.lzo.LzopCodec
</value>
</property>
<property>
<name>io.compression.codec.lzo.class</name>
<value>com.hadoop.compression.lzo.LzoCodec</value>
</property>

$ sudo vim /etc/hadoop-0.20/conf/mapred-site.xml

<property>
  <name>mapred.compress.map.output</name>
  <value>true</value>
</property>
<property>
  <name>mapred.map.output.compression.codec</name>
  <value>com.hadoop.compression.lzo.LzoCodec</value>
</property>
<property>
  <name>mapred.child.env</name>
  <value>JAVA_LIBRARY_PATH=/usr/lib/hadoop-0.20/lib/native/Linux-amd64-64/</value>
</property>

然后重启Hadoop相关进程
$ sudo /etc/init.d/hadoop-0.20-jobtracker restart
$ sudo /etc/init.d/hadoop-0.20-tasktracker restart
$ sudo /etc/init.d/hadoop-0.20-datanode restart

这样Hadoop在读取这些文件时,会自动进行解压。

压缩后的文件大小约为原来的50%,能够比较好的改善Hadoop的I/O性能。

,

No Comments

将RHEL的iptables管理脚本迁移到Ubuntu

Ubuntu的默认防火墙管理工具是ufw,它是一个通过Python实现的工具,最终也是转换为iptables命令实现防火墙规则过滤的。
但有一点比较令人讨厌的是,ufw默认启用了非常多的规则,且配置文件非常不便于配置。
而对于习惯于直接通过iptables指令来设置防火墙规则的管理员,RHEL的iptables脚本管理方式就非常的干净利落。

但是直接将RHEL上的iptables脚本拿到Ubuntu下,是无法正常运行的,需要做很多的修改。

以下是相关步骤:

1.创建配置文件iptables-conf
$ sudo mkdir /etc/sysconfig
$ sudo vim /etc/sysconfig/iptables-config

# Load additional iptables modules (nat helpers)
#   Default: -none-
# Space separated list of nat helpers (e.g. 'ip_nat_ftp ip_nat_irc'), which
# are loaded after the firewall rules are applied. Options for the helpers are
# stored in /etc/modprobe.conf.
IPTABLES_MODULES=""

# Unload modules on restart and stop
#   Value: yes|no,  default: yes
# This option has to be 'yes' to get to a sane state for a firewall
# restart or stop. Only set to 'no' if there are problems unloading netfilter
# modules.
IPTABLES_MODULES_UNLOAD="yes"

# Save current firewall rules on stop.
#   Value: yes|no,  default: no
# Saves all firewall rules to /etc/sysconfig/iptables if firewall gets stopped
# (e.g. on system shutdown).
IPTABLES_SAVE_ON_STOP="no"

# Save current firewall rules on restart.
#   Value: yes|no,  default: no
# Saves all firewall rules to /etc/sysconfig/iptables if firewall gets
# restarted.
IPTABLES_SAVE_ON_RESTART="no"

# Save (and restore) rule and chain counter.
#   Value: yes|no,  default: no
# Save counters for rules and chains to /etc/sysconfig/iptables if
# 'service iptables save' is called or on stop or restart if SAVE_ON_STOP or
# SAVE_ON_RESTART is enabled.
IPTABLES_SAVE_COUNTER="no"

# Numeric status output
#   Value: yes|no,  default: yes
# Print IP addresses and port numbers in numeric format in the status output.
IPTABLES_STATUS_NUMERIC="yes"

# Verbose status output
#   Value: yes|no,  default: yes
# Print info about the number of packets and bytes plus the "input-" and
# "outputdevice" in the status output.
IPTABLES_STATUS_VERBOSE="no"

# Status output with numbered lines
#   Value: yes|no,  default: yes
# Print a counter/number for every rule in the status output.
IPTABLES_STATUS_LINENUMBERS="yes"

2.创建规则命令文件iptables(以我的Blog为例)
$ sudo vim /etc/sysconfig/iptables
阅读全文 »

, ,

No Comments

Zookeeper节点的增加及故障演练

环境介绍
OS: Ubuntu 10.10 Server 64-bit
Servers:
hadoop-master:10.6.1.150
- namenode,jobtracker;hbase-master,hbase-thrift;
- secondarynamenode;
- hive-master,hive-metastore;
- zookeeper-server;
- flume-master
- flume-node
- datanode,taskTracker

hadoop-node-1:10.6.1.151
- datanode,taskTracker;hbase-regionServer;
- zookeeper-server;
- flume-node

hadoop-node-2:10.6.1.152
- dataNode,taskTracker;hbase-regionServer;
- zookeeper-server;
- flume-node

以上环境的配置过程请参见:Hadoop集群实践 之 (0) 完整架构设计

下面将增加两台zookeeper-server
zookeeper-single-1:10.6.1.161
- zookeeper-server;

zookeeper-single-2:10.6.1.162
- zookeeper-server;

本文定义的规范,避免在配置多台服务器上产生理解上的混乱:
所有直接以 $ 开头,没有跟随主机名的命令,都代表需要在所有的服务器上执行,除非后面有单独的//开头的说明。
而以dongguo@zookeeper-single-1:~$开头的命令,则需要在zookeeper-single-2上也做相同的执行,除非有dongguo@zookeeper-single-2:~$同时出现。

1. 配置/etc/hosts
$ sudo vim /etc/hosts

127.0.0.1	localhost

10.6.1.150 hadoop-master
10.6.1.151 hadoop-node-1
10.6.1.152 hadoop-node-2
10.6.1.153 hadoop-node-3
10.6.1.161 zookeeper-single-1
10.6.1.162 zookeeper-single-2

2. 修改主机名
dongguo@zookeeper-single-1:~$ sudo vim /etc/hostname

zookeeper-single-1

dongguo@zookeeper-single-1:~$ sudo hostname zookeeper-single-1

dongguo@zookeeper-single-2:~$ sudo vim /etc/hostname

zookeeper-single-2

dongguo@zookeeper-single-2:~$ sudo hostname zookeeper-single-2

3. 安装Java环境
阅读全文 »

,

1 Comment

Hadoop集群节点的动态增加与删除

Hadoop集群节点的动态增加
1. 安装配置节点
具体过程参考 《Hadoop集群实践 之 (1) Hadoop(HDFS)搭建

2. 在配置过程中需要在所有的Hadoop服务器上更新以下三项配置
$ sudo vim /etc/hadoop/conf/slaves

hadoop-node-1
hadoop-node-2
hadoop-node-3

$ sudo vim /etc/hosts

10.6.1.150 hadoop-master
10.6.1.151 hadoop-node-1
10.6.1.152 hadoop-node-2
10.6.1.153 hadoop-node-3

$ sudo vim /etc/hadoop/conf/hdfs-site.xml

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
<property>
  <name>dfs.data.dir</name>
  <value>/data/hdfs</value>
</property>
<property>
  <name>dfs.replication</name>
  <value>3</value>
</property>
<property>
  <name>dfs.datanode.max.xcievers</name>
  <value>4096</value>
</property>
</configuration>

3. 启动datanode与tasktracker
dongguo@hadoop-node-3:~$ sudo /etc/init.d/hadoop-0.20-datanode start
dongguo@hadoop-node-3:~$ sudo /etc/init.d/hadoop-0.20-tasktracker start

4. 检查新增节点是否已经Live
通过WEB管理界面查看
http://10.6.1.150:50070/dfsnodelist.jsp?whatNodes=LIVE

可以看到hadoop-node-3已经被动态添加到了Hadoop集群中
阅读全文 »

,

No Comments

Hadoop集群实践 之 (4) Hive搭建

目录结构
Hadoop集群实践 之 (0) 完整架构设计 [Hadoop(HDFS),HBase,Zookeeper,Flume,Hive]
Hadoop集群实践 之 (1) Hadoop(HDFS)搭建
Hadoop集群实践 之 (2) HBase&Zookeeper搭建
Hadoop集群实践 之 (3) Flume搭建
Hadoop集群实践 之 (4) Hive搭建

本文内容
Hadoop集群实践 之 (4) Hive搭建

参考资料
https://ccp.cloudera.com/display/CDHDOC/Hive+Installation
http://blog.csdn.net/cloudeep/article/details/4487181
http://jinghong.iteye.com/blog/1127968
http://dueam.org/2010/06/hive-%E5%8A%A0%E9%80%9Fmapreduce%E7%9A%84%E5%BC%80%E5%8F%91/
http://blog.csdn.net/hguisu/article/details/7282050
http://my.oschina.net/wangjiankui/blog/41442

安装配置Hive
OS: Ubuntu 10.10 Server 64-bit
Servers:
hadoop-master:10.6.1.150
- namenode,jobtracker;hbase-master,hbase-thrift;
- secondarynamenode;
- hive-master,hive-metastore;
- zookeeper-server;
- flume-master
- flume-node
- datanode,taskTracker

hadoop-node-1:10.6.1.151
- datanode,taskTracker;hbase-regionServer;
- zookeeper-server;
- flume-node

hadoop-node-2:10.6.1.152
- dataNode,taskTracker;hbase-regionServer;
- zookeeper-server;
- flume-node

对以上角色做一些简单的介绍:
namenode - 整个HDFS的命名空间管理服务
secondarynamenode - 可以看做是namenode的冗余服务
jobtracker - 并行计算的job管理服务
datanode - HDFS的节点服务
tasktracker - 并行计算的job执行服务
hbase-master - Hbase的管理服务
hbase-regionServer - 对Client端插入,删除,查询数据等提供服务
zookeeper-server - Zookeeper协作与配置管理服务
flume-master - Flume的管理服务
flume-node - Flume的Agent与Collector服务,具体角色由flume-master决定
hive-master - Hive的管理服务
hive-metastore - Hive的元存储,用于对元数据进行类型检查与语法分析

本文定义的规范,避免在配置多台服务器上产生理解上的混乱:
所有直接以 $ 开头,没有跟随主机名的命令,都代表需要在所有的服务器上执行,除非后面有单独的//开头的说明。

1. 安装前的准备
已经完成了 Hadoop集群实践 之 (3) Flume搭建

Hive其实就是一个SQL解析引擎,它将SQL语句转译成M/R JOB然后在Hadoop执行,来达到快速开发的目的。
Hive是由Facebook贡献给Hadoop开源社区的。

2. 安装Hive
dongguo@hadoop-master:~$ sudo apt-get install hadoop-hive hadoop-hive-metastore hadoop-hive-server
dongguo@hadoop-master:~$ sudo mkdir -p /var/lock/subsys
dongguo@hadoop-master:~$ sudo chown hive:hive /var/lock/subsys

3. 创建Hive所需的本地目录
dongguo@hadoop-master:~$ sudo mkdir -p /var/run/hive/
dongguo@hadoop-master:~$ sudo chown hive:hive /var/run/hive/
阅读全文 »

, , ,

No Comments

Hadoop集群实践 之 (3) Flume搭建

目录结构
Hadoop集群实践 之 (0) 完整架构设计 [Hadoop(HDFS),HBase,Zookeeper,Flume,Hive]
Hadoop集群实践 之 (1) Hadoop(HDFS)搭建
Hadoop集群实践 之 (2) HBase&Zookeeper搭建
Hadoop集群实践 之 (3) Flume搭建
Hadoop集群实践 之 (4) Hive搭建

本文内容
Hadoop集群实践 之 (3) Flume搭建

参考资料
http://www.cnblogs.com/oubo/archive/2012/05/25/2517751.html
http://archive.cloudera.com/cdh/3/flume/UserGuide/
http://log.medcl.net/item/2012/03/flume-build-process/
http://blog.csdn.net/rzhzhz/article/details/7449767
https://blogs.apache.org/flume/entry/flume_ng_architecture

安装配置Flume
环境准备
OS: Ubuntu 10.10 Server 64-bit
Servers:
hadoop-master:10.6.1.150 内存1024M
- namenode,jobtracker;hbase-master,hbase-thrift;
- secondarynamenode;
- zookeeper-server;
- datanode,taskTracker
- flume-master
- flume-node

hadoop-node-1:10.6.1.151 内存640M
- datanode,taskTracker;hbase-regionServer;
- zookeeper-server;
- flume-node

hadoop-node-2:10.6.1.152 内存640M
- datanode,taskTracker;hbase-regionServer;
- zookeeper-server;
- flume-node

对以上角色做一些简单的介绍:
namenode - 整个HDFS的命名空间管理服务
secondarynamenode - 可以看做是namenode的冗余服务
jobtracker - 并行计算的job管理服务
datanode - HDFS的节点服务
tasktracker - 并行计算的job执行服务
hbase-master - Hbase的管理服务
hbase-regionServer - 对Client端插入,删除,查询数据等提供服务
zookeeper-server - Zookeeper协作与配置管理服务
flume-master - Flume的管理服务
flume-node - Flume的Agent与Collector服务,具体角色由flume-master决定

本文定义的规范,避免在配置多台服务器上产生理解上的混乱:
所有直接以 $ 开头,没有跟随主机名的命令,都代表需要在所有的服务器上执行,除非后面有单独的//开头的说明。

1. 安装前的准备
已经完成了 Hadoop集群实践 之 (2) HBase&Zookeeper搭建

Flume分为三种角色:
Mater: master负责配置及通信管理,是集群的控制器。
Collector: collector用于对数据进行聚合,往往会产生一个更大的流,然后加载到storage中。
Agent: Agent用于采集数据,agent是flume中产生数据流的地方,同时,agent会将产生的数据流传输到collector。

Collector和Agent的配置数据必须指定Source(可以理解为数据入口)和Sink(可以理解为数据出口)。

常用的source:
text(“filename”):将文件filename作为数据源,按行发送
tail(“filename”):探测filename新产生的数据,按行发送出去
fsyslogTcp(5140):监听TCP的5140端口,并且接收到的数据发送出去

常用的sink:
console[("format")] :直接将将数据显示在桌面上
text(“txtfile”):将数据写到文件txtfile中
dfs(“dfsfile”):将数据写到HDFS上的dfsfile文件中
syslogTcp(“host”,port):将数据通过TCP传递给host节点
阅读全文 »

, , ,

No Comments

Hadoop集群实践 之 (2) HBase&Zookeeper搭建

目录结构
Hadoop集群实践 之 (0) 完整架构设计 [Hadoop(HDFS),HBase,Zookeeper,Flume,Hive]
Hadoop集群实践 之 (1) Hadoop(HDFS)搭建
Hadoop集群实践 之 (2) HBase&Zookeeper搭建
Hadoop集群实践 之 (3) Flume搭建
Hadoop集群实践 之 (4) Hive搭建

本文内容
Hadoop集群实践 之 (2) HBase&Zookeeper搭建

参考资料
http://blog.csdn.net/hguisu/article/details/7244413
http://www.yankay.com/wp-content/hbase/book.html
http://blog.nosqlfan.com/html/3694.html

安装配置HBase&Zookeeper
环境准备
OS: Ubuntu 10.10 Server 64-bit
Servers:
hadoop-master:10.6.1.150 内存1024M
- namenode,jobtracker;hbase-master,hbase-thrift;
- secondarynamenode;
- zookeeper-server;
- datanode,taskTracker

hadoop-node-1:10.6.1.151 内存640M
- datanode,taskTracker;hbase-regionServer;
- zookeeper-server;

hadoop-node-2:10.6.1.152 内存640M
- datanode,taskTracker;hbase-regionServer;
- zookeeper-server;

对以上角色做一些简单的介绍:
namenode - 整个HDFS的命名空间管理服务
secondarynamenode - 可以看做是namenode的冗余服务
jobtracker - 并行计算的job管理服务
datanode - HDFS的节点服务
tasktracker - 并行计算的job执行服务
hbase-master - Hbase的管理服务
hbase-regionServer - 对Client端插入,删除,查询数据等提供服务
zookeeper-server - Zookeeper协作与配置管理服务

将HBase与Zookeeper的安装配置放在同一篇文章的原因是:
一个分布式运行的Hbase依赖一个zookeeper集群,所有的节点和客户端都必须能够访问zookeeper。

本文定义的规范,避免在配置多台服务器上产生理解上的混乱:
所有直接以 $ 开头,没有跟随主机名的命令,都代表需要在所有的服务器上执行,除非后面有单独的//开头的说明。

1. 安装前的准备
已经完成了 Hadoop集群实践 之 (1) Hadoop(HDFS)搭建

配置NTP时钟同步
dongguo@hadoop-master:~$ sudo /etc/init.d/ntp start
dongguo@hadoop-node-1:~$ sudo ntpdate hadoop-master
dongguo@hadoop-node-2:~$ sudo ntpdate hadoop-master

配置ulimit与nproc参数
$ sudo vim /etc/security/limits.conf

hdfs		-	nofile		32768
hbase		-	nofile		32768

hdfs		soft	nproc		32000
hdfs		hard	nproc		32000

hbase		soft	nproc		32000
hbase		hard	nproc		32000

$ sudo vim /etc/pam.d/common-session

session required	pam_limits.so

退出并重新登录SSH使设置生效
阅读全文 »

, , ,

No Comments

Hadoop集群实践 之 (1) Hadoop(HDFS)搭建

目录结构
Hadoop集群实践 之 (0) 完整架构设计 [Hadoop(HDFS),HBase,Zookeeper,Flume,Hive]
Hadoop集群实践 之 (1) Hadoop(HDFS)搭建
Hadoop集群实践 之 (2) HBase&Zookeeper搭建
Hadoop集群实践 之 (3) Flume搭建
Hadoop集群实践 之 (4) Hive搭建

本文内容
Hadoop集群实践 之 (1) Hadoop(HDFS)搭建

参考资料
http://www.infoq.com/cn/articles/hadoop-intro
http://www.infoq.com/cn/articles/hadoop-config-tip
http://www.infoq.com/cn/articles/hadoop-process-develop
http://www.docin.com/p-238056369.html

安装配置Hadoop(HDFS)
环境准备
OS: Ubuntu 10.10 Server 64-bit
Servers:
hadoop-master:10.6.1.150 内存1024M
- namenode,jobtracker;
- secondarynamenode;
- datanode,taskTracker

hadoop-node-1:10.6.1.151 内存640M
- datanode,taskTracker;

hadoop-node-2:10.6.1.152 内存640M
- dataNode,taskTracker;

对以上角色做一些简单的介绍:
namenode - 整个HDFS的命名空间管理服务
secondarynamenode - 可以看做是namenode的冗余服务
jobtracker - 并行计算的job管理服务
datanode - HDFS的节点服务
tasktracker - 并行计算的job执行服务

本文定义的规范,避免在配置多台服务器上产生理解上的混乱:
所有直接以 $ 开头,没有跟随主机名的命令,都代表需要在所有的服务器上执行,除非后面有单独的//开头的说明。

1. 选择最好的安装包
为了更方便和更规范的部署Hadoop集群,我们采用Cloudera的集成包。
因为Cloudera对Hadoop相关的系统做了很多优化,避免了很多因各个系统间版本不符产生的很多Bug。
这也是很多资深Hadoop管理员所推荐的。
https://ccp.cloudera.com/display/DOC/Documentation//

2. 安装Java环境
由于整个Hadoop项目主要是通过Java开发完成的,因此需要JVM的支持。
添加匹配的Java版本的APT源
$ sudo apt-get install python-software-properties
$ sudo vim /etc/apt/sources.list.d/sun-java-community-team-sun-java6-maverick.list

deb http://ppa.launchpad.net/sun-java-community-team/sun-java6/ubuntu maverick main
deb-src http://ppa.launchpad.net/sun-java-community-team/sun-java6/ubuntu maverick main

安装sun-java6-jdk
$ sudo add-apt-repository ppa:sun-java-community-team/sun-java6
$ sudo apt-get update
$ sudo apt-get install sun-java6-jdk

阅读全文 »

,

1 Comment

Hadoop集群实践 之 (0) 完整架构设计 [ Hadoop(HDFS) , HBase , Zookeeper , Flume , Hive ]

目录结构
Hadoop集群实践 之 (0) 完整架构设计 [Hadoop(HDFS),HBase,Zookeeper,Flume,Hive]
Hadoop集群实践 之 (1) Hadoop(HDFS)搭建
Hadoop集群实践 之 (2) HBase&Zookeeper搭建
Hadoop集群实践 之 (3) Flume搭建
Hadoop集群实践 之 (4) Hive搭建

本文内容
Hadoop集群实践 之 (0) 完整架构设计 [Hadoop(HDFS),HBase,Zookeeper,Flume,Hive]

参考资料
CDH3_Installation_Guide_u3.pdf
http://hadoop.apache.org/docs/r0.19.2/cn/cluster_setup.html

在进入新的环境以后,面临一项非常重要的工作“线上的Hadoop集群的运维”,而对于Hadoop我之前仅仅是耳闻,并没有实际的部署和应用过。
因此,在整个学习过程中参阅了很多的资料,经历了从对整个架构的不了解,各种概念的不熟悉到最后成功的在本地搭建好了整个集群并能够成功调用集群来执行并行计算的任务。
可谓受益良多,本着开源分享的精神,我将整个学习的过程整理成一个系列的文档,分享给大家。

下面进入正文
有一种说法我觉得非常有道理,那就是:“搞什么东西之前,第一步是要知道What(是什么),然后是Why(为什么),最后才是How(怎么做)。如果习惯先How,然后What,最后才是Why,只会让自己变得浮躁,同时往往会将技术误用于不适合的场景。”

因此,首先应该明确的就是:什么是Hadoop?

Hadoop是Apache开源组织的一个分布式计算开源框架,目前在Amazon,Facebook和Yahoo等大型网站上都已经得到了应用。

Hadoop框架中最核心的设计就是:MapReduce和HDFS。
MapReduce的思想是由Google的一篇论文所提及而被广为流传的,简单的一句话解释就是“任务的分解与结果的汇总”。
分布式计算就好比蚂蚁吃大象,廉价的机器群可以匹敌任何高性能的计算机,纵向扩展始终抵不过横向扩展。
HDFS是Hadoop分布式文件系统(Hadoop Distributed File System)的缩写,为分布式计算存储提供了底层支持。

在实际的应用场景中,Hadoop并非单独出现的,它还有着众多的子项目,而应用最多的子项目就是HBase,Zookeeper,Hive。
另外,Flume也经常在整个Hadoop集群中担任重要的角色。

简单的描述一下这些系统:
HBase - Key/Value的分布式数据库
Zookeeper - 支撑分布式应用的协作系统
Hive - SQL解析引擎
Flume - 分布式的日志收集系统

下面这张图可以更好的阐述它们之间的关系:

在上面的图中,我们通过跟踪整个数据流的逻辑对每个服务器实现的功能和角色进行了描述。
总的说来就是一次通过采集原始Log文件,然后对Log文件进行分析计算,最后将结果进行存储并展现的过程。

需要介绍一点背景的是,因为是在虚拟机上搭建测试环境(条件有限),因此很多在实际场景中一般都应该分开在不同机器上部署的系统,都部署在了一起。

具体环境如下
OS: Ubuntu 10.10 Server 64-bit //选择Ubuntu是因为Cloudera的Hadoop集群套件对Ubuntu支持的很好
Servers:
hadoop-master:10.6.1.150
- namenode,jobtracker;hbase-master,hbase-thrift;
- secondarynamenode;
- hive-master,hive-metastore;
- zookeeper-server;
- flume-master
- flume-node
- datanode,taskTracker

hadoop-node-1:10.6.1.151
- datanode,taskTracker;hbase-regionServer;
- zookeeper-server;
- flume-node

hadoop-node-2:10.6.1.152
- dataNode,taskTracker;hbase-regionServer;
- zookeeper-server;
- flume-node

以上描述了三台机器各自的角色,通过 “-” 表示的每一行的几个角色都表示一般情况下是一起部署到独立的服务器上的。

下面,就让我们开始整个实战演练过程。
Hadoop集群实践 之 (1) Hadoop(HDFS)搭建
Hadoop集群实践 之 (2) HBase&Zookeeper搭建
Hadoop集群实践 之 (3) Flume搭建
Hadoop集群实践 之 (4) Hive搭建

, , , , ,

1 Comment