《Storm企业级应用:实战、运维和调优》——2.1 环境准备

2.1 环境准备

在安装Storm的之前要做一些准备工作,这涉及操作系统设置、ZooKeeper集群的管理以及Storm安装之前的一些依赖库。下面将介绍Storm的系统配置、协调器ZooKeeper等。
2.1.1 系统配置
在Linux上安装Storm之前,需要先做如下准备:
安装JDK 1.6。
安装SSH服务。
安装Python 2.6.6解释器。
1.?安装JDK 1.6
与Hadoop、HBase相同,Storm也需要JDK 1.6或者更高的版本。下面介绍安装JDK 1.6的具体步骤。
(1)下载JDK 1.6
从Java的官网,目前是Oracle公司的产品下载JDK,本书使用JDK的SE版本,从http://www.oracle.com/technetwork/java/javase/downloads/中下载JDK 1.6的安装包,注意要下载适应当前系统的JDK版本,一般是64位版本的JDK。
JDK 1.6版本的u18以及旧版本,不要下载,这些版本的垃圾回收操作容易遇到JVM碰撞问题。
(2)手动安装JDK 1.6
进入JDK安装目录(假设安装在/usr/lib/jvm/jdk)后,开始安装JDK,具体操作代码如下:

#修改权限
sudo chmod u+x jdk-***-linux-i586.bin

#安装
sudo -s ./jdk-***-linux-i586.bin

(3)配置环境变量
安装结束后,开始配置环境变量JAVA_HOME和CLASSPATH,修改指令如下:

vi /etc/prof?ile

进入prof?ile文件后,在文件下面输入如下内容:

#set JAVA Environment
export JAVA_HOME=/usr/lib/jvm/jdk
export ClASSPATH=".:$JAVA_HOME/lib:$CASSPATH"
export PATH="$JAVA_HOME:$PATH"

修改完环境变量后,验证JDK是否安装成功,输入如下命令:

java -version

如果出现Java版本信息,则说明安装成功。
2.?安装SSH服务
Storm集群模式的启动、关闭以及ZooKeeper集群需要SSH服务,所以使用的操作系统要安装此服务。
(1)安装SSH
确认节点可以连接Internet,执行如下命令检查SSH服务。

sudo ps –ef |grep ssh

如果没有ssh进程,则执行如下命令安装SSH服务。

sudo yum install openssh

(2)查看安装情况
执行下面命令查看SSH安装的版本。

ssh -version

执行之后如果出现如下信息,则表明安装已经成功。

OpenSSH_4.3p2, OpenSSL 0.9.8e-f?ips-rhel5 01 Jul 2008
Bad escape character 'sion'.

查看服务状态命令如下:

service sshd status

3.?安装Python 2.6.6
在安装Python之前,Linux系统中其实已经有了Python解释器,但如果版本太低,需要重新安装Python。
Python是Storm最底层的依赖,需要使用下面的命令下载并安装Python 2.6.6。

wget http:// www.python.org/ftp/python/2.6.6/Python-2.6.6.tar.bz2
tar –jxvf Python-2.6.6.tar.bz2
cd Python-2.6.6
./conf?igure
make
make install

安装完成后,需要使用命令测试Python 2.6.6是否安装成功。如果安装成功,则命令和结果如下:

python -V
Python 2.6.6

2.1.2 安装ZooKeeper集群
由于HBase、Kafka和Storm都使用ZooKeeper集群,大多数情况下,单个节点的ZooKeeper集群可以单独胜任这些应用,但是为了确保故障恢复或者部署大规模集群,可能需要更大规模节点的ZooKeeper集群,官方推荐的最小节点数为3。所以,本案例使用test1、test2和test3三台节点部署ZooKeeper,每个节点上都需要安装,下面介绍具体的安装部署过程。
1.?下载官方源码
从镜像网站下载ZooKeeper包,并将其解压安装,具体操作代码如下:

#下载、解压
wget http:// mirror.bjtu.edu.cn/apache/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz
mkdir -p /opt/modules
mv zookeeper-3.4.6.tar.gz /opt/modules/
tar -zxvf zookeeper-3.4.6.tar.gz
ln -s  /opt/modules/zookeeper-3.4.6 /opt/modules/zookeeper

