NameNode HA配置详解

HDFS 集群中NameNode 存在单点故障(SPOF )。对于只有一个NameNode 的集群,如果NameNode 机器出现意外downtime,那么整个集群将无法使用,直到NameNode 重新启动。HDFS 的HA 功能通过配置Active/Standby 两个NameNodes 实现在集群中对NameNode 的热备来解决上述问题。如果出现Active NN的downtime,就会切换到Standby使得NN服务不间断。HDFS HA依赖zookeeper,下面是测试的过程。

环境如下
主机:debugo0[1-3],CentOS 6.5
Hadoop 2.4.1
ZooKeeper 3.4.6

HDFS ZooKeeper
debugo01 NN,ZKFC,JournalNode,DN Server
debugo02 NN,ZKFC,JournalNode,DN Server
debugo03 NN,JournalNode,DN Server

Continue reading

Posted in BigData, Hadoop.

Spark Streaming

Spark Streaming基于Spark处理流式数据的框架,在MapReduce中,由于其分布式特性——所有数据需要读写磁盘、启动job耗时较大,难以满足时效性要求。而Streaming能够在Spark上生根发芽的原因是因为其内存特性、低延时的执行引擎和高速的执行效率。
Streaming的原理是将Stream数据分成小的时间间隔(比如几秒),即将其离散化(Discretized)并转换成一个一个数据集(RDD),然后分批处理处理这小的RDD。所以Streaming很容易很mlib,Spark SQL等进行结合,做到实时的数据分析处理。此外,Streaming也继承了RDD的容错特性。如果RDD 的某些 partition 丢失了 , 可以通过 lineage 信息重新计算恢复。
Streaming的数据源主要分下面两类:
· 外部文件系统 , 如 HDFS,Streaming可以监控一个目录中新产生的数据,并及时处理。如果出现fail,可以通过重新读取数据来恢复 , 绝对不会有数据丢失。
· 网络系统:如MQ系统(Kafka、ZeroMQ、Flume等)。Streaming会默认会在两个不同节点加载数据到内存 , 一个节点 fail 了 , 系统可以通过另一个节点的数据重算。假设正在运行 InputReceiver 的节点 fail 了 , 可能会丢失一部分数据。
streaming-arch Continue reading

Posted in Dev, Java|Scala, Spark.

kerberos安装和管理

Kerberos 服务(kerberos官网)是一种通过网络提供安全验证处理的客户机/服务器体系结构。通过验证,可保证网络事务的发送者和接收者的身份真实。该服务还可以检验来回传递的数据的有效性(完整性),并在传输过程中对数据进行加密(保密性)。使用 Kerberos 服务,可以安全登录到其他计算机、执行命令、交换数据以及传输文件。此外,该服务还提供授权服务,这样,管理员便可限制对服务和计算机的访问。而且,作为 Kerberos 用户,您还可以控制其他用户对您帐户的访问。 Continue reading

Posted in Ops, Tools.

Spark中的编程模型

1. Spark中的基本概念

在Spark中,有下面的基本概念。
Application:基于Spark的用户程序,包含了一个driver program和集群中多个executor
Driver Program:运行Application的main()函数并创建SparkContext。通常SparkContext代表driver program
Executor:为某Application运行在worker node上的饿一个进程。该进程负责运行Task,并负责将数据存在内存或者磁盘上。每个Application都有自己独立的executors
Cluster Manager: 在集群上获得资源的外部服务(例如 Spark Standalon,Mesos、Yarn)
Worker Node: 集群中任何可运行Application代码的节点
Task:被送到executor上执行的工作单元。
Job:可以被拆分成Task并行计算的工作单元,一般由Spark Action触发的一次执行作业。
Stage:每个Job会被拆分成很多组Task,每组任务被称为stage,也可称TaskSet。该术语可以经常在日志中看打。
RDD:Spark的基本计算单元,通过Scala集合转化、读取数据集生成或者由其他RDD经过算子操作得到。

2. Spark应用框架

1
客户Spark程序(Driver Program)来操作Spark集群是通过SparkContext对象来进行,SparkContext作为一个操作和调度的总入口,在初始化过程中集群管理器会创建DAGScheduler作业调度和TaskScheduler任务调度。
DAGScheduler作业调度模块是基于Stage的高层调度模块(参考:Spark分析之DAGScheduler),DAG全称 Directed Acyclic Graph,有向无环图。简单的来说,就是一个由顶点和有方向性的边构成的图中,从任意一个顶点出发,没有任何一条路径会将其带回到出发的顶点。它为每个Spark Job计算具有依赖关系的多个Stage任务阶段(通常根据Shuffle来划分Stage,如groupByKey, reduceByKey等涉及到shuffle的transformation就会产生新的stage),然后将每个Stage划分为具体的一组任务,以TaskSets的形式提交给底层的任务调度模块来具体执行。其中,不同stage之前的RDD为宽依赖关系。 TaskScheduler任务调度模块负责具体启动任务,监控和汇报任务运行情况。
创建SparkContext一般要经过下面几个步骤:
a). 导入Spark的类和隐式转换

