1.数据生产
在实际生产中,这个环节并不会让你来做,更不会来模拟生产数据,但是这里是为了项目运行,也是为了让你连接每个环节
2.项目创建
在IDEA中先创建一个Java项目ct,然后在该项目中建立各个Module模块进行编写,这样比较清晰,比如这里的生产数据模块就可以建立一个ct_producer的Maven模块

由于生产数据模块不是重点,只是作为实际生产环境中的一部分,所以这里不做过多说明,直接放出源码,可以直接创建项目复制该代码运行测试即可
package producer; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; import java.text.DecimalFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util./; public class ProductLog { private String startTime = “2017-01-01”; private String endTime = “2017-12-31”; //生产数据 //用于存放待随机的电话号码 private List phoneList = new ArrayList(); private Map<String, String> phoneNameMap = new HashMap<String, String>(); public void initPhone() { phoneList.add(“17078388295”); phoneList.add(“13980337439”); phoneList.add(“14575535933”); phoneList.add(“19902496992”); phoneList.add(“18549641558”); phoneList.add(“17005930322”); phoneList.add(“18468618874”); phoneList.add(“18576581848”); phoneList.add(“15978226424”); phoneList.add(“15542823911”); phoneList.add(“17526304161”); phoneList.add(“15422018558”); phoneList.add(“17269452013”); phoneList.add(“17764278604”); phoneList.add(“15711910344”); phoneList.add(“15714728273”); phoneList.add(“16061028454”); phoneList.add(“16264433631”); phoneList.add(“17601615878”); phoneList.add(“15897468949”); phoneNameMap.put(“17078388295”, “李雁”); phoneNameMap.put(“13980337439”, “卫艺”); phoneNameMap.put(“14575535933”, “仰莉”); phoneNameMap.put(“19902496992”, “陶欣悦”); phoneNameMap.put(“18549641558”, “施梅梅”); phoneNameMap.put(“17005930322”, “金虹霖”); phoneNameMap.put(“18468618874”, “魏明艳”); phoneNameMap.put(“18576581848”, “华贞”); phoneNameMap.put(“15978226424”, “华啟倩”); phoneNameMap.put(“15542823911”, “仲采绿”); phoneNameMap.put(“17526304161”, “卫丹”); phoneNameMap.put(“15422018558”, “戚丽红”); phoneNameMap.put(“17269452013”, “何翠柔”); phoneNameMap.put(“17764278604”, “钱溶艳”); phoneNameMap.put(“15711910344”, “钱琳”); phoneNameMap.put(“15714728273”, “缪静欣”); phoneNameMap.put(“16061028454”, “焦秋菊”); phoneNameMap.put(“16264433631”, “吕访琴”); phoneNameMap.put(“17601615878”, “沈丹”); phoneNameMap.put(“15897468949”, “褚美丽”); } ///* /* 形式:15837312345,13737312345,2017-01-09 08:09:10,0360 // public String product() { String caller = null; String callee = null; String callerName = null; String calleeName = null; //取得主叫电话号码 int callerIndex = (int) (Math.random() / phoneList.size()); caller = phoneList.get(callerIndex); callerName = phoneNameMap.get(caller); while (true) { //取得被叫电话号码 int calleeIndex = (int) (Math.random() /* phoneList.size()); callee = phoneList.get(calleeIndex); calleeName = phoneNameMap.get(callee); if (!caller.equals(callee)) break; } String buildTime = randomBuildTime(startTime, endTime); //0000 DecimalFormat df = new DecimalFormat(“0000”); String duration = df.format((int) (30 /* 60 /* Math.random())); StringBuilder sb = new StringBuilder(); return caller + “,” + “,” + callee + “,” + “,” + buildTime + “,” + duration; } /// /* 根据传入的时间区间,在此范围内随机通话建立的时间 /* startTimeTS + (endTimeTs - startTimeTs) /* Math.random(); /* /* @param startTime /* @param endTime // public String randomBuildTime(String startTime, String endTime) { SimpleDateFormat sdf1 = new SimpleDateFormat(“yyyy-MM-dd”); Date startDate = null; try { startDate = sdf1.parse(startTime); } catch (ParseException e) { e.printStackTrace(); } Date endDate = null; try { endDate = sdf1.parse(endTime); } catch (ParseException e) { e.printStackTrace(); } if (endDate.getTime() <= startDate.getTime()) return null; long randomTS = startDate.getTime() + (long) ((endDate.getTime() - startDate.getTime()) / Math.random()); Date resultDate = new Date(randomTS); SimpleDateFormat sdf2 = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”); String resultTimeString = sdf2.format(resultDate); return resultTimeString; } /// /* 将数据写入到文件中 /*/ public void writeLog(String filePath) { try { OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(filePath), “UTF-8”); while (true) { Thread.sleep(10); String log = product(); System.out.println(log); osw.write(log + “\n”); //一定要手动flush才可以确保每条数据都写入到文件一次 osw.flush(); } } catch (IOException e) { e.printStackTrace(); } catch (InterruptedException e2) { e2.printStackTrace(); } } public static void main(String[] args) { ProductLog log = new ProductLog(); log.initPhone(); log.writeLog(args[0]); } }
3.运行测试
使用Maven打包该程序,然后将jar包上传到集群机器上,使用下面命令运行该程序
java -cp ct_producer-1.0-SNAPSHOT.jar producer.ProductLog /opt/package/log.csv
这样就可以看到运行效果了
在命令最后加上&还可以在后台运行该程序
最后修改于 2018-11-29

本作品采用
知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。