
# 设置HDFS存储策略
#### 功能简介
为HDFS上某个文件或文件夹指定存储策略。
#### 代码样例
1. 在"${HADOOP_HOME}/etc/hadoop/"下的"Hdfs-site.xml"中设置如下参数。
   ```
   <name>dfs.storage.policy.enabled</name>
   <value>true</value>
   ```
   
2. 重启HDFS，如[图1] 所示。
   图1重启hdfs   
   ![](https://support.huaweicloud.com/devg-mrs/zh-cn_image_0250982324.png) 
3. 登录MRSManager，选择"服务管理 \> HDFS \> 服务配置"，将"参数类别"设置为"全部配置"。
4. 搜索并查看"dfs.storage.policy.enabled"的参数值是否为"true"，如果不是，修改为"true"，并单击"保存配置"，重启HDFS。
5. 查看代码。 如下是代码片段，详细代码请参考com.huawei.bigdata.hdfs.examples中的HdfsMain类。
   ```
   /** 
      * 设置存储策略 
      * @param policyName 
      * 策略名称能够被接受: 
      * <li>HOT 
      * <li>WARM 
      * <li>COLD 
      * <li>LAZY_PERSIST 
      * <li>ALL_SSD 
      * <li>ONE_SSD 
      * @throws IOException  
      */ 
     private void setStoragePolicy(String policyName) throws IOException{
       if(fSystem instanceof DistributedFileSystem) {
         DistributedFileSystem dfs = (DistributedFileSystem) fSystem;
         Path destPath = new Path(DEST_PATH);
         Boolean flag = false;
         mkdir();
         BlockStoragePolicySpi[] storage = dfs.getStoragePolicies();
         for (BlockStoragePolicySpi bs : storage) {
           if (bs.getName().equals(policyName)) {
             flag = true;
           }
           System.out.println("StoragePolicy:" + bs.getName());
         }
         if (!flag) {
           policyName = storage[0].getName();
         }
         dfs.setStoragePolicy(destPath, policyName);
         System.out.println("success to set Storage Policy path " + DEST_PATH);
         rmdir();
       }
       else{
         System.out.println("Storage Policy is only supported in HDFS.");
       }
     }
   ```
   
 
