Hadoop筆記HDFS(1)

wangq17發表於2016-10-17

環境:Hadoop2.7.3

1、Benchmarking HDFS

1.1測試叢集的寫入

執行基準測試是檢測HDFS叢集是否正確安裝以及表現是否符合預期的好方法。DFSIO是Hadoop自帶的一個基準測試程式,可以用來分析HDFS叢集的I/O能力

指令碼: $HADOOP_HOME/bin/hadoop jar hadoop-mapreduce-client-jobclient-2.7.3-tests.jar TestDFSIO -write -nrFiles 10 -size 50MB

nrFiles:指定輸入的檔案個數

-size:指定每個輸入檔案的大小

基準測試將結果寫道控制檯,並且將結果新增到TestDFSIO_results.log中,可以自己指定要寫入的檔名(-resFile)

1.2測試叢集的讀取

這一步要在第一步完成後進行,因為指令碼要用到第一步寫完的檔案。

 $HADOOP_HOME/bin/hadoop jar hadoop-mapreduce-client-jobclient-2.7.3-tests.jar TestDFSIO -read -nrFiles 10 -size 50MB

1.3刪除執行基準測試產生的檔案

 $HADOOP_HOME/bin/hadoop jar hadoop-mapreduce-client-jobclient-2.7.3-tests.jar TestDFSIO -clean

 

2、刪除節點

用下面的方法可以方便優雅的將節點從叢集中解除掉。(從slaves檔案中刪除掉節點名也可以,簡單但不優雅)
2.1建立一個檔案存放要刪除的節點,hdfs_exclude.txt
2.2在hdfs-site.xml中配置如下屬性和value
<property> <name>dfs.hosts.exclude</name> <value>$HADOOP_HOME/etc/hadoop/hdfs_exclude.txt</value> <description>DFS exclude</description> </property>
2.3 執行:$HADOOP_HOME/bin/hadoop dfsadmin -refreshNodes
2.4 解除節點的過程會在HDFS的webUI顯示。解除過程可以使用指令碼進行監控。在解除節點的過程完成前,
不要關閉節點
>bin/hadoop dfsadmin -report

在一個解除一個節點的過程中,HDFS會將原來存在節點上的blocks移動到叢集中其它的節點。解除節點的過程可能會很慢,
因為HDFS會小心的進行避免叢集的崩潰。在解除節點的過程結束前,關閉節點會導致資料的丟失。在解除過程結束後,在
exclude檔案中的節點不會再與namenode節點通訊。

3、Using multiple disks/volumes and limiting HDFS disk usage
Hadoop支援為DataNode資料目錄(datanode data directory)指定多個儲存路徑,這種特性允許我們使用DataNode的多個disk/valumes
存放資料blocks,Hadoop會盡量在每個儲存目錄存放相同大小的資料。Hadoop也支援限制HDFS使用硬碟空間的大小。
實現方法:
3.1 Create HDFS data storage directories in each volume.
3.2 In the $HADOOP_HOME/conf/hdfs-site.xml , provide a comma-separated list
of directories corresponding to the data storage locations in each volume under the
dfs.data.dir directory.
<property>
<name>dfs.data.dir</name>
<value>/u1/hadoop/data,/u2/hadoop/data</value>
</property>
3.3 To limit the HDFS disk usage, add the following property to $HADOOP_HOME/conf/
hdfs-site.xml to reserve space for non-DFS usage. The value specifies the
number of bytes that HDFS cannot use per volume.
<property>
<name>dfs.datanode.du.reserved</name>
<value>6000000000</value>
<description>Reserved space in bytes per volume. Always leave
this much space free for non dfs use.
</description>
</property>

4、設定HDFS的block大小
hdfs通過把儲存的檔案拆分成固定的大小block,存放在叢集上。預設的hdfs的block大小是64MB。block的大小會影響hdfs上
對檔案系統進行操作的效能,如果儲存和處理的是非常大的檔案,那麼更大的block大小會更有效。資料產品中block的大小,會影響
MapReduce計算的效能,因為hadoop預設的行為是為每一個資料塊中儲存的資料建立一個map任務。
4.1設定block的大小:在hdfs-site.xml中新增屬性
<property>
<name>dfs.block.size</name>
<value>134217728</value>
</property>
4.2 可以在上傳檔案的時候指定要上傳路徑的塊的大小
To specify the HDFS block size for specific file paths, you can specify the block size
when uploading the file from the command line as follows:
>bin/hadoop fs -Ddfs.blocksize=134217728 -put data.in /user/foo

5、Setting the file replication factor(設定檔案副本因子)
HDFS在叢集上將檔案拆分成多個固定大小的blocks來存放。這些資料塊在不同的datanode上儲存有副本,以增加
容錯性。
5.1在hdfs-site.xml中設定
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
5.2如果要在上傳檔案的時候設定副本個數,可以使用下面的命令列
>bin/hadoop fs -D dfs.replication=1 -copyFromLocal non-critical-
file.txt /user/foo
5.3 setrep命令可以用來改變在hdfs中已經存在的檔案或檔案路徑的副本因子。
The setrep command can be used to change the replication factor of files or file
paths that are already in the HDFS.
> bin/hadoop fs -setrep 2 non-critical-file.txt --設定.txt檔案的副本數為2個
Replication 3 set: hdfs://myhost:9000/user/foo/non-critical-file.
txt
The setrep 命令的語法如下:
hadoop fs -setrep [-R] <path>
The <path> parameter of the setrep command specifies the HDFS path where the
replication factor has to be changed. The –R option recursively sets the replication
factor for files and directories within a directory.

5.4The replication factor of a file is displayed when listing the files using the ls command.
>bin/hadoop fs -ls
Found 1 item
-rw-r--r--2foo supergroup ... /user/foo/non-critical-file.txt--2就是表示副本因子是2

相關文章