首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >猪脚本样本10块训练数据,猪脚本被卡住。

猪脚本样本10块训练数据,猪脚本被卡住。
EN

Stack Overflow用户
提问于 2015-08-31 15:26:12
回答 1查看 304关注 0票数 1

背景

我有一个二进制分类任务,其中的数据非常不平衡。具体来说,标签0的数据比标签1的数据多得多。为了解决这个问题,我计划用标签0对数据进行二次采样,以大致匹配标签1的数据大小。我是在一个猪脚本中这样做的。而不是仅仅抽样一组训练数据,我这样做了10次,以产生10个数据块,以培训10个分类器类似于套袋,以减少方差。

样例猪脚本

代码语言:javascript
复制
---------------------------------
-- generate training chunk i
---------------------------------
-- subsampling data with label 0
labelZeroTrainingDataChunki = SAMPLE labelZeroTrainingData '$RATIO';

-- combine data with label 0 and label 1
trainingChunkiRaw = UNION labelZeroTrainingDataChunk1,labelOneTrainingData;

-- join two tables to get all the features back from table 'dataFeatures'
trainingChunkiFeatures = JOIN trainingChunkiRaw BY id, dataFeatures BY id;
-- in order to shuffle data, I give a random number to each data
trainingChunki = FOREACH trainingChunkiFeatures GENERATE
                        trainingChunkiRaw::id AS id,
                        trainingChunkiRaw::label AS label,
                        dataFeatures::features AS features,
                        RANDOM() AS r;
-- shuffle the data
trainingChunkiShuffledRandom = ORDER trainingChunki BY r;

-- store this chunk of data into s3
trainingChunkiToStore = FOREACH trainingChunkiShuffledRandom GENERATE
                        id AS id,
                        label AS label,
                        features AS features;

STORE trainingChunkiToStore INTO '$training_data_i_s3_path' USING PigStorage(',');

在我真正的猪脚本中,我做了10次来生成10个数据块。

问题

我遇到的问题是,如果我选择生成10块数据,就会有这么多映射/还原任务,超过10K。大多数映射者都做非常小的事情(运行不到1分钟)。在某种程度上,整个猪的剧本都被卡住了。只有一个映射器/还原器任务可以运行,所有其他映射器/还原任务都会被阻塞。

我试过什么

  1. 为了弄清楚发生了什么,我首先将生成的块数减少到3块,情况不那么严重。大约有7或8个地图绘制者在同一时间运行。同样,这些映射器做了非常小的事情(运行约1分钟)。
  2. 然后,我把代码块的数量增加到5,此时,我观察到了相同的问题,当我将块数设置为10时,在某个时候,只有一个映射器或减速器运行,所有其他映射器和减速器都被阻塞了。
  3. 我删除了脚本的某些部分,使其仅存储id和标签,而没有功能。 生成训练块I-将数据与标签0和标签1 trainingChunkiRaw = UNION labelZeroTrainingDataChunki,labelOneTrainingData;使用PigStorage(',‘)将trainingChunkiRaw存储到'$training_data_i_s3_path’中;

这没什么问题。

  1. 然后我又加入了洗牌 生成训练块I-将数据与标签0相结合,标签1 trainingChunkiRaw = UNION labelZeroTrainingDataChunki,labelOneTrainingData;trainingChunki = FOREACH trainingChunkiRaw生成id、标签、特征、随机() AS r;trainingChunkiToStore = FOREACH trainingChunkiShuffledRandom生成id作为id,标签作为标签,特征作为特征;使用PigStorage(',‘)将trainingChunkiToStore存储到'$training_data_i_s3_path’中;

同样的问题再次出现。更糟糕的是,在某种程度上,没有地图/减速机运行。整个计划没有取得任何进展就挂了。我添加了另一台机器,程序运行了几分钟,然后又卡住了。看起来这里有一些依赖问题。

有什么问题?

我怀疑有一些依赖会导致僵局。令人困惑的是,在洗牌之前,我已经生成了数据块。因为这些数据块是相互独立的,所以我希望这些数据块可以并行执行。

我还注意到,有许多映射器/减速器几乎不做什么事情(存在不到1分钟)。在这种情况下,我可以想象启动映射器/减速器的开销会很高,有什么办法来控制它吗?

  1. 有什么问题,有什么建议吗?
  2. 有没有标准的方法来做这个取样。我可以想象,有很多情况下,我们需要做这些次抽样,如自举或袋装。所以,也许有一些标准的方法可以在猪身上做到这一点。我在网上找不到有用的东西。非常感谢

附加信息

  1. 表'labelZeroTrainingData‘的大小非常小,大约为16 of。表'labelZeroTrainingData‘也是通过过滤在同一个pig脚本中生成的。
  2. 我在3台AWSc3.2x大型机器上运行了这个猪脚本。
  3. 表'dataFeatures‘可能很大,大约15 be的gziped。
  4. 我没有修改hadoop的任何默认配置。
  5. 我检查了磁盘空间和内存使用情况。磁盘空间的使用率约为40%。内存使用率约为90%。我不确定记忆是问题所在。因为有人告诉我,如果记忆是问题,整个任务应该失败。
EN

回答 1

Stack Overflow用户

发布于 2015-09-01 14:01:42

过了一会儿,我想我想出办法了。问题很可能是多个STORE语句。在默认情况下,看起来pig脚本将在批处理中运行。因此,对于每个数据块,都有一个作业正在运行,这会导致缺乏资源,例如映射器和减速器的插槽。没有一项工作能够完成,因为每个任务都需要更多的映射器/减速器槽。

溶液

  1. 用猪排。有一个名为MultiStorage的存储函数,在本例中可能很有用。我在piggybank和hadoop之间有一些版本不兼容的问题。但也许能行。
  2. 禁用批处理中的猪执行操作。猪试图优化执行。我只是通过添加-M来禁用这个多查询功能。因此,当您运行pig脚本时,它看起来像是pig -M -f pig_script.pg,它一次只执行一条语句,而不进行任何优化。这可能并不理想,因为没有进行优化。对我来说,这是可以接受的。
  3. 在猪中使用EXEC来强制执行某些执行顺序,这在这种情况下是有帮助的。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32314728

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档