paulwong

#

使用 Apache MINA 开发高性能网络应用程序[转]

本文将通过一个简单的问候程序 HelloServer 来介绍 MINA 的基础架构的同时演示如何使用 MINA 开发网络应用程序。
Apache MINA(Multipurpose Infrastructure for Network Applications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架。当前发行的 MINA 版本支持基于 Java NIO 技术的 TCP/UDP 应用程序开发、串口通讯程序(只在最新的预览版中提供),MINA 所支持的功能也在进一步的扩展中。

目前正在使用 MINA 的软件包括有:Apache Directory Project、AsyncWeb、AMQP(Advanced Message Queuing Protocol)、RED5 Server(Macromedia Flash Media RTMP)、ObjectRADIUS、Openfire 等等。

本文将通过一个简单的问候程序 HelloServer 来介绍 MINA 的基础架构的同时演示如何使用MINA 开发网络应用程序。

环境准备

首先到官方网站下载最新的 MINA 版本,地址是:http://mina.apache.org/downloads.html。下载之前先介绍一下 MINA 的两个版本:1.0.x 适合运行环境为 JDK1.4,1.1.x 适合 JDK1.5 的版本,两者的编译环境都需要 JDK1.5。JDK1.5 已经是非常普遍了,本文中使用 1.1.5 版本的 MINA,编译和运行所需的文件是 mina-core-1.1.5.jar。
下载 MINA 的依赖包 slf4j。MINA 使用此项目作为日志信息的输出,而 MINA 本身并不附带此项目包,请到http://www.slf4j.org/download.html 地址下载 slf4j 包,slf4j 项目解压后有很多的文件,本例中只需要其中的 slf4j-api-1.4.3.jar 和 slf4j-simple-1.4.3.jar 这两个 jar 文件。如果没有这两个文件就会导致启动例子程序的时候报 org/slf4j/LoggerFactory 类没找到的错误。
当然要求机器上必须装有 1.5 或者更新版本的 JDK。
最好你应该选择一个顺手的 Java 开发环境例如 Eclipse 或者 NetBeans 之类的,可以更方便的编码和调试,虽然我们的最低要求只是一个简单的文本编辑器而已。



编写代码并执行

编写代码 HelloServer.java 如下

package demo.mina.echo;

import java.io.IOException;
import java.net.InetSocketAddress;

import org.apache.mina.common.*;
import org.apache.mina.transport.socket.nio.*;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;

/**
 * HelloServer演示程序
 * 
@author liudong (
                    
http://www.dlog.cn/javayou
                )
 
*/
public class HelloServer {

    private static final int PORT = 8080;
/**
 * 
@param args
 * 
@throws IOException 
 
*/
public static void main(String[] args) throws IOException {
        IoAcceptor acceptor = new SocketAcceptor();        
        IoAcceptorConfig config = new SocketAcceptorConfig();
        DefaultIoFilterChainBuilder chain = config.getFilterChain();
        //使用字符串编码
        chain.addLast("codec", 
new ProtocolCodecFilter(new TextLineCodecFactory()));
        //启动HelloServer
        acceptor.bind(new InetSocketAddress(PORT), new HelloHandler(), config);
        System.out
.println("HelloServer started on port " + 
PORT);
    }
}

/**
 * HelloServer的处理逻辑
 * 
@author liudong
 
*/
class HelloHandler extends IoHandlerAdapter {
/**
 * 当有异常发生时触发
 
*/
@Override
    public void exceptionCaught(IoSession ssn, Throwable cause) {
        cause.printStackTrace();
        ssn.close();
    }

/**
 * 有新连接时触发
 
*/
@Override
public void sessionOpened(IoSession ssn) throws Exception {
    System.out.println("session open for " + ssn.getRemoteAddress());
    }

/**
 * 连接被关闭时触发
 
*/
@Override
public void sessionClosed(IoSession ssn) throws Exception {
    System.out.println("session closed from " + ssn.getRemoteAddress());
    }

/**
 * 收到来自客户端的消息
 
*/
public void messageReceived(IoSession ssn, Object msg) throws Exception {    
    String ip = ssn.getRemoteAddress().toString();
System.out.println("===> Message From " + ip +" : " + msg);    
    ssn.write("Hello " + msg);
    }
}

编译执行
先不用试着去读懂每一行代码的具体意思,用你顺手的编译器编译 HelloServer.java,如果报错请确认是否已将前面提到的三个 jar 文件添加至类路径中。如果一切顺利接着就可以启动HelloServer 程序,启动后提示:HelloServer started on port 8080 表示启动成功,如果启动失败,问题无外乎是类没找到或者端口占用。如果端口被占用的话,换一个罗,修改 PORT 常量值后再次编译并启动。

测试服务器
打开命令行窗口,输入 telnet localhost 8080 后,输入您的英文名或者其他一些乱七八糟的字符后回车再去看看刚启动的服务程序有何反应。我的反应如下:

HelloServer started on port 8080
session open for /127.0.0.1:3023
===> Message From /127.0.0.1:3023 :hello
===> Message From /127.0.0.1:3023 :hello
===> Message From /127.0.0.1:3023 :liudong
===> Message From /127.0.0.1:3023 :Winter Lau



好了,一切正常,恭喜你的第一个使用 MINA 开发的网络程序已经成功运行了。




MINA 基本类的描述

在介绍架构之前先认识几个接口:

IoAccepter 相当于网络应用程序中的服务器端

IoConnector 相当于客户端

IoSession 当前客户端到服务器端的一个连接实例

IoHandler 业务处理逻辑

IoFilter 过滤器用于悬接通讯层接口与业务层接口






MINA 的基础架构

下图是 MINA 的架构图,


图 1:MINA 的架构图


在图中的模块链中,IoService 便是应用程序的入口,相当于我们前面代码中的 IoAccepter,IoAccepter 便是 IoService 的一个扩展接口。IoService 接口可以用来添加多个 IoFilter,这些 IoFilter 符合责任链模式并由 IoProcessor 线程负责调用。而 IoAccepter 在 ioService 接口的基础上还提供绑定某个通讯端口以及取消绑定的接口。在上面的例子中,我们是这样使用 IoAccepter 的:

IoAcceptor acceptor = new SocketAcceptor();



相当于我们使用了 Socket 通讯方式作为服务的接入,当前版本的 MINA 还提供了除 SocketAccepter 外的基于数据报文通讯的 DatagramAccepter 以及基于管道通讯的 VmPipeAccepter。另外还包括串口通讯接入方式,目前基于串口通讯的接入方式已经在最新测试版的 MINA 中提供。你也可以自行实现 IoService 接口来使用自己的通讯方式。

而在上图中最右端也就是 IoHandler,这便是业务处理模块。相当于前面例子中的 HelloHandler 类。在业务处理类中不需要去关心实际的通讯细节,只管处理客户端传输过来的信息即可。编写 Handler 类就是使用 MINA 开发网络应用程序的重心所在,相当于 MINA 已经帮你处理了所有的通讯方面的细节问题。为了简化 Handler 类,MINA 提供了 IoHandlerAdapter 类,此类仅仅是实现了 IoHandler 接口,但并不做任何处理。

一个 IoHandler 接口中具有如下一些方法(摘自 MINA 的 API 文档):

void exceptionCaught(IoSession session, Throwable cause)
当接口中其他方法抛出异常未被捕获时触发此方法
void messageReceived(IoSession session, Object message)
当接收到客户端的请求信息后触发此方法.
void messageSent(IoSession session, Object message)
当信息已经传送给客户端后触发此方法.
void sessionClosed(IoSession session)
当连接被关闭时触发,例如客户端程序意外退出等等.
void sessionCreated(IoSession session)
当一个新客户端连接后触发此方法.
void sessionIdle(IoSession session, IdleStatus status)
当连接空闲时触发此方法.
void sessionOpened(IoSession session)
当连接后打开时触发此方法,一般此方法与 sessionCreated 会被同时触发


前面我们提到 IoService 是负责底层通讯接入,而 IoHandler 是负责业务处理的。那么 MINA 架构图中的 IoFilter 作何用途呢?答案是你想作何用途都可以。但是有一个用途却是必须的,那就是作为 IoService 和 IoHandler 之间的桥梁。IoHandler 接口中最重要的一个方法是 messageReceived,这个方法的第二个参数是一个 Object 型的消息,总所周知,Object 是所有 Java 对象的基础,那到底谁来决定这个消息到底是什么类型呢?答案也就在这个 IoFilter 中。在前面使用的例子中,我们添加了一个 IoFilter 是 new ProtocolCodecFilter(new TextLineCodecFactory()),这个过滤器的作用是将来自客户端输入的信息转换成一行行的文本后传递给 IoHandler,因此我们可以在 messageReceived 中直接将 msg 对象强制转换成 String 对象。

而如果我们不提供任何过滤器的话,那么在 messageReceived 方法中的第二个参数类型就是一个 byte 的缓冲区,对应的类是 org.apache.mina.common.ByteBuffer。虽然你也可以将解析客户端信息放在 IoHandler 中来做,但这并不是推荐的做法,使原来清晰的模型又模糊起来,变得 IoHandler 不只是业务处理,还得充当协议解析的任务。

MINA自身带有一些常用的过滤器,例如LoggingFilter(日志记录)、BlackListFilter(黑名单过滤)、CompressionFilter(压缩)、SSLFilter(SSL加密)等。



其他

MINA 不仅仅是用来开发网络服务器端应用程序,它一样可以使用 IoConnector 来连接到各种各样的网络服务程序。

通过本文中 HelloServer 这个例子,我们在惊叹 MINA 可以带来多么大便利的同时,还不得不为其卓越的性能而骄傲,据称使用MINA开发服务器程序的性能已经逼近使用 C/C++ 语言开发的网络服务。作为 MINA 的入门文章,性能问题不在本文讨论范围内。

另外在 MINA 压缩包中附带有不少比 HelloServer 要好得多的例子,通过这些例子可以进一步的了解并掌握 MINA。




参考资料

http://mina.apache.org MINA 官方网站


http://mina.apache.org/features.html 您可以在这里查看关于 MINA 的更多特性


http://mina.apache.org/testimonials.html 看看别人是如何评价 MINA 的 http://asyncweb.safehaus.org/使用 MINA 开发的高性能 WEB 服务器 

posted @ 2013-05-11 21:41 paulwong 阅读(310) | 评论 (0)编辑 收藏

使用Sqoop实现HDFS与Mysql互转


简介
Sqoop是一个用来将Hadoop和关系型数据库中的数据相互转移的工具,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导入到Hadoop的HDFS中,也可以将HDFS的数据导入到关系型数据库中。

http://sqoop.apache.org/

环境
当调试过程出现IncompatibleClassChangeError一般都是版本兼容问题。

为了保证hadoop和sqoop版本的兼容性,使用Cloudera,

Cloudera简介:

Cloudera为了让Hadoop的配置标准化,可以帮助企业安装,配置,运行hadoop以达到大规模企业数据的处理和分析。

http://www.cloudera.com/content/cloudera-content/cloudera-docs/CDHTarballs/3.25.2013/CDH4-Downloadable-Tarballs/CDH4-Downloadable-Tarballs.html

下载安装hadoop-0.20.2-cdh3u6,sqoop-1.3.0-cdh3u6。

安装
安装比较简单,直接解压即可

唯一需要做的就是将mysql的jdbc适配包mysql-connector-java-5.0.7-bin.jar copy到$SQOOP_HOME/lib下。

配置好环境变量:/etc/profile

export SQOOP_HOME=/home/hadoop/sqoop-1.3.0-cdh3u6/

export PATH=$SQOOP_HOME/bin:$PATH

MYSQL转HDFS-示例
./sqoop import --connect jdbc:mysql://10.8.210.166:3306/recsys --username root --password root --table shop -m 1 --target-dir /user/recsys/input/shop/$today


HDFS转MYSQ-示例
./sqoop export --connect jdbc:mysql://10.8.210.166:3306/recsys --username root --password root --table shopassoc --fields-terminated-by ',' --export-dir /user/recsys/output/shop/$today

示例参数说明
(其他参数我未使用,故不作解释,未使用,就没有发言权,详见命令help)


参数类型

参数名

解释

公共

connect

Jdbc-url

公共

username

---

公共

password

---

公共

table

表名

Import

target-dir

制定输出hdfs目录,默认输出到/user/$loginName/

export

fields-terminated-by

Hdfs文件中的字段分割符,默认是“\t”

export

export-dir

hdfs文件的路径

posted @ 2013-05-11 21:27 paulwong 阅读(471) | 评论 (0)编辑 收藏

全方位的技术服务及相关技术解决方案(纯java解决方案)

http://www.iteye.com/topic/1128561 @import url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);

posted @ 2013-05-11 00:17 paulwong 阅读(518) | 评论 (0)编辑 收藏

让spring-data-jpa解放你的DAO

     摘要: 最近项目用Spring-data-jpa,确实很方便。如果你也曾经被重复无聊的dao代码雷到的话,就可以考虑将ORM framework换成spring-data-jpa了。 只要继承CrudRepository或者PagingAndSortingRepository,dao层基本上就只剩下定义接口方法这么一件事情了,连实现都不用写,因为默认实现SimpleJpaRepository已经帮你实现了...  阅读全文

posted @ 2013-05-09 14:16 paulwong 阅读(5579) | 评论 (1)编辑 收藏

mysql分表,分区的区别和联系

一,什么是mysql分表,分区

什么是分表,从表面意思上看呢,就是把一张表分成N多个小表,具体请看mysql分表的3种方法

什么是分区,分区呢就是把一张表的数据分成N多个区块,这些区块可以在同一个磁盘上,也可以在不同的磁盘上,具体请参考mysql分区功能详细介绍,以及实例

二,mysql分表和分区有什么区别呢

1,实现方式上

a),mysql的分表是真正的分表,一张表分成很多表后,每一个小表都是完正的一张表,都对应三个文件,一个.MYD数据文件,.MYI索引文件,.frm表结构文件。

  1. [root@BlackGhost test]# ls |grep user  
  2. alluser.MRG  
  3. alluser.frm  
  4. user1.MYD  
  5. user1.MYI  
  6. user1.frm  
  7. user2.MYD  
  8. user2.MYI  
  9. user2.frm  
