hadoop rm 程序猿删集群跑路 忘记怎么操作

Apache Hadoop是一款支持数据密集型分布式应用程序并以Apache 2.0许可协议发布的开源软件框架,程序猿在对它的日常运维有涉及到集群数据的删除 hadoop rm(hdfs dfs -rm) 操作。

hadoop 小象

1、直接删除

hdfs dfs -rm /path/to/file/you/want/to/remove/permanently

删除的目录会放入/user/hdfs/.Trash中。如果加上-skipTrash 参数则不放入回收站。如下:

hdfs dfs -rm -skipTrash /path/to/file/you/want/to/remove/permanently

2、清空回收站

hdfs dfs -expunge
# 输出 This should give you output similar to this. Basically in a minute the trash will be emptied.

执行完命令后,回收站的数据不会立即被清理,而是先打了一个checkpoint。显示的是一分钟后清除。

spark 函数split 处理特殊字符 点号 星号 斜线 竖线

sparkscala语言处理时间问题时是有固定的处理方式。同样的它在处理字符串数据时,经常会对一行数据按照某个特定的字符分割,如果是逗号、井号或者其它比较明显或者没有特殊含义的字符,直接在split函数中传入该字符即可。但是如果是特殊字符在用split的时候需要做转义。

例如以下特殊字符的分割方式:

关于 按点分割 用string.split(“[.]”) 解决。
关于 按竖线分割 用 string.split(“\|”)解决。
关于 按星号分割 用 string.split(“\*”)解决。
关于 按斜线分割 用 sring.split(“\\”)解决。
关于 按中括号分割 用 sring.split(“\[\]”)解决。

此外还有一些其它需要注意的符号,这些在作为分隔符时都是需要做转移处理的

split 分割转义

spark action 使用体会瞎哔哔之 collect的冥想

我们在之前的篇幅中已经简单介绍了spark的基本情况,笔者自己也在项目实践中对spark的具体的使用有一些肤浅的体会,有的时候甚至不能算是体会,只是随笔记录,希望对读到相关文章的童鞋们能够得到瞬间的思维闪击。

spark collect

简介

Spark内有collect方法,是Action操作里边的一个算子,这个方法可以将RDD类型的数据转化为数组,同时会从远程集群是拉取数据到driver端。

基本情况及弊端

根据RDD的惰性机制,真正的计算发生在RDD的Action操作。一次collect就会导致一次Shuffle,而一次Shuffle调度一次stage,然而一次stage包含很多个已分解的任务碎片Task。这么一来,会导致程序运行时间大大增加,属于比较耗时的操作,即使是在local模式下也同样耗时。 

从环境上来讲,本机local模式下运行并无太大区别,可若放在分布式环境下运行,一次collect操作会将分布式各个节点上的数据汇聚到一个driver节点上,而这么一来,后续所执行的运算和操作就会脱离这个分布式环境而相当于单机环境下运行,这也与Spark的分布式理念不合。 

将大量数据汇集到一个driver节点上,并且像这样val arr = data.collect(),将数据用数组存放,占用了jvm堆内存,可想而知,是有多么轻松就会内存溢出。

优化策略

若需要遍历RDD中元素,大可不必使用collect,可以使用foreach语句; 若需要打印RDD中元素,可用take语句,返回数据集前n个元素,data.take(1000).foreach(println),这点官方文档里有说明; 若需要查看其中内容,可用saveAsTextFile方法。

collectPartitions:同样属于Action的一种操作,同样也会将数据汇集到Driver节点上,与collect区别并不是很大,

唯一的区别是:collectPartitions产生数据类型不同于collect,collect是将所有RDD汇集到一个数组里,而collectPartitions是将各个分区内所有元素存储到一个数组里,再将这些数组汇集到driver端产生一个数组;collect产生一维数组,而collectPartitions产生二维数组。

总的来说,单机环境下使用collect问题并不大,但分布式环境下尽量规避,如有其他需要,手动编写代码实现相应功能就好。