#日志路径,配置文件用
mkdir -p /var/log/zookeeper
mkdir /tmp/zookeeper

2.?配置ZooKeeper属性文件
根据ZooKeeper集群节点情况,创建ZooKeeper配置文件conf/zoo.cfg后,将基本配置添加到配置文件中。
(1)配置服务器核心属性
使用复制命令生成配置文件,代码如下:

cd conf
cp zoo_sample.cfg zoo.cfg

然后将下面的代码追加到配置文件zoo.cfg中:

tickTime=2000
clientPort=2181
initLimit=5
syncLimit=2
server.1=test1:2888:3888
server.2=test2:2888:3888
server.3=test3:2888:3888

其中,每项参数的含义如下:
tickTime:这个时间是作为ZooKeeper服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每隔tickTime时间发送一个心跳。
clientPort:这个端口就是客户端连接ZooKeeper服务器的端口,ZooKeeper会监听这个端口,接受客户端的访问请求。
initLimit:这个配置项用来配置ZooKeeper接受客户端(这里所说的客户端不是用户连接ZooKeeper服务器的客户端,而是ZooKeeper服务器集群中连接到Leader的Follower服务器)初始化连接时最长能忍受多少个心跳时间间隔数。当已经超过5个心跳的时间(也就是tickTime)长度后,ZooKeeper服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是5×2000ms=10s。
syncLimit:这个配置项标识Leader与Follower之间发送消息、请求和应答时间,最长不能超过多少个tickTime的时间长度,总的时间长度就是2×2000ms=4s。
server.A=B:C:D:其中A是一个数字,表示这个是第几号服务器;B是这个服务器的IP地址;C表示这个服务器与集群中的Leader服务器交换信息的端口;D表示万一集群中的Leader服务器挂了,需要一个端口来重新选举出一个新的Leader,而这个端口就是用来执行选举时服务器相互通信的端口。如果是伪集群的配置方式,由于B都是相同的,所以不同的ZooKeeper实例通信端口号不能相同,要给它们分配不同的端口号。
接下来,添加myid文件,在dataDir目录(默认是/tmp/zookeeper)下创建myid文件,此文件中只包含一行,且内容为ZooKeeper部署节点对应的server.id中的ID编号。例如,test1、test2和test3分别对应的myid文件中的值是1、2和3。节点test1的myid文件的操作代码如下:

#创建文件myid
vi /tmp/zookeeper/myid

#将下面的数字添加到文件中
1

(2)配置日志打印属性
在默认情况下,日志放到当前目录下的zookeeper.out文件中,而在一般情况下需要将日志输出到指定的文件路径下,以便于查看收集和日志。下面的操作都是在ZooKeeper的安装主目录下进行。
首先,修改bin/zkEnv.sh,将下面代码添加到脚本主体的开头部分:

ZOO_LOG_DIR=/var/log/zookeeper

在默认情况下,日志输出到CONSOLE,关闭ROLLINGFILE。在生产环境中,需要将日志输出到ROLLINGFILE,并修改日志级别为INFO。这些配置项通过修改conf/log4j.properties实现,具体代码如下:

.log.dir=.
zookeeper.tracelog.dir=.

将上面对应的代码修改为下面的内容:

zookeeper.log.dir=/var/log/zookeeper
zookeeper.tracelog.dir=/var/log/zookeeper

将下面的代码使用#注释掉:

log4j.rootLogger=${zookeeper.root.logger}

将下面代码最前面的#去掉:

#log4j.rootLogger=TRACE, CONSOLE, ROLLINGFILE, TRACEFILE

同时修改文件的权限,因为需要用hadoop用户启动,将所有ZooKeeper相关的文件目录的所有者和组都修改为hadoop:hadoop,代码如下:

chown -R hadoop:hadoop /opt/modules/zookeeper*
chown -R hadoop:hadoop /var/log/zookeeper
chown -R hadoop:hadoop /tmp/zookeeper

