java输出csv文件中文乱码的问题

在开发程序的时候,通过java程序输出csv文件,采用utf-8编码,然后用excel打开,发现文件中的中文全部乱码了。

在网上搜索了各种手工解决办法,无外乎就是将文件打开另存为“ANSI”格式。

然而真正程序能解决的是如下:

1
2
//在文件中增加BOM,详细说明可以Google,该处的byte[] 可以针对不同编码进行修改
out.write(new byte[] { (byte) 0xEF, (byte) 0xBB,(byte) 0xBF });

阅读全文

mac下某些软件内复制粘贴失效的问题

之前一直使用一款叫做switchhosts!的host管理软件,但是唯一的问题就是在软件里面复制粘贴失效,问了作者,作者说没问题。小白的我折腾了好久才知道了方法:

快捷键冲突:系统偏好设置-键盘-快捷键-恢复成默认

阅读全文

Apache Ranger在HDFS中的最佳实践

HDFS对于任何Hadoop大数据平台来说都是核心组成部分,为了加强对Hadoop平台的数据保护,将安全控制深入到HDFS层是非常有必要的。HDFS本身提供了Kerberos认证,并且提供了基于POSIX风格的权限和HDFS——ACL控制,当然它也可以使用基于Apache Ranger的权限控制体系。

