相关疑难解决方法(0)

Hadoop如何执行输入拆分?

这是一个涉及Hadoop/HDFS的概念性问题.假设您有一个包含10亿行的文件.并且为了简单起见,我们考虑每条线的形式<k,v>,其中k是从开头开始的线的偏移量,值是线的内容.

现在,当我们说要运行N个映射任务时,框架是否将输入文件拆分为N个拆分并在该拆分上运行每个映射任务?或者我们是否必须编写一个分区函数来执行N分割并在生成的分割上运行每个映射任务?

我想知道的是,拆分是在内部完成还是我们必须手动拆分数据?

更具体地说,每次调用map()函数时,它的Key key and Value val参数是什么?

谢谢,迪帕克

hadoop mapreduce hdfs

34
推荐指数
5
解决办法
5万
查看次数

关于Hadoop/HDFS文件拆分

想要确认以下内容.请验证这是否正确:1.根据我的理解,当我们将文件复制到HDFS时,文件(假设其大小> 64MB = HDFS块大小)被分成多个块并且每个块存储在不同的块上数据节点.

  1. 将文件复制到HDFS时文件内容已经拆分为块,并且在运行map作业时不会发生文件拆分.映射任务仅按照它们在每个最大块上工作的方式进行调度.大小为64 MB,具有数据位置(即映射任务在包含数据/块的节点上运行)

  2. 如果文件被压缩(gzip),也会发生文件分割,但MR确保每个文件只由一个映射器处理,即MR将收集位于其他数据节点的所有gzip文件块并将它们全部提供给单个映射器.

  3. 如果我们定义isSplitable()以返回false,则会发生与上述相同的事情,即文件的所有块将由在一台机器上运行的一个映射器处理.MR将从不同的数据节点读取文件的所有块,并将它们提供给单个映射器.

hadoop mapreduce

17
推荐指数
2
解决办法
2万
查看次数

JSON对象跨越多行,如何在Hadoop中拆分输入

我需要摄取大型JSON文件,其记录可能跨越多行(而不是文件)(完全取决于数据提供者如何编写它).

Elephant-Bird假设LZO压缩,我知道数据提供者不会这样做.

Dzone文章http://java.dzone.com/articles/hadoop-practice假设JSON记录将在同一行.

任何想法,除了压缩JSON ...文件将是巨大的...如何正确分割文件,使JSON不会破坏.

编辑:行,而不是文件

java json hadoop elephantbird

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

如何使用Java从Hadoop读取偏移量的文件

问题:我想从HDFS读取文件的一部分并将其返回,例如从1000行的文件中返回101-120行.

我不想使用,seek因为我读过它很贵.

我有日志文件,我使用PIG处理成有意义的数据集.我一直在编写一个API来返回数据以供前端消费和显示.这些经过处理的数据集可以足够大,我不想在一个啜食中读出Hadoop中的整个文件,以节省线路时间和带宽.(比方说5 - 10MB)

目前我使用a BufferedReader来返回工作正常的小摘要文件

ArrayList lines = new ArrayList();
...
for (FileStatus item: items) {
    // ignoring files like _SUCCESS
    if(item.getPath().getName().startsWith("_")) {
        continue;
    }           

    in = fs.open(item.getPath());
    BufferedReader br = new BufferedReader(new InputStreamReader(in));

    String line;
    line = br.readLine();
    while (line != null) {
        line = line.replaceAll("(\\r|\\n)", "");
        lines.add(line.split("\t"));
        line = br.readLine();
    }
}
Run Code Online (Sandbox Code Playgroud)

我在网上搜索了很多和Stack一样,但还没找到我需要的东西.

也许这完全是错误的做法,我需要一套完全独立的代码和不同的功能来管理它.对任何建议开放.

谢谢!

正如基于以下讨论的研究所补充的那样: Hadoop过程如何记录跨越块边界的记录? Hadoop FileSplit阅读

java iteration hadoop offset bufferedreader

6
推荐指数
1
解决办法
2953
查看次数

文件分为块存储在HDFS中?

据我所知,HDFS中的块系统是基础文件系统之上的逻辑分区.但是,当我发出cat命令时,如何检索文件.

假设我有一个1 GB的文件.我的默认HDFS块大小为64 MB.

我发出以下命令:

hadoop -fs copyFromLocal my1GBfile.db input/data/
Run Code Online (Sandbox Code Playgroud)

上面的命令将文件my1GBfile.db从我的本地机器复制到输入/数据目录中HDFS:

我有16个块要复制和复制(1 GB/64 MB~16).

如果我有8 datanodes,则单个datanode可能没有所有块来重建文件.

当我发出以下命令

hadoop -fs cat input/data/my1GBfile.db | head 
Run Code Online (Sandbox Code Playgroud)

现在发生了什么?

文件是如何重构的?虽然块只是逻辑分区,但1 GB文件是如何物理存储的.它存储在HDFS上.每个datanode获取文件的一些物理部分.因此,通过将输入1GB文件分成64 MB块,我们可能会破坏记录级别的某些内容(例如在行之间).这是怎么处理的?

我检查了我的datanode,我确实看到了一个blk_1073741825,在编辑器中打开时实际上显示了该文件的内容.

那么所制作的文件块是不合逻辑的,但实际partition的数据发生了吗?

请帮助澄清一下

hadoop hdfs hadoop2

3
推荐指数
1
解决办法
4955
查看次数

mapreduce hadoop中输入分割数与映射器数之间的关系

我是hadoop的新手和地图缩小模型并试图让这些概念正确.

我首先想要得到输入拆分的概念和映射器的数量是正确的.

我正在运行mapreduce wordcount程序,以下是我的问题.

1)如何确定输入分割?我在同一个集群上运行相同的程序,有两个不同大小的输入

file 1 : size 48mb. => i got number of splits:1 in log.
file 2: size 126mb => number of splits : 1 
file 2 : size 126mb ( executed in eclipse IDE) => number of splits: 4
Run Code Online (Sandbox Code Playgroud)

不应该是126 MB文件的分割数等于2?因为我已经读过块大小为64 MB.所以它必须创建2个分裂.

2)如何确定地图制作者的数量?我试图通过以下方式获得映射器的数量来理解mapreduce的工作流程.

conf.get("mapred.map.tasks")
Run Code Online (Sandbox Code Playgroud)

它每次返回2.

3)分割数和映射器数之间是否有任何关系?

4)做上面的事情取决于集群?对于伪分布式模式和其他集群是否相同或不同?

谢谢.

hadoop mapreduce

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

在hadoop HDFS中存储大文件?

我需要在HDFS上存储大约10TB的大文件.我需要了解的是HDFS将如何存储此文件.比如,群集的复制因子是3,我有一个10节点群集,每个节点上有超过10 TB的磁盘空间,即总群集容量超过100TB.

现在,HDFS随机选择三个节点并将文件存储在这三个节点上.那么这就像听起来一样简单.请确认?

或者HDFS将文件分割 - 比如说每个10T分割1TB,然后将每个分割存储在随机选择的3个节点上.分裂是可能的,如果是,则是启用它的配置方面.如果HDFS必须拆分二进制文件或文本文件 - 它是如何拆分的.只需按字节.

java hadoop mapreduce bigdata hdfs

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