[root@BlackGhost test]# ls |grep user alluser.MRG alluser.frm user1.MYD user1.MYI user1.frm user2.MYD user2.MYI user2.frm

简单说明一下,上面的分表呢是利用了merge存储引擎(分表的一种),alluser是总表,下面有二个分表,user1,user2。他们二个都是独立的表,取数据的时候,我们可以通过总表来取。这里总表是没有.MYD,.MYI这二个文件的,也就是说,总表他不是一张表,没有数据,数据都放在分表里面。我们来看看.MRG到底是什么东西

  1. [root@BlackGhost test]# cat alluser.MRG |more  
  2. user1  
  3. user2  
  4. #INSERT_METHOD=LAST  
[root@BlackGhost test]# cat alluser.MRG |more user1 user2 #INSERT_METHOD=LAST

从上面我们可以看出,alluser.MRG里面就存了一些分表的关系,以及插入数据的方式。可以把总表理解成一个外壳,或者是联接池。

b),分区不一样,一张大表进行分区后,他还是一张表,不会变成二张表,但是他存放数据的区块变多了。

  1. [root@BlackGhost test]# ls |grep aa  
  2. aa#P#p1.MYD  
  3. aa#P#p1.MYI  
  4. aa#P#p3.MYD  
  5. aa#P#p3.MYI  
  6. aa.frm  
  7. aa.par  
