程序员的自我修养
Home » 文章归档 » 2014年六月

HBase的一些基础概念

2条评论4,748次浏览

关于HBase MapReduce

正确进行参数传递

MapReduce中传递参数必须通过configuration.set..()一系列函数来设置。如果通过属性来传递参数,那么必然会报空指针的错误。如下为经典错误示例:

运行的结果会是输出10和20吗?单机情况下确实如此,但是若在集群上跑,则会发现a为null,b=0。至于为什么,很简单:集群、分布式、JobTracker、TaskTracker

善用setup()和cleanup()

  • 对于需要传递的参数,最好在setup()中进行初始化,不要在map()中频繁的获取
  • setup()和cleanup()也可以进行输出,输出的内容同样会经过排序,并不会因为从setup()中输出而排在最前面,也不会因为从cleanup()输出而排在最后面

阅读全文>>

分类:Apache HBase
标签:

Win8 Ubuntu 64位双系统安装

1条评论4,765次浏览

Ubuntu下载地址:http://mirrors.163.com/ubuntu-releases/

用到的工具:

第一步 制作启动Ubuntu U盘

  1. 打开UltraISO,点击“文件-打开”,选择下载下来的Ubuntu镜像文件
  2. 点击“启动-写入硬盘镜像...”,选择已插入的U盘,若U盘未格式化过选择格式化
  3. 点击“便携启动-写入新的驱动器引导扇区-Syslinux”,然后一路确定
  4. 若上一步执行不成功说U盘被占用也无所谓,确定确实没有程序占用U盘后,可以直接点击写入
  5. 写入完毕,则制作成功

阅读全文>>

分类:Ubuntu
标签:

Java自动适配读取Hdfs和本地文件

1条评论2,968次浏览

开发MR程序通常是在本地跑local MapReduce进行测试,等测试完毕后则将mapred-site.xml放入src下打包成jar放在集群上进行测试。MR若需要读取文件作为数据源,则FileInputFormat.addInputPath(job, new Path(args[0]) );。但有时会出现需要读取Hdfs文件内容但又不能作为数据源输入的场景,比如写HBase MapReduce的时候,输入数据源为HBase的表,但是需要读取Hdfs上某文件的数据来进行操作。

单纯的读取本地文件内容实现起来十分简单,但读取本地文件内容的代码放在集群上是无法使用的。是否有方法能自动适配本地和集群两种模式下的文件读取?通过查找Hadoop API发现可通过FileSystem来实现。具体实现代码如下:

如是本地测试,项目中不包含mapred-site.xml文件(或将其中集群的配置信息注掉),则根据传入的conf则读取本地的文件;反之,添加mapred-site.xml文件,则读取Hdfs上的文件。本地测试时,getResult(conf, "/home/yurnom/data")将读取本地文件or文件夹/home/yurnom/data下面的内容;集群测试时,getResult(conf, "/home/yurnom/data")将读取hdfs://master:9000/home/yurnom/data文件or文件夹下面的内容。

标签:,

HBase CRUD

0条评论1,511次浏览

连接HBase

Create

进入HBase Shell,scan一下:

HBase写过程

  1. client向region server提交写请求
  2. region server找到目标region
  3. region检查数据是否与schema一致
  4. 如果客户端没有指定版本,则获取当前系统时间作为数据版本
  5. 将更新写入WAL log
  6. 将更新写入Memstore
  7. 判断Memstore的是否需要flush为Store文件

阅读全文>>

分类:Apache HBase
标签:

HBase表结构设计

3条评论8,628次浏览

概念视图与物理视图

BigTable论文HBase官网上的示例

概念视图

Row Key Time Stamp ColumnFamily contents ColumnFamily anchor
"com.cnn.www" t1 anchor:cnnsi.com = "CNN"
"com.cnn.www" t2 anchor:my.look.ca = "CNN.com"
"com.cnn.www" t3 contents:html = "..."
"com.cnn.www" t4 contents:html = "..."
"com.cnn.www" t5 contents:html = "..."

物理视图

ColumnFamily anchor

Row Key Time Stamp Column Family anchor
"com.cnn.www" t1 anchor:cnnsi.com = "CNN"
"com.cnn.www" t2 anchor:my.look.ca = "CNN.com"

阅读全文>>

分类:Apache HBase
标签:

Lombok

0条评论4,171次浏览

简介

通过注解形式帮助生成常用的getter、setter等方法,在消除冗长的Java代码上有不错的效果。而且,看起来比较炫酷。

lombok官方网址

原理

没有看过源码,不过想必是通过asm来操控字节码实现的。

对字节码感兴趣的同学可以看看

安装

  • 为何要安装

为了IDE的支持,不然IDE可不知道相应的显示setter、getter方法,编译的时候也不会调用lombok。

  • 安装方式

不同的IDE安装方式不同,详见官网。

此外,我在IntelliJ Idea上安装使用lombok时遇到了一个比较头疼的问题:安装成功了但编译出来的.class文件中却没有相应的方法。若你也遇到了这样的问题,详见

阅读全文>>

分类:Java语言
标签:,

关于Apache Pig

0条评论4,498次浏览

网上关于介绍pig、安装Pig以及pig原理的文章够多了。以下记录一些入门时遇到的一些问题,算是一些实战经验吧。

关于脏数据过滤

