Мне нужно установить размер блока файла, когда я загружаю его в HDFS, на некоторое значение, меньшее, чем размер блока кластера. Например, если HDFS использует блоки размером 64 МБ, я могу захотеть скопировать большой файл с блоками 32 МБ.
Я делал это раньше в рамках рабочей нагрузки Hadoop, используя org.apache.hadoop.fs.FileSystem.create () функция, но есть ли способ сделать это из командной строки?
Вы можете сделать это, установив -Ddfs.block.size = something с помощью команды hadoop fs. Например:
hadoop fs -Ddfs.block.size=1048576 -put ganglia-3.2.0-1.src.rpm /home/hcoyote
Как вы можете видеть здесь, размер блока изменяется на то, что вы определяете в командной строке (в моем случае значение по умолчанию составляет 64 МБ, но здесь я уменьшаю его до 1 МБ).
:; hadoop fsck -blocks -files -locations /home/hcoyote/ganglia-3.2.0-1.src.rpm
FSCK started by hcoyote from /10.1.1.111 for path /home/hcoyote/ganglia-3.2.0-1.src.rpm at Mon Aug 15 14:34:14 CDT 2011
/home/hcoyote/ganglia-3.2.0-1.src.rpm 1376561 bytes, 2 block(s): OK
0. blk_5365260307246279706_901858 len=1048576 repl=3 [10.1.1.115:50010, 10.1.1.105:50010, 10.1.1.119:50010]
1. blk_-6347324528974215118_901858 len=327985 repl=3 [10.1.1.106:50010, 10.1.1.105:50010, 10.1.1.104:50010]
Status: HEALTHY
Total size: 1376561 B
Total dirs: 0
Total files: 1
Total blocks (validated): 2 (avg. block size 688280 B)
Minimally replicated blocks: 2 (100.0 %)
Over-replicated blocks: 0 (0.0 %)
Under-replicated blocks: 0 (0.0 %)
Mis-replicated blocks: 0 (0.0 %)
Default replication factor: 3
Average block replication: 3.0
Corrupt blocks: 0
Missing replicas: 0 (0.0 %)
Number of data-nodes: 12
Number of racks: 1
FSCK ended at Mon Aug 15 14:34:14 CDT 2011 in 0 milliseconds
The filesystem under path '/home/hcoyote/ganglia-3.2.0-1.src.rpm' is HEALTHY
ПРИМЕЧАНИЕ ДЛЯ HADOOP 0.21. В 0.21 есть проблема: вы должны использовать -D dfs.blocksize вместо -D dfs.block.size.