Apache Mina通信框架架构与应用

Apache Mina Server 是一个网络通信应用框架,也就是说,它主要是对基于 TCP/IP、UDP/IP协议栈的通信框架(当然,也可以提供 JAVA 对象的序列化服务、虚拟机管道通信服务等),Mina 可以帮助我们快速开发高性能、高扩展性的网络通信应用,Mina 提供了事件驱动、异步(Mina 的异步 IO 默认使用的是 JAVA NIO 作为底层支持)操作的编程模型。 从官网文档“MINA based Application Architecture”中可以看到Mina作为一个通信层框架,在实际应用所处的位置,如图所示: Mina位于用户应用程序和底层Java网络API(和in-VM通信)之间,我们开发基于Mina的网络应用程序,就无需关心复杂的通信细节。 应用整体架构 再看一下,Mina提供的基本组件,如图所示: 也就是说,无论是客户端还是服务端,使用Mina框架实现通信的逻辑分层在概念上统一的,即包含如下三层: I/O Service – Performs actual I/O I/O Filter Chain – Filters/Transforms bytes into

Maven构建应用程序常用配置

使用Maven来构建应用程序,可以非常方便地管理应用相关的资源。众所周知,应用程序中涉及到的一些依赖关系,如Java应用程序依赖jar文件,如果只是手动找到相应的资源,可能需要花费一些时间。而且,即使已经积累了库文件,在未来应用程序升级以后,还要考虑到依赖库文件的升级情况,再次搜索收集。 还有一个问题,对应用程序依赖文件的管理是个非常复杂工作,占用存储空间不说,还可能因为应用之间的版本问题导致依赖冲突。使用Maven的pom模型来构建应用程序,可以更加有效地的管理,而且配置内容非常清晰(有时多了,可能pom文件显得有点臃肿)。 下面将常用的Maven配置,整理如下,以备参考。首先,整理一个简单的目录,作为快速查询之用: 设置字符集 拷贝src/main/resources/资源文件 编译代码 、编译打包成jar文件 构建测试用例配置 输出依赖jar文件到指定目录 配置指定的repository 将应用及其依赖jar文件打成一个jar文件 具体配置的详细内容,如下所

HBase-0.90.4集群安装配置

