Hadoop HDFS中的数据保留

时间:2015-06-23 18:49:45

标签: hadoop hdfs

我们有一个Hadoop集群,HDFS中的数据超过100TB。我想在某些Hive表中删除超过13周的数据。

我有什么工具或方法可以达到这个目的吗?

谢谢

1 个答案:

答案 0 :(得分:4)

要删除早于某个时间范围的数据,您有几个选项。

首先,如果Hive表按日期分区,您可以简单地在Hive中删除分区并删除它们的基础目录。

第二个选项是将INSERT运行到新表,使用日期戳(如果可用)过滤掉旧数据。这可能不是一个好的选择,因为你有100TB的数据。

第三种选择是以递归方式列出Hive表的数据目录。 public void adsf() { ArrayList<String> characters = new ArrayList<String>(); characters.addAll(spreadToCharacters(getWord(getActualNumber()))); Button [] but = new Button[26]; but[0] = (Button) findViewById(R.id.b1); but[1] = (Button) findViewById(R.id.b2); but[2] = (Button) findViewById(R.id.b3); but[3] = (Button) findViewById(R.id.b4); but[4] = (Button) findViewById(R.id.b5); but[5] = (Button) findViewById(R.id.b6); but[6] = (Button) findViewById(R.id.b7); but[7] = (Button) findViewById(R.id.b8); but[8] = (Button) findViewById(R.id.b9); but[9] = (Button) findViewById(R.id.b10); but[10] = (Button) findViewById(R.id.b11); but[11] = (Button) findViewById(R.id.b12); but[12] = (Button) findViewById(R.id.b13); but[13] = (Button) findViewById(R.id.b14); but[14] = (Button) findViewById(R.id.b15); but[15] = (Button) findViewById(R.id.b16); but[16] = (Button) findViewById(R.id.b17); but[17] = (Button) findViewById(R.id.b18); but[18] = (Button) findViewById(R.id.b19); but[19] = (Button) findViewById(R.id.b20); but[20] = (Button) findViewById(R.id.b21); but[21] = (Button) findViewById(R.id.b22); but[22] = (Button) findViewById(R.id.b23); but[23] = (Button) findViewById(R.id.b24); but[24] = (Button) findViewById(R.id.b25); but[25] = (Button) findViewById(R.id.b26); int[] buttonNumbers = new int[characters.size()]; int j = 0; for(int i = 0; i<but.length; i++) { for(int o = 0; o < characters.size(); o++) { if(but[i].getText().equals(characters.get(o))) { for(int z = 0; z < buttonNumbers.length; z++) { if(i != buttonNumbers[z]) { buttonNumbers[j] = i; j++; } } } } } } 。这将输出文件列表及其创建日期。您可以获取此输出,提取日期并与要保留的时间范围进行比较。如果文件较旧,则要保留,请在其上运行hadoop fs -lsr /path/to/hive/table

第四个选项是获取FSImage的副本:hadoop fs -rm <file>接下来将其转换为文本文件。 curl --silent "http://<active namenode>:50070/getimage?getimage=1&txid=latest" -o hdfs.image。文本文件将包含HDFS的文本表示,与hadoop oiv -i hdfs.image -o hdfs.txt返回的内容相同。