在解析一组特定文件(总共2 TB)时,我的地图目前效率低下。我想更改Hadoop dfs中文件的块大小(从64MB到128 MB)。我在文档中找不到如何只对一组文件而不是整个集群进行操作。
上传时哪个命令会更改块大小? (例如从本地复制到dfs。)
答案 0 :(得分:29)
对我来说,我不得不稍微改变Bkkbrad的答案,让它与我的设置一起工作,以防其他人稍后发现这个问题。我在Ubuntu 10.10上运行Hadoop 0.20:
hadoop fs -D dfs.block.size=134217728 -put local_name remote_location
我的设置不是fs.local.block.size
,而是dfs.block.size
答案 1 :(得分:13)
我改变了答案!您只需在使用命令行时适当地设置fs.local.block.size
配置设置。
hadoop fs -D fs.local.block.size=134217728 -put local_name remote_location
原始答案
使用Hadoop API创建文件时,可以以编程方式指定块大小。不幸的是,您无法使用hadoop fs -put
命令在命令行上执行此操作。要做你想做的事,你必须编写自己的代码来将本地文件复制到远程位置;这并不难,只需为本地文件打开FileInputStream
,使用FileSystem.create
创建远程OutputStream
,然后使用Apache Commons IO中的IOUtils.copy
之类的内容进行复制两个流。
答案 2 :(得分:3)
我们可以使用 hdfs-site.xml 文件中名为 dfs.block.size 的属性更改块大小。 注意: 我们应该提一下比特的大小。 例如 : 134217728位= 128 MB。
答案 3 :(得分:2)
你也可以在你的程序中修改你的块大小
Configuration conf = new Configuration() ;
conf.set( "dfs.block.size", 128*1024*1024) ;
答案 4 :(得分:2)
在conf /文件夹中,我们可以在配置文件hdfs-site.xml中更改dfs.block.size
的值。
在hadoop版本1.0中,默认大小为64MB,在版本2.0中,默认大小为128MB。
<property>
<name>dfs.block.size<name>
<value>134217728<value>
<description>Block size<description>
<property>