[root@BlackGhost test]# ls |grep aa aa#P#p1.MYD aa#P#p1.MYI aa#P#p3.MYD aa#P#p3.MYI aa.frm aa.par

从上面我们可以看出,aa这张表,分为二个区,p1和p3,本来是三个区,被我删了一个区。我们都知道一张表对应三个文件.MYD,.MYI,.frm。分区呢根据一定的规则把数据文件和索引文件进行了分割,还多出了一个.par文件,打开.par文件后你可以看出他记录了,这张表的分区信息,根分表中的.MRG有点像。分区后,还是一张,而不是多张表。

2,数据处理上

a),分表后,数据都是存放在分表里,总表只是一个外壳,存取数据发生在一个一个的分表里面。看下面的例子:

select * from alluser where id='12'表面上看,是对表alluser进行操作的,其实不是的。是对alluser里面的分表进行了操作。

b),分区呢,不存在分表的概念,分区只不过把存放数据的文件分成了许多小块,分区后的表呢,还是一张表。数据处理还是由自己来完成。

3,提高性能上

a),分表后,单表的并发能力提高了,磁盘I/O性能也提高了。并发能力为什么提高了呢,因为查寻一次所花的时间变短了,如果出现高并发的话,总表可以根据不同的查询,将并发压力分到不同的小表里面。磁盘I/O性能怎么搞高了呢,本来一个非常大的.MYD文件现在也分摊到各个小表的.MYD中去了。

