hdfs 文件的追加

1、修改hdfs-site.xml 
        
Java代码    收藏代码
  1. <property>  
  2. lt;name>dfs.support.append</name>  
  3. <value>true</value>  
  4. operty>  

2、目前如何在命令行里面给HDFS文件中追加内容我还没找到相应的方法。但是,我们可以通过Hadoop提供的API实现文件内容追加,如何实现?这里我写了一个简单的测试程序: 
           
Java代码    收藏代码
  1.                      public class AppendContent {  
  2.     public static void main(String[] args) {  
  3.                     String hdfs_path = "/sort/sort";//文件路径  
  4.                     Configuration conf = new Configuration();  
  5.                    
  6.                     FileSystem fs = null;  
  7.                     try {  
  8.                         fs = FileSystem.get(URI.create(hdfs_path), conf);  
  9.                         //要追加的文件流,inpath为文件  
  10.                         OutputStream out = fs.append(new Path(hdfs_path));  
  11.                        Writer writer = new OutputStreamWriter(out);  
  12.                        BufferedWriter bfWriter = new BufferedWriter(writer);  
  13.                        bfWriter.write("good!!");  
  14.                        if(null != bfWriter){  
  15.                            bfWriter.close();  
  16.                        }  
  17.                        if(null != writer){  
  18.                            writer.close();  
  19.                        }  
  20.                        if(null != out){  
  21.                            out.close();  
  22.                        }  
  23.                         System.out.println("success!!!");  
  24.                     } catch (IOException e) {  
  25.                         e.printStackTrace();  
  26.                     }  
  27.                 }  
  28. }  
  29.               


3、将代码打包运行 
4、如果报错: 
          
Java代码    收藏代码
  1.       Exception in thread "main" java.io.IOException: Failed to replace a bad datanode on the existing pipeline due to no more good datanodes being available to try. (Nodes: current=[10.10.22.17:5001010.10.22.18:50010], original=[10.10.22.17:5001010.10.22.18:50010]). The current failed datanode replacement policy is DEFAULT, and a client may configure this via 'dfs.client.block.write.replace-datanode-on-failure.policy' in its configuration.at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.findNewDatanode(DFSOutputStream.java:960)  
  2. at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.addDatanode2ExistingPipeline(DFSOutputStream.java:1026)  
  3. at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.setupPipelineForAppendOrRecovery(DFSOutputStream.java:1175)  
  4.   
  5. at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.run(DFSOutputStream.java:531)  

5、再次修改hdfs-site.xml 
        
Java代码    收藏代码
  1.                <property>  
  2.                        <name>dfs.client.block.write.replace-datanode-on-failure.policy</nam  
  3. e>  
  4.                       <value>NEVER</value>  
  5.                </property>  
  6.            <property>  
  7.                        <name>dfs.client.block.write.replace-datanode-on-failure.enable</nam  
  8. e>  
  9.                       <value>true</value>  
  10.                </property>  
  11.             



6:
Java代码    收藏代码
  1. dfs.client.block.write.replace-datanode-on-failure.enable=true  
  2. 在进行pipeline写数据(上传数据的方式)时,如果DN或者磁盘故障,客户端将尝试移除失败的DN,然后写到剩下的磁盘。一个结果是,pipeline中的DN减少了。这个特性是添加新的DN到pipeline。这是一个站点范围的选项。当集群规模非常小时,例如3个或者更小,集群管理者可能想要禁止掉此特性。  
  3.   
  4.  dfs.client.block.write.replace-datanode-on-failure.policy=DEFAULT  
  5. 此属性仅在dfs.client.block.write.replace-datanode-on-failure.enable设置为true时有效。  
  6.       ALWAYS: 总是添加新的DN  
  7.       NEVER: 从不添加新的DN  
  8.       DEFAULT: 设r是副本数,n是要写的DN数。在r>=3并且floor(r/2)>=n或者r>n(前提是文件是hflushed/appended)时添加新的DN。


原创:http://crazymatrix.iteye.com/blog/2228496

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值