HBase是Hadoop数据库,能够实现随机、实时读写你的Big Data,它是Google的Bigtable的开源实现,可以参考Bigtable的论文Bigtable: A Distributed Storage System for Structured。HBase的存储模型可以如下三个词来概括:distributed, versioned, column-oriented。HBase并非只能在HDFS文件系统上使用, 你可以应用在你的本地文件系统上部署HBase实例来存储数据。 准备工作 hbase-0.90.4.tar.gz [http://labs.renren.com/apache-mirror//hbase/stable/hbase-0.90.4.tar.gz] zookeeper-3.3.4.tar.gz 下面介绍Standalone和Distributed安装过程。 Standalone模式 这种安装模式,是在你的本地文件系统上安装配置一个HBase实例,安装配置比较简单。 首先,要保证你的本地系统能够通过ssh无密码访问,配置如下: ssh-keygen -t dsa cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys 检查一下权限:你的~/.ssh目录的权限是否为755,~/.ssh/authorized_k

HBase Thrift客户端Java API实践

HBase的Thrift API定义,可以通过链接 http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/resources/org/apache/hadoop/hbase/thrift/Hbase.thrift?view=markup看到,我们需要安装Thrift编译器,才能生成HBase跨语言的API。 首先下载上面链接的内容,保存为Hbase.thrift。 然后,执行如下命令,生成不同编程语言的HBase API: [hadoop@master hbase]$ thrift --gen cpp Hbase.thrift [hadoop@master hbase]$ thrift --gen java Hbase.thrift [hadoop@master hbase]$ thrift --gen py Hbase.thrift [hadoop@master hbase]$ thrift --gen perl Hbase.thrift [hadoop@master hbase]$ thrift --gen csharp Hbase.thrift [hadoop@master hbase]$ thrift --gen php Hbase.thrift [hadoop@master hbase]$ thrift --gen js Hbase.thrift [hadoop@master hbase]$ thrift --gen go Hbase.thrift [hadoop@master hbase]$ thrift --gen erl Hba

CentOS安装和使用Thrift

Thrift是Apache的一个开源的跨语言服务开发框架,它提供了一个代码生成引擎来构建服务,支持C++,Java,Python,PHP,Ruby,Erlang,Perl,Haskell,C#,Cocoa,JavaScript,Node.js,Smalltalk,OCaml,Delphi等多种编程语言。 一般来说,使用Thrift来开发应用程序,主要建立在两种场景下: 第一,在我们开发过程中,一个比较大的项目需要多个团队进行协作,而每个团队的成员在编程技术方面的技能可能不一定相同,为了实现这种跨语言的开发氛围,使用Thrift来构建服务 第二,企业之间合作,在业务上不可避免出现跨语言的编程环境,使用Thrift可以达到类似Web Services的跨平台的特性 安装配置Thrift Thrift的编译器使用C++编写的,在安装编译器之前,首先应该保证操作系统基本环境支持C++的编译,安装相关依赖的软件包,如下所示 sudo yum install automake libtool flex bison pkgconfig gcc-c++ boost-devel libevent-devel zlib-devel python-devel

SolrCloud 4.3.1+Tomcat 7安装配置实践

我们使用Solr Replication可以实现Solr服务器的可用性,即使某一个索引副本由于磁盘介质故障或者误操作删除等,其他的多个复制副本仍然可以提供服务。如果只是单纯的基于Solr Replication技术,只能对一个索引进行管理维护,当索引数据达到一定规模,搜索的性能成了瓶颈,除了重新规划设计索引,实现逻辑划分以外,没有更好地方法实现查询服务器的可扩展性。 SolrCloud就是为了解决这个问题而提出的。SolrCloud通过ZooKeeper集群来进行协调,使一个索引(SolrCloud中叫做一个Collection)进行分片,各个分片可以分布在不同的物理节点上,而且,对于同一个Collection的多个分片(Shard)之间没有交集,亦即,多个物理分片组成一个完成的索引Collection。为了保证分片数据的可用性,SolrCloud自动支持Solr Replication,可以同时对分片进行复制,冗余存储。下面,我们基于Solr最新的4.3.1版本进行安装配置SolrCloud集群,通过实践来实现索引数据的分布存储和检

Ubuntu系统安装配置Redis

Redis是一个NoSQL数据库,在数据需要频繁更新,并且数据的访问热点范围比较广的应用场景下,Redis的效率很不错。 下面介绍Redis的安装过程,如下面的步骤所示。 1、下载安装 wget http://redis.googlecode.com/files/redis-2.2.13.tar.gz tar -zxf redis-2.2.13.tar.gz cd redis-2.2.13 make sudo make install 这时Redis 的可执行文件被放到了/usr/local/bin。 2、下载配置文件和init启动脚本 wget https://github.com/ijonas/dotfiles/raw/master/etc/init.d/redis-server wget https://github.com/ijonas/dotfiles/raw/master/etc/redis.conf sudo mv redis-server /etc/init.d/redis-server sudo chmod +x /etc/init.d/redis-server sudo mv redis.conf /etc/redis.conf 3、初始化用户和日志路径 第一次启动Redis前,建议为Redis单独建立一个用户,并新建data和日志文件夹。 sudo useradd redis sudo mkdir -p /var/lib/redis sudo

Solr实现SQL的查询与统计

Cloudera公司已经推出了基于Hadoop平台的查询统计分析工具Impala,只要熟悉SQL,就可以熟练地使用Impala来执行查询与分析的功能。不过Impala的SQL和关系数据库的SQL还是有一点微妙地不同的。 下面,我们设计一个表,通过该表中的数据,来将SQL查询与统计的语句,使用Solr查询的方式来与SQL查询对应。这个翻译的过程,是非常有趣的,你可以看到Solr一些很不错的功能。 用来示例的表结构设计,如图所示: 下面,我们通过给出一些SQL查询统计语句,然后对应翻译成Solr查询语句,然后对比结果。 查询对比 条件组合查询 SQL查询语句: SELECT log_id,start_time,end_time,prov_id,city_id,area_id,idt_id,cnt,net_type FROM v_i_event WHERE prov_id = 1 AND net_type = 1 AND area_id = 10304 AND time_type = 1 AND time_id >= 20130801 AND time_id <= 20130815 ORDER BY log_id LIMIT 10; 查询结果,如图所示: Solr查询URL: http://slav

Ubuntu系统下Hadoop 2.0.4集群安装配置

Hadoop 2已经将HDFS和YARN分开管理,这样分开管理,可以是HDFS更方便地进行HA或Federation,实现HDFS的线性扩展(Scale out),从而保证HDFS集群的高可用性。从另一个方面们来说,HDFS可以作为一个通用的分布式存储系统,而为第三方的分布式计算框架提供方便,就像类似YARN的计算框架,其他的如,Spark等等。YARN就是MapReduce V2,将原来Hadoop 1.x中的JobTracker拆分为两部分:一部分是负责资源的管理(Resource Manager),另一部分负责任务的调度(Scheduler)。 安装配置 1、目录结构 下载hadoop-2.0.4软件包,解压缩后,可以看到如下目录结构: shirdrn@master:~/cloud/hadoop2/hadoop-2.0.4-alpha$ ls bin etc include lib libexec LICENSE.txt logs NOTICE.txt README.txt sbin share etc目录 HDFS和YARN的配置文件,都存放在etc/hadoop目录下面,可以多各个文件进行配置: shirdrn@master:~/cloud/hadoop2/hadoop-2.0.4-alpha$

CentOS 6.4安装Nginx

Nginx是一款性能很高的反向代理服务器,而且支持负载均衡的配置,很容易上手,配置简单。另外,Nginx通过模块可以很容易扩展,所以Nginx所拥有的功能集合也是很大的。这里不再累述,可以参考官网文档或者相关资料。 下面,我们在CentOS 6.4上安装配置Nginx。 安装Nginx 首先,需要下载Nginx签名文件: wget http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm 导入Nginx签名文件,执行如下命令: sudo rpm --import nginx_signing.key 然后,可以进行安装了,执行如下命令: sudo yum install nginx 安装过程中,可能会提示安装一些依赖软件包。 等待安装完成后,一些目录和文件的基本信息,如下所示: 进程ID文件为/var/run/nginx.pid Nginx的配置文件存放在/etc/nginx/目录下 可执行程序文件为/usr/sbin/nginx 站点默认目录为/usr/share/nginx/html 错误日志路径为/var/log/nginx/error.log/li> 访

Solr自动生成ID配置实践

Solr基于Lucene的索引,而索引中的最基本的单元式Document,在Solr中,管理每一个Document(更新、删除、查询),基本都会用到对应的ID,类似关系数据表中的主键。但是,如果我希望Solr能够自动生成这个唯一的ID,有时候也省去了不少的工作,而只需要在Solr中进行配置即可。 下面,通过实例来说明,如何配置Solr支持的UUID。首先,示例的schema.xml对应的表结构,如图所示: 在Solr中配置生成唯一UUID,需要修改两个配置文件: schema.xml schema.xml文件的配置内容,增加如下类型配置: <fieldType name="uuid" class="solr.UUIDField" indexed="true" /> 再增加ID字段的类型,如下所示: <field name="id" type="uuid" indexed="true" stored="true" multiValued="false" required="true" /> 这样还不够,还需要指定在更新索引的时候,

Oozie简介与快速入门

Oozie是一个基于工作流引擎的开源框架,是由Cloudera公司贡献给Apache的,它能够提供对Hadoop MapReduce和Pig Jobs的任务调度与协调。Oozie需要部署到Java Servlet容器中运行。 Oozie工作流定义,同JBoss jBPM提供的jPDL一样,也提供了类似的流程定义语言hPDL,通过XML文件格式来实现流程的定义。对于工作流系统,一般都会有很多不同功能的节点,比如分支、并发、汇合等等,Oozie也有类似的一些概念,不做过多解释,更多信息可以参考相关文档。 这里,简单描述一下,Oozie定义了控制流节点(Control Flow Nodes)和动作节点(Action Nodes),其中控制流节点定义了流程的开始和结束,以及控制流程的执行路径(Execution Path),如decision、fork、join等;而动作节点包括Hadoop map-reduce、Hadoop文件系统、Pig、SSH、HTTP、eMail和Oozie子流程。 下面我们看一下,官方文档中给出的定义流程的例子,流程定义示例如图所示: 这个流程图表达了WordCount统计