Event Notification -----HCatalog
来源:互联网 发布:淘宝网字画拍卖网 编辑:程序博客网 时间:2024/06/05 20:58
Overview
由于事件通知机制的引入,用户可以得到通知如果他注册的事件发生。 其中事件共有六种类型: add_database, add_table, add_partition, drop_partition, drop_table, drop_database. 当特定的事件发生,消息会被发送到消息总线上。任何用户都可以通过注册该事件去获得此消息。一旦注册,消息总线会将特定的消息发送到其所有的订阅者。
Topic Name:
客户如果想获得特定的消息必须订阅正确的主题。 不同事件的Topic names是不同的,并且在一些情况下是可以配置的。 所有主题的默认名字都在hive-site.xml中提前配置好的。配置文件中的关键字是hcat.msgbus.topic.prefix,其中默认为 hcat。再剩下的文档中,我们将使用HCAT_TOPIC_PREFIX作为关键字。 例如,drop_database 将被发送到 HCAT_TOPIC_PREFIX (e.g. hcat)主题。 add_partition 消息会被发送到 HCAT_TOPIC_PREFIX.DB_NAME.TABLE_NAME (eg: hcat.default.example_table)。但是每个表中的事件的主题名称可以被用户自定义。例如, 如下hive查询为表 example_table 设置主题名称为example_table_topic_name:
ALTER TABLE example_table SET TBLPROPERTIES ("hcat.msgbus.topic.name" = "example_table_topic_name")
如何接收通知:
为了能接收到通知,首先需要创建一个到消息总线的连接,如下:
ConnectionFactory connFac = new ActiveMQConnectionFactory(amqurl); Connection conn = connFac.createConnection(); conn.start();
然后订阅一个你感兴趣的主题。 下面的例子展示了订阅者如何先找到他感兴趣的表的主题名称,然后订阅相应事件:
HiveMetaStoreClient msc = new HiveMetaStoreClient(hiveConf);
String topicName = msc.getTable("mydb", "myTbl").getParameters().get(HCatConstants.HCAT_MSGBUS_TOPIC_NAME);
使用主题名称(Topic Name)去订阅一个主题, 如下:
Session session = conn.createSession(true, Session.SESSION_TRANSACTED); Destination hcatTopic = session.createTopic(topicName); MessageConsumer consumer = session.createConsumer(hcatTopic); consumer.setMessageListener(this);
开始接受消息,用户需要实现一个jms的接口MessageListener,其中你需要实现一个方法叫做onMessage(Message msg)。这个方法将被调用无论什么时候一个新的相关消息到达消息总线。 这个消息将包含一个分区对象代表相应的分区,例子如下:
@Overridepublic void onMessage(Message msg){ // We are interested in only add_partition events on this table. // So, check message type first. if(msg.getStringProperty(HCatConstants.HCAT_EVENT).equals(HCatConstants.HCAT_ADD_PARTITION_EVENT)){ // Retrieve HCatEventMessage, using MessagingUtils. HCatEventMessage hcatMessage = MessagingUtils.getMessage(msg); //Get the partition-keys for all partitions added. List<Map<String, String>> partitionList = ((AddPartitionMessage)hcatMessage).getPartitions(); }}
你需要将jms的jar包添加到你的classpath中才能使这些都正常工作。另外还需要有一个jms提供者的jar包在classpath中。 HCatalog使用ActiveMQ作为他的jms提供者。 原则上讲任何jms提供者都可以被用户使用。但是我们建议ActiveMQ。他可以在如下地址获取:
http://activemq.apache.org/activemq-550-release.html
事件消息格式:
HCatlog的事件字符串(Event-string)是可插拔的,他的默认格式是JSON。 每一个事件消息仅仅传递足够定义数据库/表/分区的变动信息(added/deleted)。一个事件消费者也许会使用事件消息中定义的标示符去向HCatlog查询更进一步的信息。
下面是一个HCatlog所支持的事件的列表,和他们相应的事件格式:
1. Creation of Database:
Event type-string: "CREATE_DATABASE"
Topic Name: HCAT_TOPIC_PREFIX
Example JSON Format:
{ "timestamp" : 1360272556, "eventType" : "CREATE_DATABASE", "server" : "hcatserver.mydomain.net", "servicePrincipal" : "hcat/hcatserver@MYDOMAIN.NET", "db" : "mydb"}
2. Dropping a Database:
Event type-string: "DROP_DATABASE"
Topic Name: HCAT_TOPIC_PREFIX
Example JSON Format:
{ "timestamp" : 1360272556, "eventType" : "DROP_DATABASE", "server" : "hcatserver.mydomain.net", "servicePrincipal" : "hcat/hcatserver@MYDOMAIN.NET", "db" : "mydb"}
3. Creation of a Table:
Event type-string: "CREATE_TABLE"
Topic Name: HCAT_TOPIC_PREFIX.DB_NAME
Example JSON Format:
{ "timestamp" : 1360272556, "eventType" : "CREATE_TABLE", "server" : "hcatserver.mydomain.net", "servicePrincipal" : "hcat/hcatserver@MYDOMAIN.NET", "db" : "mydb", "table" : "mytbl" }
4. Dropping a Table:
Event type-string: "DROP_TABLE"
Topic Name: HCAT_TOPIC_PREFIX.DB_NAME
Example JSON Format:
{ "timestamp" : 1360272556, "eventType" : "DROP_TABLE", "server" : "hcatserver.mydomain.net", "servicePrincipal" : "hcat/hcatserver@MYDOMAIN.NET", "db" : "mydb", "table" : "mytbl" }
5. Adding (an atomic set of) partitions:
Event type-string: "ADD_PARTITION"
Topic Name: HCAT_TOPIC_PREFIX.DB_NAME.TABLE_NAME (default) but isuser configurable
Example JSON Format:
{ "timestamp" : 1360272556, "eventType" : "ADD_PARTITION", "server" : "hcatserver.mydomain.net", "servicePrincipal" : "hcat/hcatserver@MYDOMAIN.NET", "db" : "mydb", "table" : "mytbl", "partitions": [ { "partKey1" : "partVal1A", "partKey2" : "partVal2A" }, { "partKey1" : "partVal1B", "partKey2" : "partVal2B" }, { "partKey1" : "partVal1C", "partKey2" : "partVal2C" } ]}
6. Dropping (a set of) partitions:
Event type-string: "DROP_PARTITION"
Topic Name: HCAT_TOPIC_PREFIX.DB_NAME.TABLE_NAME (default) but isuser configurable
Example JSON Format:
{ "timestamp" : 1360272556, "eventType" : "DROP_PARTITION", "server" : "hcatserver.mydomain.net", "servicePrincipal" : "hcat/hcatserver@MYDOMAIN.NET", "db" : "mydb", "table" : "mytbl", "partitions": [ { "partKey1" : "partVal1A", "partKey2" : "partVal2A" }, { "partKey1" : "partVal1B", "partKey2" : "partVal2B" }, { "partKey1" : "partVal1C", "partKey2" : "partVal2C" } ]}
所有的JMS消息都作为TextMessage实例被发送。除了消息体本身,每个消息都还携带3 个字符串属性, 使用如下的keys:
- HCatConstants.HCAT_EVENT: The event-type string (E.g. "CREATE_TABLE", "ADD_PARTITIONS", etc.)
- HCatConstants.HCAT_MESSAGE_VERSION: The version-string for the messages (E.g. "0.1", etc.)
- HCatConstants.HCAT_FORMAT: An identifier for the message format (E.g. "json", by default.)
- Event Notification -----HCatalog
- HCatalog
- HCatalog
- HCatalog 简介
- hcatalog配置
- [DirectShow] 017 - Overview of Event Notification
- libevent – an event notification library
- epoll - I/O event notification facility
- epoll IO EVENT NOTIFICATION FACILITY学习
- hcatalog简介和使用
- Mapr与HCatalog工作
- HCatalog输入输出接口
- HCatalog读写接口
- hcatalog简介和使用
- HCatalog问题记录
- HCatalog Streaming Mutation API
- SQL Server Dead Lock/Time Out Event Notification
- windows服务接收设备事件通知Device Event Notification
- Objective-C之类别(类扩展:Class Categories)
- ajax请求后返回多个jsonArray
- leetcode代码分类汇总之-查找
- 使用XML解析器(TinyXML)编程之常用参数讲解-------转载的原版资料2
- 安卓中文SDK连载(5)
- Event Notification -----HCatalog
- Android-解决ViewFlipper与ScrollView滑动响应事件拦截的问题
- 利用Apache的CLI来处理命令行
- Android Studio(I/O Preview) 使用问题记录
- java 正则表达式测试
- SQL Joins
- 【编程之美】区间重合判断
- database transaction simple details
- java编程思想-abstract class与interface