存档

2016年12月 的存档

【scala】【java】关于字符串的split一些研究,一些小坑注意

2016年12月28日 评论已被关闭

数据处理离不开对文本格式的数据进行读取、切分、统计分析。split方法作为切分字符串的方法会被经常使用,但是最近在字符串切分使用split方法的时候发现了一些小坑,在这里记下来,以警示后人。

首先是例子:

val s1=”#1#2#”
val s2=”##1#2″
val s3=”#1##2##”
把“#”作为分隔符,按我们的设想,分割后他们的长度应该是:4,4,6
但是如果用split方法直接分割的话,长度分别为:3,4,4

println(s1.split(“\\$”).length)
println(s2.split(“\\$”).length)
println(s3.split(“\\$”).length)
经过输出对比,String的split方法分割过程会把结尾为分隔符的情况下,去掉结尾的字符串(也就是“”),特别的注意,如果切分后结尾两个“”字符串,那么都会舍弃掉。所以s3的切分结果为:空格,1,空格,2;这四个元素。

【Hadoop】跨版本在不同的hadoop集群之间迁移数据,以及一些错误的解决

2016年12月23日 评论已被关闭

在不同的hadoop集群之间迁移数据主要靠的是distcp命令,涉及到不同版本还要用到hftp协议传输。在这个过程中会有一系列的问题。

概述

distcp(分布式拷贝)是用于大规模集群内部和集群之间拷贝的工具。 它使用Map/Reduce实现文件分发,错误处理和恢复,以及报告生成。 它把文件和目录的列表作为map任务的输入,每个任务会完成源列表中部分文件的拷贝。 由于使用了Map/Reduce方法,这个工具在语义和执行上都会有特殊的地方。 这篇文档会为常用distcp操作提供指南并阐述它的工作模型。

基本使用方法

distcp最常用在集群之间的拷贝:

hadoop distcp hdfs://master1:8020/foo/bar hdfs://master2:8020/bar/foo

如果集群的版本不一样,就不能用hdfs了,需要用hftp(HftpFileSystem), 这是一个只读文件系统,所以distcp必须运行在目标端集群上(更确切的说是在能够写入目标集群的TaskTracker上)。

例如下:

hadoop distcp hftp://master1:50070/foo/bar hdfs://master2:8020/bar/foo

需要注意的不是简单用hftp替换hdfs,hdfs后跟的是namenode的fs.default.name,而hftp后面是dfs.http.address,两者可以在hadoop安装目录的conf下的core-site.xml和hdfs-site.xml配置文件中看到。一般前者默认9000后者50070。

【Scala】Scala使用json4s解析和生成json字符串

2016年12月20日 评论已被关闭

最近需要解析一个日志文件,其中数据有用分隔符分开的,有json数据,最后要生成一个统一的json字符串。正好,通过这个小项目熟悉下scala的json解析,或者是json4s框架。

首先介绍下json4s:
At this moment there are at least 6 json libraries for scala, not counting the java json libraries. All these libraries have a very similar AST. This project aims to provide a single AST to be used by other scala json libraries.

At this moment the approach taken to working with the AST has been taken from lift-json and the native package is in fact lift-json but outside of the lift project.

翻译成中文:

现在,至少有6个json库用于scala,不包括java的json库。所有这些库具有非常相似的AST。这个项目旨在提供一个统一的AST供其他scala的json库使用。

现在,使用AST的方法是从lift-json采用,本地包实际上是lift-json,但在lift项目之外。

AST是抽象语法树(Abstract Syntax Tree)的意思

【cloudera】【scala】让maven项目同时编译java和scala代码,支持多个源文件

2016年12月15日 评论已被关闭

这次写一个大数据项目,编译和发布的时候遇到点问题,在这里记录下。

首先maven项目的结构大家应该都熟悉:

然后大部分编写scala代码会在main文件夹下建立一个scala文件夹,把包和源代码放在其中,我也是这样。

然后问题来了,我们的java文件夹中放置java代码,scala文件夹中放置scala代码,甚至一个文件夹中会混合java和scala代码,但是编译打包的时候(mvn install)会出现各种问题。然后我上网找到了各种解决方案。