b),mysql提出了分区的概念,我觉得就想突破磁盘I/O瓶颈,想提高磁盘的读写能力,来增加mysql性能。
在这一点上,分区和分表的测重点不同,分表重点是存取数据时,如何提高mysql并发能力上;而分区呢,如何突破磁盘的读写能力,从而达到提高mysql性能的目的。

4),实现的难易度上

a),分表的方法有很多,用merge来分表,是最简单的一种方式。这种方式根分区难易度差不多,并且对程序代码来说可以做到透明的。如果是用其他分表方式就比分区麻烦了。

b),分区实现是比较简单的,建立分区表,根建平常的表没什么区别,并且对开代码端来说是透明的。

三,mysql分表和分区有什么联系呢

1,都能提高mysql的性高,在高并发状态下都有一个良好的表面。

2,分表和分区不矛盾,可以相互配合的,对于那些大访问量,并且表数据比较多的表,我们可以采取分表和分区结合的方式(如果merge这种分表方式,不能和分区配合的话,可以用其他的分表试),访问量不大,但是表数据很多的表,我们可以采取分区的方式等。

posted @ 2013-05-07 09:19 paulwong 阅读(459) | 评论 (0)编辑 收藏

hadoop集群监控工具ambari安装

  Apache Ambari是对Hadoop进行监控、管理和生命周期管理的开源项目。它也是一个为Hortonworks数据平台选择管理组建的项目。Ambari向Hadoop MapReduce、HDFS、 HBase、Pig, Hive、HCatalog以及Zookeeper提供服务。最近准备装ambari,在网上找了许久,没找到比较系统的ambari安装过程,于是,就根据官网进行了安装,下面是我推荐的正确的较完善的安装方式,希望对大家有所帮助。

  一、准备工作

  1、系统:我的系统是CentOS6.2,x86_64,本次集群采用两个节点。管理节点:192.168.10.121;客户端节点:192.168.10.122

  2、系统最好配置能上网,这样方便后面的操作,否则需要配置yum仓库,比较麻烦。

  3、集群中ambari-serveer(管理节点)到客户端配置无密码登录。

  4、集群同步时间

  5、SELinux,iptables都处于关闭状态。

  6、ambari版本:1.2.0

  二、安装步骤

  A、配置好集群环境

