java输出csv文件中文乱码的问题
在开发程序的时候,通过java程序输出csv文件,采用utf-8编码,然后用excel打开,发现文件中的中文全部乱码了。
在网上搜索了各种手工解决办法,无外乎就是将文件打开另存为“ANSI”格式。
然而真正程序能解决的是如下:
1 | //在文件中增加BOM,详细说明可以Google,该处的byte[] 可以针对不同编码进行修改 |
在开发程序的时候,通过java程序输出csv文件,采用utf-8编码,然后用excel打开,发现文件中的中文全部乱码了。
在网上搜索了各种手工解决办法,无外乎就是将文件打开另存为“ANSI”格式。
然而真正程序能解决的是如下:
1 | //在文件中增加BOM,详细说明可以Google,该处的byte[] 可以针对不同编码进行修改 |
之前一直使用一款叫做switchhosts!的host管理软件,但是唯一的问题就是在软件里面复制粘贴失效,问了作者,作者说没问题。小白的我折腾了好久才知道了方法:
快捷键冲突:系统偏好设置-键盘-快捷键-恢复成默认
HDFS对于任何Hadoop大数据平台来说都是核心组成部分,为了加强对Hadoop平台的数据保护,将安全控制深入到HDFS层是非常有必要的。HDFS本身提供了Kerberos认证,并且提供了基于POSIX风格的权限和HDFS——ACL控制,当然它也可以使用基于Apache Ranger的权限控制体系。
Apache Ranger (http://hortonworks.com/hadoop/ranger/) 是一个集中式的Hadoop体系的安全管理解决方案,它提供给管理者在HDFS或者其它Hadoop体系组件上创建和应用安全策略的功能。
为了在HDP发行版中加强安全性,建议安装和配置Kerberos, Apache Knox和Apache Ranger。
Apache Ranger提供了一个和HDFS原生权限相匹配适应的授权模型。 HDFS Ranger插件会首先检测是否存在对应的授权策略对应用户授权,如果存在那么用户权限检测通过。如果没有这样的策略,那么Ranger插件会启用HDFS原生的权限体系进行权限检查(POSIX or HDFS ACL)。这种模型在Ranger中适用于HDFS和YARN服务。
英文链接:https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=53741207
Apache Ranger为Hadoop体系提供了统一的安全体系,包括细致的访问控制和统一的审计。 Apache Ranger 0.4版本为很多服务提供了授权和审核,这些服务包括: HDFS, HBase, Hive, Knox和Storm。如果要添加更多的服务支持就需要多个模块的修改,包括UI,API,数据库schema等等。
Apache Ranger 0.5版本支持了一个统一的模型来更好地支持新组件的接入,而这些接入并不需要改变Ranger的代码。这篇文章主要阐述了自定义Ranger组件的编程模型以及步骤。
这节将提供的是一个创建授权插件的高阶视图。 更多的每一步细节都会在后面的步骤中说明。
创建一个JSON格式的文件,包含以下内容:
加载JSON文件到Ranger中
英文原文:
Presto是一个开源的分布式SQL查询引擎,适用于交互式分析查询,数据量支持GB到PB字节。
Presto的设计和编写完全是为了解决像Facebook这样规模的商业数据仓库的交互式分析和处理速度的问题。
Presto本身自带了一些功能函数,对于我们在做SQL查询时非常方便,但是有些时候这些内建的功能函数并不能完全满足我们的需求,又或者是我们逻辑中有一些共性的部分,需要将这些共性的部分提炼出来形成公共的函数库。Presto为我们提供了这套自定义函数的机制。
该函数框架用于实现SQL功能函数。Presto包含了一定数量的内建函数支持。 为了实现更多的功能函数,你可以自己写一个插件,实现getFunctions()
,让这个插件实现更多的功能函数:
1 | public class ExampleFunctionsPlugin |
注意: ImmutableSet
是一个Guava类库的一个工具类, getFunctions()
方法包含了本掼中所有的我们将要实现的功能函数。
如果想要查看完整的代码例子,可以查看presto的功能模块presto-ml
(用于机器学习)或者presto-teradata-functions
(Teradata-compatible functions), 以上两个包都是presto源代码包中。
dropwizard/metrics
Metrics是一个Java库,它能在你的生产环境中,为你的代码中提供无与伦比的洞察力。
Metrics提供了一个强大的工具包,用于测量生产环境中关键组件的行为。
它提供了常见模块支持,如:Jetty,Logback,Log4j,Apache HttpClient,Ehcache,JDBI,Jersey和报告后端(如Ganglia和Graphite)的公共库的模块,Metrics为您提供全栈可见性。
下面是我们开始一个quickstart的步骤
需要加入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新版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
2Future<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项目提供了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