3.?启动ZooKeeper集群
登录test1、test2和test3三个节点,进入ZooKeeper安装主目录,执行下面的命令:

su hadoop
bin/zkServer.sh start

使用下面的ZooKeeper客户端命令可以测试服务是否可用。

bin/zkCli.sh -server 127.0.0.1:2181

如果安装并启动成功,则执行上面的命令进入交互终端后,输入help命令会得到如下的打印信息:

[zk: 127.0.0.1:2181(CONNECTED) 1] help
ZooKeeper -server host:port cmd args
  connect host:port
  get path [watch]
  ls path [watch]
  set path data [version]
  rmr path
  delquota [-n|-b] path
  quit
  printwatches on|off
  create [-s] [-e] path data acl
  stat path [watch]
  close
  ls2 path [watch]
  history
  listquota path
  setAcl path acl
  getAcl path
  sync path
  redo cmdno
  addauth scheme auth
  delete path [version]
  setquota -n|-b val path
[zk: 127.0.0.1:2181(CONNECTED) 2] ls /
[kafkastorm, consumers, storm, hbase, brokers, zookeeper]
[zk: 127.0.0.1:2181(CONNECTED) 3]

其中,[zk: 127.0.0.1:2181 (CONNECTED) 2]前缀表示已经成功连接ZooKeeper,help命令表示查看当前交互客户端支持的命令,ls /命令表示查看当前ZooKeeper的根目录结构。
在ZooKeeper运行过程中,会在dataDir目录下生成很多日志和快照文件,而ZooKeeper运行进程并不负责定期清理合并这些文件,导致占用大量磁盘空间。因此,需要通过Cronjob等方式定期清除过期的日志和快照文件。

时间: 2024-10-08 21:21:55

《Storm企业级应用:实战、运维和调优》——2.1 环境准备的相关文章

《Storm企业级应用:实战、运维和调优》——导读

**前言**大数据是继云计算.物联网之后IT行业又一大颠覆性的技术变革.之前大数据在互联网.军事.金融.通信和物理学等领域已有不少落地案例,却因为近年来Hadoop技术的快速发展而引起业界广泛关注.可以说,Hadoop目前是大数据处理的关键技术,也是迄今为止,最成熟.应用最广泛的技术.但是Hadoop生态圈下面的数据处理几乎都是在离线状态下进行的,离线处理海量数据是比较耗时.耗力的,Storm的实时处理技术应运而生.正如曾经开发Storm的一位主要工程师所谈到的,Storm可以方便地在一个计算机

《Storm企业级应用:实战、运维和调优》——3.8 Worker、Task、Executor三者之间的关系

3.8 Worker.Task.Executor三者之间的关系 Storm集群中的一个物理节点启动一个或者多个Worker进程,集群的Topology都是通过这些Worker进程运行的.然而,Worker进程中又会运行一个或者多个Executor线程,每个Executor线程只运行一个Topology的一个组件(Spout或Bolt)的Task任务,Task又是数据处理的实体单元.Worker是进程,Executor对应于线程,Spout或Bolt是一个个的Task:同一个Worker只执行同一

《Storm企业级应用:实战、运维和调优》——2.3 安装部署Storm集群

2.3 安装部署Storm集群 Storm的安装.部署过程分为安装依赖.安装Storm.启动和查看安装等几个部分.其中,前两部分内容在三个节点上都是一样的,只要在启动时区分开角色即可.接下来将讲解Storm集群的安装过程.2.3.1 安装Storm依赖库 在Nimbus和Supervisor的节点上安装Storm时,都需要安装相关的依赖库,具体如下: ZeroMQ 2.1.7. JZMQ. 其中,ZeroMQ推荐使用2.1.7版本,请勿使用2.1.10版本.官方解释是因为该版本的一些严重Bug会

《Storm企业级应用:实战、运维和调优》——3.3 Bolt消息处理者