############  配置无密码登录  #################
[root@ccloud121 ~]# ssh-keygen -t dsa
[root@ccloud121 ~]# cat /root/.ssh/id_dsa.pub >> /root/.ssh/authorized_keys
[root@ccloud121 ~]# scp /root/.ssh/id_dsa.pub 192.168.10.122:/root/
[root@ccloud121 ~]# ssh 192.168.10.122
[root@ccloud122 ~]# cat /root/.ssh/id_dsa.pub >> /root/.ssh/authorized_keys

#############  NTP 时间同步  #################

[root@ccloud121 ~]# ntpdate time.windows.com
[root@ccloud121 ~]# ssh ccloud122 ntpdate time.windows.com

###########  SELinux & iptables 关闭   ###########

[root@ccloud121 ~]# setenforce 0
[root@ccloud121 ~]# ssh ccloud122 setenforce 0
[root@ccloud121 ~]# chkconfig iptables off
[root@ccloud121 ~]# service iptables stop
[root@ccloud121 ~]# ssh ccloud122 chkconfig iptables off
[root@ccloud121 ~]# ssh ccloud122 service iptables stop

  B、管理节点上安装ambari-server

    1、下载repo文件     

[root@ccloud121 ~]# wget http://public-repo-1.hortonworks.com/AMBARI-1.x/repos/centos6/ambari.repo

[root@ccloud121 ~]# cp ambari.repo /etc/yum.repos.d

    这样,ambari-server的yum仓库就做好了。

    2、安装epel仓库

[root@ccloud121 ~]# yum install epel-release   # 查看仓库列表,应该有HDP,EPEL [root@ccloud121 ~]# yum repolist

    3、通过yum安装amabari bits,这同时也会安装PostgreSQL

