在Hadoop上用集算器进行敏捷语法编程.pdf

在Hadoop上用集算器进行敏捷语法编程.pdf

ID:52238848

大小:439.19 KB

页数:3页

时间:2020-03-25

在Hadoop上用集算器进行敏捷语法编程.pdf_第1页
在Hadoop上用集算器进行敏捷语法编程.pdf_第2页
在Hadoop上用集算器进行敏捷语法编程.pdf_第3页
资源描述:

《在Hadoop上用集算器进行敏捷语法编程.pdf》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、在Hadoop上用集算器进行敏捷语法编程Hadoop是优秀的分布式计算系统,它默认的开发方式是编写MapReduce代码。但MapReduce并非专为数据计算而设计,其语法体系繁琐复杂,编写计算类的代码效率较低,编写通用算法更是困难。在语法敏捷性方面,集算器的表现比MapReduce要好。先用一个例子来说明如何用集算器编写Hadoop代码。比如MapReduce中常见到的Group算法:通过HDFS上的订单数据汇总销售员的销售额,求出前N名。其中,大数据文件fileName,分组字段groupField,汇总字段sumField,汇总算法m

2、ethod,前N名topN都是参数。在集算器中,相应的代码如下:汇总机代码:节点机代码:如何进行大数据的并行计算?最直观的思路是:将任务拆分成一段段的,由节点机分布汇总,再由汇总机进行二次汇总。从上述代码中,我们可以看到集算器将分布式计算分为了两部分:汇总机代码和节点机代码。汇总机负责拆分任务,并将任务以参数的形式分配给各个节点节,最后将节点机的计算结果进行合并汇总。而节点机的作用是按照参数取数据中的一段,并对这一段进行分组汇总。下面将具体解释上述代码。变量定义从上述代码可以看到,集算器是书写在网格中的代码,每个单元格有唯一的行列标识。变量

3、就是单元格名,无需定义,比如汇总机代码中:A2:=40A6:=["192.168.1.200:8281","192.168.1.201:8281","192.168.1.202:8281","192.168.1.203:8281"]A2和A6就是两个变量,分别是任务数量和节点机列表。其他代码可以直接通过格名来引用变量,比如A3,A4,A5就引用了A2,而A7引用了A6。变量就是格名,这使单元格之间的引用更加直观方便。显然,这种方式还允许用户将大目标分解为多个简单步骤,通过步骤间的依次调用来接近最终目标。上述代码中:A8引用了A7,A9引

4、用了A8,A9又引用了A10。每一步只解决一个小问题,最终实现了本例的计算目标。外部参数在集算器中,一个参数既可以作为普通参数使用,也可以作为宏使用。比如在汇总机代码中,fileName、groupField、sumField、method都是来自外部的参数:A1:=file(fileName).size()A7:=callx(“groupSub.dfx”,A5,A4,fileName,groupField,sumField,method;A6)它们的意义如下:filename,大数据文件名,比如:"hdfs://192.168.1.

5、10/sales.txt"groupField,分组字段,比如:empIDsumField,汇总字段,比如amountmethod,汇总方法,比如:sum、min、max等如果给参数加上${},则它就可以当做宏来用,比如汇总机代码中的A8:=A7.merge(${gruopField})A9:=A8.groups@o(${gruopField};${method}(Amount):sumAmount)此时,宏会被集算器翻译为代码执行,而不是简单的参数,翻译后的代码可能是:A8:=A7.merge(empID)A9:=A8.gr

6、oups@o(empID;sum(Amount):sumAmount)宏属于动态语言的范畴,它可以直接作为代码参与运算,比参数要灵活得多,实现代码复用非常方便。A10中的二维表为什么专门讲A10?因为在进行数据计算是我们常会用到二维表,而A10就是一个二维表。它具有两列,分别是字符串类型和浮点类型。其结构类似这样:empIDsumAmountC010010456734.12C010211443123.15C120038421348.41……集算器中对二维表的应用说明它是支持支持动态数据类型的。也就是说,我不必刻意指定就可以将不同类型的数据以

7、自由的方式组织在一个变量中。动态数据类型不仅免去了定义数据类型的麻烦,更方便的是它的表达能力更强。从上述二维表的使用中可以看出来,进行批量数据的计算时用动态数据类型会更方便。除了二维表外,动态数据类型也可以是数组,比如A3:=to(A2),A3就是一个数组,其值为[1,2,3…..40]。当然简单值就更可以了,我试过日期、字符串、整数等等。动态数据类型必须会支持嵌套的数据结构,比如数组的第一个成员是数字,第二个成员是数组,第三个成员是二维表等。这使它的灵活性更强。批量数据的计算函数集算器中有很多函数是针对批量数据计算的,比如上述代码中的A3

8、:=to(A2),它生成了一个数组[1,2,3…..40]。针对这个数组,可以直接对它的每个成员进行计算,也无需循环语句,比如A4:=A3.(long(~*A1/A2)),它表示

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。