我目前正在设计一个应用程序,它有一个模块可以从数据库加载大量数据,并根据具体情况通过各种计算将其减少到更小的数据集.
许多更密集的操作具有确定性,并且可以用于并行处理.
如果我有一个循环遍历从db到达的大量数据块,并且每个都调用一个没有副作用的确定性函数,我将如何使它成为程序不等待函数返回而是设置接下来的电话,他们可以并行处理?现在我可以用一种天真的方法来证明这个原则.
我已经阅读过谷歌的MapReduce论文了,虽然我可以在很多地方使用整体原理,但我现在不会针对大型集群,而不是1.0版本的单核多CPU或多CPU机器.所以目前,我不确定我是否可以实际使用该库,或者我必须自己推出一个简单的基本版本.
我处于设计过程的早期阶段,到目前为止,我的目标是C-something(用于速度关键位)和Python(用于生产力关键位)作为我的语言.如果有令人信服的理由,我可能会改变,但到目前为止,我对我的选择很满意.
请注意,我知道从数据库中检索下一个块可能需要更长的时间,而不是处理当前的块,整个过程将受I/O限制.但是,我现在假设它不是并且实际上在此时使用数据库集群或内存缓存或其他东西不是I/O绑定的.
我最近阅读了这篇精彩的文章,它简洁地解释了Google MapReduce的强大功能:
http://www.joelonsoftware.com/items/2006/08/01.html
在Mastering Delphi 2009中,Marco Cantu使用匿名函数显示了一个多线程for循环,它基本上是MapReduce的Map部分,但是说它不完整,还有其他样本.我也模糊地意识到Embarcadero的某个人在DTL图书馆工作,但我最近没有看到太多.
那么,Delphi中是否有可靠的MapReduce实现可供使用?
我知道Andreas Hausladen这个方便的图书馆,如果没有一般的Map Reduce,这是最好的图书馆吗?
http://andy.jgknet.de/blog/?page_id=100
谢谢!
我遇到了一个奇怪的问题.当我在大型数据集(> 1TB压缩文本文件)上运行Hadoop作业时,一些reduce任务失败,堆栈跟踪如下:
java.io.IOException: Task: attempt_201104061411_0002_r_000044_0 - The reduce copier failed
at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:385)
at org.apache.hadoop.mapred.Child$4.run(Child.java:240)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:396)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1115)
at org.apache.hadoop.mapred.Child.main(Child.java:234)
Caused by: java.io.IOException: Intermediate merge failed
at org.apache.hadoop.mapred.ReduceTask$ReduceCopier$InMemFSMergeThread.doInMemMerge(ReduceTask.java:2714)
at org.apache.hadoop.mapred.ReduceTask$ReduceCopier$InMemFSMergeThread.run(ReduceTask.java:2639)
Caused by: java.lang.RuntimeException: java.io.EOFException
at org.apache.hadoop.io.WritableComparator.compare(WritableComparator.java:128)
at org.apache.hadoop.mapred.Merger$MergeQueue.lessThan(Merger.java:373)
at org.apache.hadoop.util.PriorityQueue.downHeap(PriorityQueue.java:139)
at org.apache.hadoop.util.PriorityQueue.adjustTop(PriorityQueue.java:103)
at org.apache.hadoop.mapred.Merger$MergeQueue.adjustPriorityQueue(Merger.java:335)
at org.apache.hadoop.mapred.Merger$MergeQueue.next(Merger.java:350)
at org.apache.hadoop.mapred.Merger.writeFile(Merger.java:156)
at org.apache.hadoop.mapred.ReduceTask$ReduceCopier$InMemFSMergeThread.doInMemMerge(ReduceTask.java:2698)
... 1 more
Caused by: java.io.EOFException
at java.io.DataInputStream.readInt(DataInputStream.java:375)
at com.__.hadoop.pixel.segments.IpCookieCountFilter$IpAndIpCookieCount.readFields(IpCookieCountFilter.java:241)
at org.apache.hadoop.io.WritableComparator.compare(WritableComparator.java:125)
... 8 more
Run Code Online (Sandbox Code Playgroud)
java.io.IOException: Task: attempt_201104061411_0002_r_000056_0 - The reduce copier failed
at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:385)
at org.apache.hadoop.mapred.Child$4.run(Child.java:240) …
Run Code Online (Sandbox Code Playgroud) 我试图在Windows下使用hadoop,当我想启动tasktracker时遇到问题.例如:
$bin/start-all.sh
Run Code Online (Sandbox Code Playgroud)
然后日志写道:
2011-06-08 16:32:18,157 ERROR org.apache.hadoop.mapred.TaskTracker: Can not start task tracker because java.io.IOException: Failed to set permissions of path: /tmp/hadoop-Administrator/mapred/local/taskTracker to 0755
at org.apache.hadoop.fs.RawLocalFileSystem.checkReturnValue(RawLocalFileSystem.java:525)
at org.apache.hadoop.fs.RawLocalFileSystem.setPermission(RawLocalFileSystem.java:507)
at org.apache.hadoop.fs.RawLocalFileSystem.mkdirs(RawLocalFileSystem.java:318)
at org.apache.hadoop.fs.FilterFileSystem.mkdirs(FilterFileSystem.java:183)
at org.apache.hadoop.mapred.TaskTracker.initialize(TaskTracker.java:630)
at org.apache.hadoop.mapred.TaskTracker.<init>(TaskTracker.java:1328)
at org.apache.hadoop.mapred.TaskTracker.main(TaskTracker.java:3430)
Run Code Online (Sandbox Code Playgroud)
有什么问题?我怎么解决这个问题?谢谢!
我们有以下字段的集合'消息'
_id | messageId | chainId | createOn
1 | 1 | A | 155
2 | 2 | A | 185
3 | 3 | A | 225
4 | 4 | B | 226
5 | 5 | C | 228
6 | 6 | B | 300
Run Code Online (Sandbox Code Playgroud)
我们希望按照以下标准选择所有文档字段
所以,预期的结果是
_id | messageId | chainId | createOn
3 | 3 | A | 225
5 | 5 | C | 228
6 | 6 | B …
Run Code Online (Sandbox Code Playgroud) java mapreduce mongodb aggregation-framework spring-data-mongodb
我在hbase中有一个大表,名称是UserAction,它有三个列族(歌曲,专辑,歌手).我需要从'song'列族中获取所有数据作为JavaRDD对象.我试试这段代码,但效率不高.有没有更好的解决方案呢?
static SparkConf sparkConf = new SparkConf().setAppName("test").setMaster(
"local[4]");
static JavaSparkContext jsc = new JavaSparkContext(sparkConf);
static void getRatings() {
Configuration conf = HBaseConfiguration.create();
conf.set(TableInputFormat.INPUT_TABLE, "UserAction");
conf.set(TableInputFormat.SCAN_COLUMN_FAMILY, "song");
JavaPairRDD<ImmutableBytesWritable, Result> hBaseRDD = jsc
.newAPIHadoopRDD(
conf,
TableInputFormat.class,
org.apache.hadoop.hbase.io.ImmutableBytesWritable.class,
org.apache.hadoop.hbase.client.Result.class);
JavaRDD<Rating> count = hBaseRDD
.map(new Function<Tuple2<ImmutableBytesWritable, Result>, JavaRDD<Rating>>() {
@Override
public JavaRDD<Rating> call(
Tuple2<ImmutableBytesWritable, Result> t)
throws Exception {
Result r = t._2;
int user = Integer.parseInt(Bytes.toString(r.getRow()));
ArrayList<Rating> ra = new ArrayList<>();
for (Cell c : r.rawCells()) {
int product = Integer.parseInt(Bytes
.toString(CellUtil.cloneQualifier(c)));
double …
Run Code Online (Sandbox Code Playgroud) 我按照http://gauravkohli.com/2014/08/26/apache-oozie-installation-on-hadoop-2-4-1/中的步骤在Linux机器上 安装了oozie 4.1.0
hadoop version - 2.6.0
maven - 3.0.4
pig - 0.12.0
Run Code Online (Sandbox Code Playgroud)
群集设置 -
MASTER NODE runnig - Namenode,Resourcemanager,proxyserver.
SLAVE NODE正在运行 -Datanode,Nodemanager.
当我运行单个工作流程时,工作意味着它成功.但是当我尝试运行多个Workflow作业时,即两个作业都处于接受状态
检查错误日志,我深入研究了问题,
014-12-24 21:00:36,758 [JobControl] INFO org.apache.hadoop.ipc.Client - Retrying connect to server: 172.16.***.***/172.16.***.***:8032. Already tried 9 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1000 MILLISECONDS)
2014-12-25 09:30:39,145 [communication thread] INFO org.apache.hadoop.ipc.Client - Retrying connect to server: 172.16.***.***/172.16.***.***:52406. Already tried 9 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1000 MILLISECONDS)
2014-12-25 09:30:39,199 [communication thread] INFO org.apache.hadoop.mapred.Task - Communication exception: …
Run Code Online (Sandbox Code Playgroud) 我现在正在使用CDH 5.1.它开始正常的Hadoop工作,YARN
但蜂巢仍然可以使用mapred
.有时一个大的查询会挂起很长一段时间,我想杀了它.
我可以通过JobTracker Web控制台找到这个重要的工作,而它没有提供杀死它的按钮.
另一种方法是通过命令行查杀.但是,我找不到任何通过命令行运行的作业.
我试过2个命令:
yarn application -list
mapred job -list
如何杀死这样的大查询?
我使用在线AWS控制台与Apache Spark一起启动了我的集群.我有一个基于我的Spark应用程序的胖罐子,我已将其上传到S3 Bucket.当我尝试将其作为a发送时Step with a Custom Jar
,该过程失败.任何指针都将非常感激.
是否可以使用MongoDB聚合框架生成时间序列输出,其中任何被认为属于每个存储桶的源文档都被添加到该存储桶中?
说我的收藏看起来像这样:
/*light_1 on from 10AM to 1PM*/
{
"_id" : "light_1",
"on" : ISODate("2015-01-01T10:00:00Z"),
"off" : ISODate("2015-01-01T13:00:00Z"),
},
/*light_2 on from 11AM to 7PM*/
{
"_id" : "light_2",
"on" : ISODate("2015-01-01T11:00:00Z"),
"off" : ISODate("2015-01-01T19:00:00Z")
}
Run Code Online (Sandbox Code Playgroud)
..我正在使用6小时的桶间隔来生成2015-01-01的报告.我希望我的结果看起来像:
{
"start" : ISODate("2015-01-01T00:00:00Z"),
"end" : ISODate("2015-01-01T06:00:00Z"),
"lights" : []
},
{
"start" : ISODate("2015-01-01T06:00:00Z"),
"end" : ISODate("2015-01-01T12:00:00Z"),
"lights_on" : ["light_1", "light_2"]
},
{
"start" : ISODate("2015-01-01T12:00:00Z"),
"end" : ISODate("2015-01-01T18:00:00Z"),
"lights_on" : ["light_1", "light_2"]
},
{
"start" : ISODate("2015-01-01T18:00:00Z"),
"end" : ISODate("2015-01-02T00:00:00Z"),
"lights_on" …
Run Code Online (Sandbox Code Playgroud) mapreduce time-series mongodb mongodb-query aggregation-framework
mapreduce ×10
hadoop ×4
java ×4
apache-spark ×2
bigdata ×2
mongodb ×2
cloudera ×1
cloudera-cdh ×1
concurrency ×1
delphi ×1
emr ×1
hadoop-yarn ×1
hbase ×1
hive ×1
oozie ×1
time-series ×1
windows ×1