[root@ccloud121 ~]# yum install ambari-server

     这个步骤要等一会,它需要上网下载,大概39M左右。

    4、运行ambari-server setup,安装ambari-server,它会自动安装配置PostgreSQL,同时要求输入用户名和密码,如果按n,它用默认的用户名/密码值:ambari-server/bigdata。接着就开始下载安装JDK。安装完成后,ambari-server就可以启动了。

  三、集群启动

    

    1、直接接通过ambari-server start和amabari-server stop即可启动和关闭ambari-serveer。

    2、启动成功后,在浏览器输入http://192.168.10.121:8080

    界面如下图所示:

    

登录名和密码都是admin。

这样就可以登录到管理控制台。


posted @ 2013-05-03 13:55 paulwong 阅读(690) | 评论 (0)编辑 收藏

一网打尽13款开源Java大数据工具

下面将介绍大数据领域支持Java的主流开源工具

1. HDFS

HDFS是Hadoop应用程序中主要的分布式储存系统, HDFS集群包含了一个NameNode(主节点),这个节点负责管理所有文件系统的元数据及存储了真实数据的DataNode(数据节点,可以有很多)。HDFS针对海量数据所设计,所以相比传统文件系统在大批量小文件上的优化,HDFS优化的则是对小批量大型文件的访问和存储。

2. MapReduce

Hadoop MapReduce是一个软件框架,用以轻松编写处理海量(TB级)数据的并行应用程序,以可靠和容错的方式连接大型集群中上万个节点(商用硬件)。

3. HBase

Apache HBase是Hadoop数据库,一个分布式、可扩展的大数据存储。它提供了大数据集上随机和实时的读/写访问,并针对了商用服务器集群上的大型表格做出优化——上百亿行,上千万列。其核心是Google Bigtable论文的开源实现,分布式列式存储。就像Bigtable利用GFS(Google File System)提供的分布式数据存储一样,它是Apache Hadoop在HDFS基础上提供的一个类Bigatable。

4. Cassandra

Apache Cassandra是一个高性能、可线性扩展、高有效性数据库,可以运行在商用硬件或云基础设施上打造完美的任务关键性数据平台。在横跨数据中心的复制中,Cassandra同类最佳,为用户提供更低的延时以及更可靠的灾难备份。通过log-structured update、反规范化和物化视图的强支持以及强大的内置缓存,Cassandra的数据模型提供了方便的二级索引(column indexe)。

5. Hive

Apache Hive是Hadoop的一个数据仓库系统,促进了数据的综述(将结构化的数据文件映射为一张数据库表)、即席查询以及存储在Hadoop兼容系统中的大型数据集分析。Hive提供完整的SQL查询功能——HiveQL语言,同时当使用这个语言表达一个逻辑变得低效和繁琐时,HiveQL还允许传统的Map/Reduce程序员使用自己定制的Mapper和Reducer。

6. Pig

Apache Pig是一个用于大型数据集分析的平台,它包含了一个用于数据分析应用的高级语言以及评估这些应用的基础设施。Pig应用的闪光特性在于它们的结构经得起大量的并行,也就是说让它们支撑起非常大的数据集。Pig的基础设施层包含了产生Map-Reduce任务的编译器。Pig的语言层当前包含了一个原生语言——Pig Latin,开发的初衷是易于编程和保证可扩展性。

7. Chukwa

Apache Chukwa是个开源的数据收集系统,用以监视大型分布系统。建立于HDFS和Map/Reduce框架之上,继承了Hadoop的可扩展性和稳定性。Chukwa同样包含了一个灵活和强大的工具包,用以显示、监视和分析结果,以保证数据的使用达到最佳效果。

8. Ambari

Apache Ambari是一个基于web的工具,用于配置、管理和监视Apache Hadoop集群,支持Hadoop HDFS,、Hadoop MapReduce、Hive、HCatalog,、HBase、ZooKeeper、Oozie、Pig和Sqoop。Ambari同样还提供了集群状况仪表盘,比如heatmaps和查看MapReduce、Pig、Hive应用程序的能力,以友好的用户界面对它们的性能特性进行诊断。

9. ZooKeeper

Apache ZooKeeper是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护、命名服务、分布式同步、组服务等。ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。

10. Sqoop

