我们有一个Hadoop集群,HDFS中的数据超过100TB。我想在某些Hive表中删除超过13周的数据。
我有什么工具或方法可以达到这个目的吗?
谢谢
答案 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
返回的内容相同。