0
点赞
收藏
分享

微信扫一扫

下载气象数据并自动解压整合

微言记 2022-11-21 阅读 154


首先hadoop权威指南书中的气象数据的地址为:ftp://ftp.ncdc.noaa.gov/pub/data/gsod/YEAR/gsod_YEAR.tar

其中YEAR是年份,从1901年到1928年的数据里面都是空的,不用下载了。

使用java程序进行下载:

开始用了多线程下载---然后第四个线程启动的时候就爆了,显示 超过最大connection数(530) ,可能是全球一起超过的吧....

然后将多线程改成了单线程,有时下载10左右就不动了,感觉是网络问题,毕竟那个网站进去就很慢。

java下载代码:

package file;

import javax.swing.plaf.SliderUI;

public class Main {

public static void main(String[] args) throws Exception{

FileThread file = new FileThread();
for (int i=1929;i<=2000;i++){

// new FileThread(new Integer(i).toString()).start();
file.setYear(new Integer(i).toString());
file.run();

}
}
}

package file;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;

public class FileThread extends Thread{

String year;

public FileThread(){}
public FileThread(String year){
this.year = year;
}

public void setYear(String year){
this.year = year;
}

@Override
public void run() {

InputStream input = null;
FileOutputStream output = null;

try {
URL url = new URL("ftp://ftp.ncdc.noaa.gov/pub/data/gsod/"+year+"/gsod_"+year+".tar");
input = url.openStream();

output = new FileOutputStream(new File("F:/gsod/gsod_"+year+".tar"));
int ls = 0;
byte b[] = new byte[204800];

while ((ls = input.read(b, 0, 204800))> -1){
output.write(b, 0, ls);
output.flush();
}
output.flush();

} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
try {
if (output!=null)
output.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
if (input!=null)
input.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}

下载气象数据并自动解压整合_java


​​点击下载文件链接​​

然后需要解压,合并,写了一个shell脚本:

#!/bin/bash
read x
read y
read filename
for ((i=x;i<=y;i++))
do
tar -xvf *${i}.tar
gzip -d *.op.gz
cat *.op >> ${filename}
rm -f *.op
done

下载气象数据并自动解压整合_java_02


下载气象数据并自动解压整合_i++_03




举报

相关推荐

0 条评论