Sqoop是一个用来将Hadoop和关系型数据库中的数据相互转移的工具,可以将一个关系型数据库中数据导入Hadoop的HDFS中,也可以将HDFS中数据导入关系型数据库中。

11. Oozie

Apache Oozie是一个可扩展、可靠及可扩充的工作流调度系统,用以管理Hadoop作业。Oozie Workflow作业是活动的Directed Acyclical Graphs(DAGs)。Oozie Coordinator作业是由周期性的Oozie Workflow作业触发,周期一般决定于时间(频率)和数据可用性。Oozie与余下的Hadoop堆栈结合使用,开箱即用的支持多种类型Hadoop作业(比如:Java map-reduce、Streaming map-reduce、Pig、 Hive、Sqoop和Distcp)以及其它系统作业(比如Java程序和Shell脚本)。

12. Mahout

Apache Mahout是个可扩展的机器学习和数据挖掘库,当前Mahout支持主要的4个用例:

  • 推荐挖掘:搜集用户动作并以此给用户推荐可能喜欢的事物。
  • 聚集:收集文件并进行相关文件分组。
  • 分类:从现有的分类文档中学习,寻找文档中的相似特征,并为无标签的文档进行正确的归类。
  • 频繁项集挖掘:将一组项分组,并识别哪些个别项会经常一起出现。

13. HCatalog

Apache HCatalog是Hadoop建立数据的映射表和存储管理服务,它包括:

  • 提供一个共享模式和数据类型机制。
  • 提供一个抽象表,这样用户就不需要关注数据存储的方式和地址。
  • 为类似Pig、MapReduce及Hive这些数据处理工具提供互操作性。

posted @ 2013-05-03 09:05 paulwong 阅读(504) | 评论 (0)编辑 收藏

HADOOP服务器

Centos集群服务器,公网ip
服务器地址
master: mypetsbj.xicp.net:13283
slave1 : mypetsbj.xicp.net:13282
slave2 : mypetsbj.xicp.net:13286

http://mypetsbj.xicp.net:13296
http://mypetsbj.xicp.net:13304
http://mypetsbj.xicp.net:14113
http://mypetsbj.xicp.net:11103

服务器开机时间
08:00 到 23:59 

opt/hadoop

用户名/密码
hadoop/wzp

posted @ 2013-05-01 00:02 paulwong 阅读(361) | 评论 (0)编辑 收藏

数字签名

     摘要: 处理流程: 假设有一份要传输的文档 使用某一指定算法将此文档内容进行计算,得出一字符串,称为“摘要” 使用私钥将此摘要进行加密,得出一字符串,称为“签名” 将私钥对应的公钥、摘要和签名一同发给对方 对方用公钥对签名进行解密,得出一字符串,与摘要对比,看是否符合,如符合,则证明对方身份确认...  阅读全文

posted @ 2013-04-26 16:22 paulwong 阅读(495) | 评论 (0)编辑 收藏

制作BAT/SH文件运行JAVA

WINDOWS版:
@ECHO OFF
REM @ECHO STARTUP App
REM @ECHO 设置环境变量,循环当前目录下的lib目录下所有jar文件,并设置CLASSPATH
FOR %%F IN (lib\*.jar) DO call :addcp %%F
goto extlibe
:addcp
SET CLASSPATH=%CLASSPATH%;%1
goto :eof
:extlibe
REM @ECHO 当前目录下的bin目录为class文件存放目录,设置bin目录到CLASSPATH中
SET CLASSPATH=%CLASSPATH%;bin\
REM @ECHO 显示CLASSPATH
REM SET CLASSPATH
REM @ECHO 运行应用程序
REM JAVA com.paul.socket.charge.client.ClientJFrame
start javaw com.paul.socket.charge.client.ClientJFrame

LINUX版:
#!/bin/sh

classpath=".:../classes/:../lib/*"
hdfs_input=hadoop/input
hdfs_output=hadoop/output0
mainclass=main.WordFinderMain
classesfolder=/job/classes

java -cp $classpath $mainclass $hdfs_input $hdfs_output $classesfolder

posted @ 2013-04-18 10:06 paulwong 阅读(388) | 评论 (0)编辑 收藏

仅列出标题
共116页: First 上一页 67 68 69 70 71 72 73 74 75 下一页 Last