小编jkg*_*yti的帖子

Hadoop - 适用于不同大小(200-500mb)的不可分割文件的块大小

如果我需要对(不可拆分的)数千个大小在200到500mb之间的gzip文件进行顺序扫描,那么这些文件的块大小是多少?

为了这个问题,让我们说完成的处理非常快,因此重新启动映射器并不昂贵,即使对于大块大小也是如此.

我的理解是:

  1. 块大小几乎没有上限,因为对于我的簇的大小,适当数量的映射器有"大量文件".
  2. 为了确保数据的位置,我希望每个gzip文件都在1个块中.

但是,gzip压缩文件的大小各不相同.如果我选择~500mb的块大小(例如我所有输入文件的最大文件大小),如何存储数据?选择"非常大"的块大小(如2GB)会更好吗?在任何一种情况下,HDD容量是否过度浪费?

我想我真的在询问文件是如何实际存储的,并且跨越hdfs块进行分割 - 以及尝试了解不可拆分文件的最佳实践.

更新:一个具体的例子

假设我在三个200 MB文件上运行MR作业,存储如下图所示.

如果HDFS像A一样存储文件,则可以保证3个映射器能够处理每个"本地"文件.但是,如果文件存储在案例B中,则一个映射器需要从另一个数据节点获取文件2的一部分.

鉴于有足够的空闲块,HDFS存储文件如案例A或案例B所示?

HDFS策略

hadoop hdfs

10
推荐指数
1
解决办法
3227
查看次数

在HDFS中的特定文件/块上运行Map-Reduce作业

首先,我是hadoop的新手:)

我有一个大型的gzip压缩文件数据集(gzip文件中的TB文件大小各为100-500mb).

基本上,我需要对我的map-reduce作业的输入进行某种过滤.

我想以各种方式分析这些文件.这些作业中的许多只需要分析某种格式的文件(具有一定长度,包含某些单词等 - 各种任意(反向)索引),并且处理每个作业的整个数据集需要花费不合理的时间.所以我想创建指向HDFS中特定块/文件的索引.

我可以手动生成所需的索引,但是如何准确指定我想要处理哪些(数千个)特定文件/块作为映射器的输入?如果不将源数据读入HBase,我可以这样做吗?我想要吗?或者我完全错误地解决了这个问题?

indexing hadoop hdfs

8
推荐指数
1
解决办法
1170
查看次数

setTimeout和事件传播

我想创建一个通过点击任意位置触发的一次性事件.单击按钮即可创建此事件.我不希望在点击按钮时触发事件,只有任何后续点击(包括按钮).

所以说我有一些类似下面的HTML:

<body>
  <div id="someparent">
    <div id="btn"></div>
  </div>
</body>
Run Code Online (Sandbox Code Playgroud)

以下javascript(jquery):

$('#btn').click( function() {
  $(document).one('click', function() {
    console.log('triggered');
  });
});

$('#someparent').click(function() {
  // this must always be triggered
});
Run Code Online (Sandbox Code Playgroud)

我想避免停止事件传播,但在上面的示例中,事件绑定到文档,然后事件冒泡,并触发事件.

修复此问题的一种方法似乎是将事件创建包装在超时中:

$('#btn').click( function() {
  setTimeout(function() {
    $(document).one('click', function() {
      console.log('triggered');
    });
  }, 1);
});

$('#someparent').click(function() {
  // this must always be triggered
});
Run Code Online (Sandbox Code Playgroud)

现在,这很好用,但我想知道这是否安全.一些执行顺序的概念是否保证这一点总是有效,或者只是偶然的工作?我知道还有其他解决方案(.one()例如另一个嵌套事件),但我特意寻找setTimeout和事件传播如何互操作的答案.

以下小提琴显示两个div.第一个行为错误(文档事件立即触发).单击第二个div,然后在文档(白色区域)上的任何位置说明所需行为:

https://jsfiddle.net/Lwocuuf8/7/

javascript jquery events

8
推荐指数
1
解决办法
1210
查看次数

Spark groupBy OutOfMemory让人痛苦

我在一个相当小的数据集上做了一个简单的组(HDFS中的80个文件,总共几个演出).我在一个纱线集群中的8台低内存机器上运行Spark,即:

spark-submit ... --master yarn-client --num-executors 8 --executor-memory 3000m --executor-cores 1

数据集由长度为500-2000的字符串组成.

我正在尝试做一个简单的groupByKey(见下文),但它失败并出现java.lang.OutOfMemoryError: GC overhead limit exceeded异常

val keyvals = sc.newAPIHadoopFile("hdfs://...")
  .map( someobj.produceKeyValTuple )
keyvals.groupByKey().count()
Run Code Online (Sandbox Code Playgroud)

我可以reduceByKey毫无问题地计算组大小,确保自己问题不是由一个过大的组引起的,也不是由过多的组引起的:

keyvals.map(s => (s._1, 1)).reduceByKey((a,b) => a+b).collect().foreach(println)
// produces:
//  (key1,139368)
//  (key2,35335)
//  (key3,392744)
//  ...
//  (key13,197941)
Run Code Online (Sandbox Code Playgroud)

我尝试过重新格式化,重组和增加groupBy并行度:

keyvals.groupByKey(24).count // fails
keyvals.groupByKey(3000).count // fails
keyvals.coalesce(24, true).groupByKey(24).count // fails
keyvals.coalesce(3000, true).groupByKey(3000).count // fails
keyvals.coalesce(24, false).groupByKey(24).count // fails
keyvals.coalesce(3000, false).groupByKey(3000).count // fails
Run Code Online (Sandbox Code Playgroud)

我试着玩弄spark.default.parallelism,并增加spark.shuffle.memoryFraction0.8同时降低 …

apache-spark

7
推荐指数
1
解决办法
2978
查看次数

标签 统计

hadoop ×2

hdfs ×2

apache-spark ×1

events ×1

indexing ×1

javascript ×1

jquery ×1