目录
1.2.因为每天的数据不少于300M,所以我们要用循坏语句生成当天指定量的数据,并将数据储存到指定路径的json文件中,如果文件大于一百兆则重新生成新的文件储存
1.3.因为当天的数据不需要间隔生成,所以休眠时间设置为0秒
1.4.因为生成20条重复数据需要一模一样的,所以不能随机生成,所以先生成一个车辆类,就不需要在随机生成了,然后跟上面一点一样,如果文件大于一百兆就生成新的文件来储存。
1.5.因为要间隔两秒才生成一条数据,所以休眠时间设置为两秒
1.上传数据文件(注意需要给windows的用户开启hdfs文件创建权限,否则会出现报错)
前言
本文主要介绍了用Java编写程序生成数据然后将数据保存到文件再将文件上传到Hadoop的基础内容。
一、java是什么?
Java 是一个通用术语,用于表示 Java 软件及其组件,Java具有大部分编程语言所共有的一些特征,被特意设计用于互联网的分布式环境。Java具有类似于C++语言的形式和感觉,但它要比C++语言更易于使用,而且在编程时彻底采用了一种以对象为导向的方式。
二、编写程序
1.随机生成当天的数据
1.1 用timestr来储存当天的时间
public static void main(String[] args) throws ParseException {
LocalDate localdate = LocalDate.now();
DateTimeFormatter dtformatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
String timestr = localdate.format(dtformatter);
1.2.因为每天的数据不少于300M,所以我们要用循坏语句生成当天指定量的数据,并将数据储存到指定路径的json文件中,如果文件大于一百兆则重新生成新的文件储存
for (int i =0;i<=1200000;i++){ //指定生成当天数据的数量
Car car1 = getcar();
if (file.length()>100*1024*1024){
++l;
file = new File("D:\\Hadoop\\20210322087\\jsons\\can_data\\"+timestr+"\\"+timestr+".json."+l);
writer = new FileWriter(file,true);
}
1.3.因为当天的数据不需要间隔生成,所以休眠时间
设置为0秒
try {
Thread.sleep(0);
writer.write(car1 + "\n");
writer.flush();
} catch (IOException e){
e.printStackTrace();
} catch (InterruptedException e1) {
throw new RuntimeException(e1);
}
1.4.因为生成20条重复数据需要一模一样的,所以不能随机生成,所以先生成一个车辆类,就不需要在随机生成了,然后跟上面一点一样,如果文件大于一百兆就生成新的文件来储存。
Car car_repeat = getcar();
for (int j = 0;j<=20;j++){ //指定生成重复数据的数量
if (file.length()>100*1024*1024){
++l;
file = new File("D:\\Hadoop\\20210322087\jsons\\can_data\\"+timestr+"\\"+timestr+".json."+l);
writer = new FileWriter(file,true);
}
1.5.因为要间隔两秒才生成一条数据,所以休眠时间设置为两秒
try {
LocalDateTime date = LocalDateTime.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
car_repeat.setDate(date.format(formatter));
Thread.sleep(2*1000); //每隔两秒生成一个重复数据
writer.write(car_repeat+"\n");
writer.flush();
}catch (IOException | InterruptedException e){
e.printStackTrace();
}
三、上传文件
1.上传数据文件(注意需要给windows的用户开启hdfs文件创建权限,否则会出现报错)
package Object;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
import java.io.File;
import java.io.FileInputStream;
import java.net.URI;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
public class Data_put {
public static void main(String[] args) throws Exception {
Configuration conf = new Configuration();
conf.set("fs.defaultFS","hdfs://master:9010");
// ------------------------------------------------------------------------------------
LocalDate date = LocalDate.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
String timestr = date.format(formatter);
File file = new File("D:\\Hadoop_homework\\20210322061_IDEA\\jsons\\can_data\\"+timestr);
File[] arr = file.listFiles();
for (int l =1;l<= arr.length;l++){
String origin = ("D:\\Hadoop_homework\\20210322061_IDEA\\jsons\\can_data\\"+timestr+"\\"+timestr+".json."+l);
String dest = ("hdfs://master:9010/can_data/"+timestr+"/"+timestr+".json."+l);
FileSystem fs = FileSystem.get(URI.create(dest),conf);
//创建一个输出流
FSDataOutputStream out = fs.create(new Path(dest));
//从本地读取文件
FileInputStream fileInputStream = new FileInputStream(origin);
IOUtils.copyBytes(fileInputStream,out,conf);
System.out.println("第"+l+"个json文件上传成功");
}
System.out.println("上传完毕");
}
}
2.在HDFS中查看文件是否存在
总结
本次利用java代码生成间隔两秒的数据,是java中基础的操作。熟练并灵活地使用java,可以让大数据学生们很好地提升自己的java能力。