Pig除了用FILTER进行按条件过滤数据以外,还有一种脏数据无法处理。如,我的数据共29个字段,以“,”分隔。现在有一部分的数据,缺失了部分字段,导致以“,”分隔后,数组长度小于29。因为不知道到底缺失的是哪个字段,这样的数据已经毫无意义。在Pig中如何过滤掉呢?翻遍了Pig的Document,去各种社区提问也没人能回答。最后尽然在FAQ中看到了答案,可以用ARTIY(*)来进行过滤。如:

关于PigStorage

PigStorage可以自定义分隔符,如PigStorage(','),PigStorage('|')。但上次遇到一个奇葩的csv文件,里面的所有数据全部加上的引号,导致数据大小直接变大了1倍不说,而且以','分隔后的数据全部是"1352288xxxx"这样带着引号无法转换为chararray以外类型的数据。数据样例:

"1","2","3","4"

后来想尝试使用'\",\"'来进行分隔,然后对第一个和最后一个字段进行SUBSTRING处理,结果却报错了。具体错误没保存下来,意思好像是PigStorage只能以char为分隔符。

无奈,只能用shell命令替换掉所有的引号再进行下一步处理。

遇到这样的文件,除了祈祷文件不要太大以外,最好的处理方式是给数据发送方上一课。you see see your po data!!!

阅读全文>>

分类:Apache Pig
标签:

关于String split(String)

1条评论1,363次浏览

"13309970XXX,4,,,1,0,,,,24,0,0,19,0,,,,,,,,0,0,,0,,,,"

今天写MapReduce进行split的时候发现一个问题:

原始数据皆为29个字段,以“,”分隔,结果以上这个字符串经过split后的长度居然是25。

经过打印出分隔后的数组,发现:

length=25
0 : 13309970XXX
1 : 4
2 :
3 :
4 : 1
5 : 0
6 :
7 :
8 :
9 : 24
10 : 0
11 : 0
12 : 19
13 : 0
14 :
15 :
16 :
17 :
18 :
19 :
20 :
21 : 0
22 : 0
23 :
24 : 0

也就是说字符串中最后一个0后面的",,,,"没有成为数组的一部分。

后尝试StringUtils.split(s,","),结果:

length=12
0 : 13309970XXX
1 : 4
2 : 1
3 : 0
4 : 24
5 : 0
6 : 0
7 : 19
8 : 0
9 : 0
10 : 0
11 : 0

更加不是我想要的结果。

最后看了看split的源码,发现split方法调用了split(String, int)方法,尝试s.split(",",29)成功输出想要的结果。

查看split(String, int)源码,发现以下语句导致出现以上的问题,当调用split(String)时limit为0,进入while循环,然后从后向前检查list中item的长度是否为0,若为0,则删除。。。

好吧,不知道为何jdk要这么设计,但好歹可以通过split(String, int)来搞定上面的那个场景。但要是遇到预先并不知道数组的长度而又需要获取正确的(或者称之为原始的)split长度时,该如何处理呢。。?

当然可以自己实现一个split,但也可以使用Guava的Spliter。例如以下代码就可以正确的获取到分隔后的数组:

分类:Java语言
标签:
11
profile
  • 文章总数:79篇
  • 评论总数:254条
  • 分类总数:31个
  • 标签总数:44个
  • 运行时间:1193天

大家好,欢迎来到selfup.cn。

这不是一个只谈技术的博客,这里记录我成长的点点滴滴,coding、riding and everthing!

最新评论
  • Anonymous: :arrow: :neutral: :cry:
  • Anonymous: java.io.NotSerializableExcepti on: DStream checkpointing has been enabled but the DStreams with their...
  • wick: HI,请问一下,U,S,V得到后,怎么得到近似矩阵呢(用sp ark java),谢谢。
  • Michael Whitaker: Thank you for this blog, it was very helpful in troubleshooting my own issues. It seems that no...
  • Anonymous: :mad:
  • Anonymous: :???:
  • Anonymous: :mad: :mad: :mad:
  • 洋流: 哥们,我问个问题,你把testOnborrow去掉了。。如果 得到的jedis资源是个不可用的,服务从来都不出问题么?
  • 洋流: 哥们,我问个问题,你把testOnborrow去掉了。。如果 得到的jedis资源是个不可用的,服务从来都不出问题么?
  • Anonymous: :razz: :evil: :grin:
  • 张瑞昌: 有很多,比较常见的是Jacob迭代法,一次迭代O(n^3), 迭代次数不清楚。 如果是手动算的话按照定义求就可以了
  • Anonymous: :mrgreen:
  • lc277: 你好 我想问下一般删除节点要多久,要删除的datanode大概用了 1t,解除授权已经30多小时还没完成,请问是出现什么问题了吗 麻烦告诉下谢谢 qq1844554123
  • Anonymous: 你好 我想问下一般删除节点要多久,要删除的datanode大概用了 1t,解除授权已经30多小时还没完成,请问是出现什么问题了吗
  • Anonymous: :smile: :grin: :eek:
  • 李雪璇: 想要完整代码,可以帮忙发给我吗
  • Anonymous: 请问一下,那个 user的推荐结果楼主查看了么? 为什么输入数据 最高是五分,输出结果都是7分8分啥的?怎么设置输出的分数的最 大值?
  • Anonymous: 那个 user的推荐结果楼主查看了么? 为什么输入数据 最高是五分,输出结果都是7分8分啥的?
  • Anonymous: stopGracefullyOnShutdown在yarn- client模式下我测试的无效,你的呢
  • Anonymous: 另外,import的lib包能否发个列表.