Continue reading

Posted in BigData, Spark.

使用IDEA开发Spark应用

IDEA 全称IntelliJ IDEA,是java语言开发的集成环境,IntelliJ在业界被公认为最好的java开发工具之一,尤其在智能代码助手、代码自动提示、重构、J2EE支持、Ant、JUnit、CVS整合、代码审查、 创新的GUI设计等方面的功能都非常棒,而且IDEA是目前Scala支持最好的IDE。IDEA分ultimate和free edition版,ultimate提供了J2EE等很多非常强力的功能,free edition我觉得已经对于我这样的初学者已经够用了。前面写过一篇配置IntelliJ IDEA 13的SBT和Scala开发环境,本文在这个基础上使用IDEA进行Spark应用的配置和开发。 Continue reading

Posted in Dev, Java|Scala, Spark.

MySQL Semisync

默认情况下,MySQL的复制功能是异步的。master把binlog发送给slave时,这个复制动作就已经完成,master不会验证slave是否接收完毕(类似于Oracle DataGuard Maximum Performance)。异步复制同时意味着在把数据从一个mysqld实例拷贝到另一个mysqld时有一个延时,即master当前提交的事务不会在同一时刻拷贝到slave。这也带来了一定的风险,当master或slave发生故障时,slave有可能会没有接收到master发送过来的binlog,这样就会造成了master/slave的数据不一直,甚至在恢复时也会造成数据的损失。
为了解决这个问题,MySQL 在5.5以后引入了一种半同步模式,slave在接收binlog并写入relay log后会给服务器发送一个反馈,告诉master接收完成,当出现超时情况时,master会暂时切换到异步复制模式,和Oracle DataGuard Maximum Available的处理方式比较相似。半同步复制模式必须在master和slave端同时启用,否则master会使用默认的异步模式。
Continue reading

Posted in Database, MySQL.

Scala Review : Class & Trait

1. 类成员可见性有两种,private,protected和public(和java一样),private需要声明,public无需额外声明。private[this]是更严格的限定,使用这个限定的成员只对被实例可见。private[class_name]和private是一样的,这个成员对这个类的实例可见。而protected[this]允许子类实例访问这个成员。
示例如下:

Continue reading

Posted in Dev, Java|Scala.

Cacti原理和配置

Cacti是一个基于PHP,MySQL,SNMP及RRDTool开发的图形监控分析工具。它本身是一个具有强大绘图挂历展示能力的PHP Web应用,监控数据的获取依赖于SNMP(snmpget),对于数据的存储和图形绘制依赖于RRDTool(也就是说数据必须是时间序列相关的数据)。 Cacti 的设计初衷是为了让 RRDTool使用更加方便。此外,Cacti 也可外挂 Scripts 及加上 Templates 来作出各式各样的监控图。所以要深入了解Cacti,首选需要了解SNMP协议和RRDTool。
Continue reading

Posted in Ops, Tools.

限定SSH登录的命令执行

最近需要创建一个用于监控主机性能的帐号,由于是核心的生产服务器,这个帐号登录需要严格限定执行常见的sysstat, top等性能命令,完成后就要退出登录。查了一些资料后了解authorized_keys中的command等一系列选项可以用于限定使用公钥验证登录后只能执行的命令,服务器在完成该脚本额执行后,SSH也会中端和客户端的通信。
authorized_keys中的command选项描述如下:
command=”command”
Specifies that the command is executed whenever this key is used
for authentication. The command supplied by the user (if any) is
ignored. The command is run on a pty if the client requests a
pty; otherwise it is run without a tty. If an 8-bit clean chan-
nel is required, one must not request a pty or should specify
no-pty. A quote may be included in the command by quoting it
with a backslash. This option might be useful to restrict cer-
tain public keys to perform just a specific operation. An exam-
ple might be a key that permits remote backups but nothing else.
Note that the client may specify TCP and/or X11 forwarding unless
they are explicitly prohibited. The command originally supplied
by the client is available in the SSH_ORIGINAL_COMMAND environ-
ment variable. Note that this option applies to shell, command
or subsystem execution.
Continue reading

Posted in Linux, Ops.

Linux Systemd服务管理

systemd(systemd官网)是Linux下的一种init软件, 较好地管理多个系统服务之间的并行启动和依赖,同时达到降低系统开销的效果,最终代替现在常用的System V与BSD风格init程序。新发行的RHEL 7也用systemd来取代了sysV来管理服务。Systemd中对系统的配置有大量改变,例如在Systemd中hostname可以在/etc/hostname中设置,而非rc.conf中的HOSTNAME环境变量等。本文先简单介绍一下systemd下服务的简单配置。 Continue reading

Posted in Linux, Ops.