3.3 Bolt消息处理者 认识了消息源Spout和消息的数据存储元组Tuple,接下来了解消息的处理者Bolt.Bolt是接收Spout发出元组Tuple后处理数据的组件,所有的消息处理逻辑被封装在Bolt中,Bolt负责处理输入的数据流并产生输出的新数据流.3.3.1 Bolt介绍 消息处理者Bolt在Storm中是一个被动的角色.Bolt把元组作为输入,然后产生新的元组作为输出. 1.?Bolt的功能 Bolt可以执行过滤.函数操作.合并.写数据库等操作.Bolt还可以简单地传递消息流,复

《Storm企业级应用:实战、运维和调优》——1.2 Storm是什么

1.2 Storm是什么 本节主要通过介绍Storm出现的背景.简介.设计思想.与大数据框架Hadoop的比较等内容,使读者了解Storm的设计理念,从整体感观上切入,并快速掌握Storm.1.2.1 Storm出现的背景 互联网从诞生的第一时间起,对世界的最大改变就是让信息能够实时交互,从而大大加速了各个环节的效率.正因为大家有对信息实时响应.实时交互的需求,所以软件行业除了个人操作系统之外,数据库(更精确的说是关系型数据库)应该是发展最快.收益最为丰厚的产品了.记得十年前,很多银行别说实时转

《Storm企业级应用:实战、运维和调优》——1.4 Storm的特性

1.4 Storm的特性 Storm是一个开源的分布式实时计算系统,可以简单.可靠地处理大量的数据流.Storm支持水平扩展,具有高容错性,保证每个消息都会得到处理,而且处理速度很快(在一个小集群中,每个节点每秒可以处理数以百万计的消息).Storm的部署和运维都很便捷,而且更为重要的是,可以使用任意编程语言来开发应用. 下面介绍Storm的特点. (1)编程模型简单 在大数据处理方面,Hadoop为开发者提供了MapReduce原语,使并行批处理程序变得非常简单和优美.同样,Storm也为大数

《Storm企业级应用:实战、运维和调优》——1.1 什么是实时流计算

1.1 什么是实时流计算 所谓实时流计算,就是近几年由于数据得到广泛应用之后,在数据持久性建模不满足现状的情况下,急需数据流的瞬时建模或者计算处理.这种实时计算的应用实例有金融服务.网络监控.电信数据管理.Web应用.生产制造.传感检测,等等.在这种数据流模型中,单独的数据单元可能是相关的元组(Tuple),如网络测量.呼叫记录.网页访问等产生的数据.但是,这些数据以大量.快速.时变(可能是不可预知)的数据流持续到达,由此产生了一些基础性的新的研究问题--实时计算.实时计算的一个重要方向就是实时

《Storm企业级应用:实战、运维和调优》——1.5 Storm的功能

1.5 Storm的功能 Storm有许多应用领域:实时分析.在线机器学习.持续计算.分布式RPC(远过程调用协议,一种通过网络从远程计算机程序上请求服务).ETL(Extraction-Transformation-Loading的缩写,即数据抽取.转换和加载)等.下面介绍Storm的三大主要应用. (1)信息流处理(stream processing) Storm可用来实时处理新数据和更新数据库,兼具容错性和可扩展性,即Storm可以用来处理源源不断流进来的消息,处理之后将结果写入某个存储中

《Storm企业级应用:实战、运维和调优》——3.7 Worker工作者进程

3.7 Worker工作者进程 工作者进程(Worker)是一个Java进程,执行拓扑的一部分任务.一个Worker进程执行一个Topology的子集,它会启动一个或多个Executor线程来执行一个Topology的组件(Spout或Bolt).因此,拓扑在执行时,可能跨一个或多个Worker.Storm会尽量均匀分配任务给所有的Worker.不会出现一个Worker为多个Topology服务的情况.

《Storm企业级应用:实战、运维和调优》——3.6 Task任务

3.6 Task任务 Task是运行Spout或Bolt的单元,每一个Spout/Bolt的线程称为一个Task.在Storm 0.8及之后的版本中,Task不再与物理线程对应,同一个Spout/Bolt的Task可能会共享一个物理线程,该线程称为Executor.实际的数据处理由Task完成,在Topology的生命周期中,每个组件的Task数量不会变化,而Executor的数量却不一定.在一般情况下,线程数小于等于Task数量.默认Task的数量等于Executor线程数量,即一个Execu