Apache Ranger (http://hortonworks.com/hadoop/ranger/) 是一个集中式的Hadoop体系的安全管理解决方案,它提供给管理者在HDFS或者其它Hadoop体系组件上创建和应用安全策略的功能。

Ranger是怎么在HDFS上工作的?

为了在HDP发行版中加强安全性,建议安装和配置Kerberos, Apache Knox和Apache Ranger。


Apache Ranger提供了一个和HDFS原生权限相匹配适应的授权模型。 HDFS Ranger插件会首先检测是否存在对应的授权策略对应用户授权,如果存在那么用户权限检测通过。如果没有这样的策略,那么Ranger插件会启用HDFS原生的权限体系进行权限检查(POSIX or HDFS ACL)。这种模型在Ranger中适用于HDFS和YARN服务。

阅读全文

Ranger自定义插件开发

英文链接:https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=53741207

Ranger简介

Apache Ranger为Hadoop体系提供了统一的安全体系,包括细致的访问控制和统一的审计。 Apache Ranger 0.4版本为很多服务提供了授权和审核,这些服务包括: HDFS, HBase, Hive, Knox和Storm。如果要添加更多的服务支持就需要多个模块的修改,包括UI,API,数据库schema等等。

Apache Ranger 0.5版本支持了一个统一的模型来更好地支持新组件的接入,而这些接入并不需要改变Ranger的代码。这篇文章主要阐述了自定义Ranger组件的编程模型以及步骤。

创建自定义授权插件

这节将提供的是一个创建授权插件的高阶视图。 更多的每一步细节都会在后面的步骤中说明。

定义服务类型(Service-type)

  1. 创建一个JSON格式的文件,包含以下内容:

    • 资源,比如:database,table,column等
    • 访问类型,比如:select, update, create, drop等
    • 连接服务的配置,比如:JDBC URL,JDBC driver,credentials等
  2. 加载JSON文件到Ranger中

阅读全文

PrestoDB自定义函数开发指南

Presto 自定义函数开发(译)

本文是基于Presto 0.160版本翻译,最新版的内容请参看最新版文档

英文原文:

https://prestodb.io/docs/current/develop/functions.html

Presto是一个开源的分布式SQL查询引擎,适用于交互式分析查询,数据量支持GB到PB字节。

Presto的设计和编写完全是为了解决像Facebook这样规模的商业数据仓库的交互式分析和处理速度的问题。

Presto本身自带了一些功能函数,对于我们在做SQL查询时非常方便,但是有些时候这些内建的功能函数并不能完全满足我们的需求,又或者是我们逻辑中有一些共性的部分,需要将这些共性的部分提炼出来形成公共的函数库。Presto为我们提供了这套自定义函数的机制。

插件实现

该函数框架用于实现SQL功能函数。Presto包含了一定数量的内建函数支持。 为了实现更多的功能函数,你可以自己写一个插件,实现getFunctions(),让这个插件实现更多的功能函数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class ExampleFunctionsPlugin
implements Plugin
{
@Override
public Set<Class<?>> getFunctions()
{
return ImmutableSet.<Class<?>>builder()
.add(ExampleNullFunction.class)
.add(IsNullFunction.class)
.add(IsEqualOrNullFunction.class)
.add(ExampleStringFunction.class)
.add(ExampleAverageFunction.class)
.build();
}
}

注意: ImmutableSet是一个Guava类库的一个工具类, getFunctions()方法包含了本掼中所有的我们将要实现的功能函数。

如果想要查看完整的代码例子,可以查看presto的功能模块presto-ml(用于机器学习)或者presto-teradata-functions(Teradata-compatible functions), 以上两个包都是presto源代码包中。

阅读全文

kafka顺序消息

顺序消息包括以下两方面:

  • 全局顺序
  • 局部顺序

阅读全文

metrics系列之quickstart

dropwizard/metrics

Metrics是一个Java库,它能在你的生产环境中,为你的代码中提供无与伦比的洞察力。

Metrics提供了一个强大的工具包,用于测量生产环境中关键组件的行为。

它提供了常见模块支持,如:Jetty,Logback,Log4j,Apache HttpClient,Ehcache,JDBI,Jersey和报告后端(如Ganglia和Graphite)的公共库的模块,Metrics为您提供全栈可见性。

QuickStarted

下面是我们开始一个quickstart的步骤

Setting Up Maven

需要加入maven依赖:

1
2
3
4
5
<dependency>
<groupId>io.dropwizard.metrics</groupId>
<artifactId>metrics-core</artifactId>
<version>${metrics.version}</version>
</dependency>

注意:你要确保metrics.version属性已经在你的pom文件中被定义,当前的版本是3.1.0

好的,现在是时候开始为你的程序提供指标化的数据了

阅读全文

kafka消息可靠性

kafka消息可靠性,这里涉及几个方面:

  • 发送可靠性
  • 接收可靠性
  • 存储可靠性

发送可靠性

kafka新版client(0.10.x)使用java重新实现。使用的是异步方式发送消息,即消息提交给KafkaProducer的send方法后,实际上是将该消息放入了它本身的一个后台发送队列,然后再有一个后台线程不断地从队列中取出消息进行发送,发送成功后会回调send方法的callback(如果没有,就不用回调了)。

从以上的流程来看,kafka客户端的发送流程是一个异步化的流程,kafka客户端会累积一定量的消息后统一组装成一个批量消息发出,这个的触发条件是: 消息量达到了batch.size的大小或者等待批量的时间超过了linger.ms时间。

此外还要注意一下发送方消息的堆积问题,当程序的发送速率大于发送到broker的速率时,会产生消费在发送方堆积,堆积的策略控制主要由参数buffer.memory 以及max.block.ms。buffer.memory设置了可使用的buffer内存,max.block.ms是指在buffer满的情况下可以阻塞多长时间,超过这个时间则抛出异常。

消息失败重试

设置失败重试的次数为一个很大的数值,如Integer.MAX_VALUE,对应properties的设置为:

配置 默认值 建议值
retries 0 Integer.MAX_VALUE

消息异步转同步

对于消息异步转同步:使用future.get()等待消息发送返回结果,如:

1
2
Future<RecordMetadata> future = producer.send(new ProducerRecord<String, String>("test.testTopic", "key","value"));
RecordMetadata metadata = future.get(); //等待发送结果返回

这种用法可能会导致性能下降比较厉害,也可以通过send(message,callback)的方式,在消息发送失败时通过callback记录失败并处理

顺序消息

kafka默认情况下是批量发送,批量发送存在消息积累再发送的过程,为了达到消息send后立刻发送到broker的要求,对应properties设置:

配置 默认值 建议值
max.in.flight.requests.per.connection 5 1

其中max.in.flight.requests.per.connection以及retries主要应用于顺序消息场景,顺序场景中需要设置为:
max.in.flight.requests.per.connection = 1

阅读全文

kafka-manager 0.10 试玩

项目简介

kafka-manager项目提供了kafka集群的常用管理和监控功能,官方描述如下:

A tool for managing Apache Kafka.
It supports the following:

  • Manage multiple clusters
  • Easy inspection of cluster state (topics, consumers, offsets, brokers, replica distribution, partition distribution)
  • Run preferred replica election
  • Generate partition assignments with option to select brokers to use
  • Run reassignment of partition (based on generated assignments)
  • Create a topic with optional topic configs (0.8.1.1 has different configs than 0.8.2+)
  • Delete topic (only supported on 0.8.2+ and remember set delete.topic.enable=true in broker config)
  • Topic list now indicates topics marked for deletion (only supported on 0.8.2+)
  • Batch generate partition assignments for multiple topics with option to select brokers to use
  • Batch run reassignment of partition for multiple topics
  • Add partitions to existing topic
  • Update config for existing topic
  • Optionally enable JMX polling for broker level and topic level metrics.
  • Optionally filter out consumers that do not have ids/ owners/ & offsets/ directories in zookeeper.

Kafka-manger项目:http://www.github.com/yahoo/kafka-manager

该项目目前尚未支持kafka 0.10.x 系列版本。不过在其的PR中有关于支持0.10版本的PR:https://github.com/yahoo/kafka-manager/pull/282

阅读全文

dubbo服务可用性监控手段

前言

随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进。在采用Dubbo作为服务化框架的过程中需要对服务接口可用性进行监控,程序需要通过监控平台去监控所有业务Dubbo服务接口的可用性。希望的是在1分钟内如果有服务挂掉会有监控报警发出,并且有监控页面显示监控数据,且有数据报表产出某个时间单位内的服务可用性。

服务可用性的定义: 在一段时间内,服务可用时间/(服务可用时间+服务不可用时间)* 100%

阅读全文