- 浏览: 1064562 次
- 性别:
- 来自: 长沙
文章分类
- 全部博客 (639)
- 服务器配置篇 (58)
- hibernate篇 (14)
- spring篇 (33)
- struts篇 (28)
- JS篇 (46)
- 其他技术篇 (46)
- 数据库集群配置 (6)
- JAVA基础相关 (48)
- 分布式框架HadHoop的应用 (2)
- FLEX篇 (8)
- SQLSERVER技术 (32)
- Android学习 (13)
- amchart学习笔记 (1)
- openfire+smark搭建即时通讯 (9)
- Linux学习 (18)
- Oracle数据库 (15)
- 网站优化技术 (12)
- mysql数据库 (2)
- 项目学习总结 (18)
- 工具类(JAVA) (12)
- 工具类(JS) (2)
- 设计模式 (10)
- Lucene学习 (24)
- EJB3学习 (6)
- Sphinx搜索引擎 (3)
- 工作中用到的软件小工具 (5)
- .NET (49)
- JAVA 连接SQLSERVER2008步骤 (1)
- MongoDB (19)
- Android手机开发 (3)
- Maven (6)
- vue (9)
- Shiro (4)
- mybatis (3)
- netty框架 (1)
- SpringCloud (3)
- spring-cloud (7)
- Git (1)
- dubbo (2)
- springboot (13)
- rocketmq (1)
- git学习 (2)
- kafka服务器 (2)
- linux (10)
- WEB系统辅助项目 (1)
- jenkins (2)
- docker (4)
- influxdb (3)
- python (2)
- nginx (1)
最新评论
-
jiangfuofu555:
这样数据量大,效率怎么样?
sqlserver 实现分页的前台代码 以及后台的sqlserver语句 -
w156445045:
博主请问下,如何做到实时的刷新呢,
另外我后台是Java 谢谢 ...
web 版本的汽车仪表盘,非常好看。还有各种图形 -
jackyin5918:
<transportConnector name=&qu ...
ActiveMQ的activemq.xml详细配置讲解 -
握着橄榄枝的人:
你这个不是spring1.x的吧
spring1.x使用AOP实例 -
xiaophai:
全乱套了!
openfire+spark搭建完美的及时通讯
/**
* 大数据排序合并
*
* @param args
*/
public static void main(String[] args) throws IOException {
// 写入文件的路径
String filePath = "D:\\456";
// 切分文件的路径
String sqlitFilePath = "D:\\456\\123";
//数据的个数
int CountNumbers=10000000;
//子文件的个数
int CountFile=10;
//精度
int countAccuracy=30*CountFile;
long startNumber=System.currentTimeMillis();
// 写入大数据文件
WriteData(filePath,CountNumbers);
System.out.println("存储完毕");
// 将大数据文件切分到另外的十个小文件中
sqlitFileDate(filePath, sqlitFilePath,CountFile);
System.out.println("文件切割完毕!");
// 把每个文件的数据进行排序
singleFileDataSort(sqlitFilePath,CountFile);
System.out.println("每个子文件排序完毕!");
//精度调整,十个文件数据进行比较整合
deathDataFile(filePath,sqlitFilePath,countAccuracy,CountFile);
System.out.println("整合完毕");
long stopNumber=System.currentTimeMillis();
System.out.println("耗时"+(stopNumber-startNumber)/1000+"毫秒");
}
// 写入大数据文件
public static void WriteData(String path,int CountNumbers) throws IOException {
path = path + "\\12114.txt";
FileWriter fs = new FileWriter(path);
BufferedWriter fw=new BufferedWriter(fs);
for (int i = 0; i < CountNumbers; i++) {
fw.write(new Random().nextInt(Integer.MAX_VALUE) + "\r\n");
}
fw.close();
fs.close();
}
// 将大数据文件切分到另外的十个小文件中
public static void sqlitFileDate(String filepath, String sqlitPath,
int CountFile) throws IOException {
FileWriter fs = null;
BufferedWriter fw=null;
FileReader fr = new FileReader(filepath + "\\12114.txt");
BufferedReader br = new BufferedReader(fr); // 读取获取整行数据
int i = 1;
LinkedList WriterLists=new LinkedList(); //初始化文件流对象集合
LinkedList fwLists=new LinkedList();
for (int j = 1; j <= CountFile; j++) {
//声明对象
fs = new FileWriter(sqlitPath + "\\12" + j + ".txt",false);
fw=new BufferedWriter(fs);
//将对象装入集合
WriterLists.add(fs);
fwLists.add(fw);
}
//判断是文件流中是否还有数据返回
while (br.ready()) {
int count=1;//初始化第一文件流
for (Iterator iterator = fwLists.iterator(); iterator.hasNext();) {
BufferedWriter type = (BufferedWriter) iterator.next();
if(i==count)//判断轮到第几个文件流写入数据了
{
//写入数据,跳出,进行下一个文件流,下一个数据的写入
type.write(br.readLine() + "\r\n");
break;
}
count++;
}
//判断是否到了最后一个文件流了
if (i >= CountFile) {
i = 1;
} else
i++;
}
br.close();
fr.close();
for (Iterator iterator = fwLists.iterator(); iterator.hasNext();) {
BufferedWriter object = (BufferedWriter) iterator.next();
object.close();
}
//遍历关闭所有子文件流
for (Iterator iterator = WriterLists.iterator(); iterator.hasNext();) {
FileWriter object = (FileWriter) iterator.next();
object.close();
}
}
// 把每个文件的数据进行排序
public static void singleFileDataSort(String path1,int CountFile) throws IOException {
LinkedList nums = null;
for (int i = 1; i <= CountFile; i++) {
nums = new LinkedList();
String path = path1 + "\\12" + i + ".txt";
try {
FileReader fr = new FileReader(path);
BufferedReader br = new BufferedReader(fr);
while (br.ready()) {
// 将读取的单个数据加入到集合里面
nums.add(Integer.parseInt(br.readLine()));
}
// 对集合进行排序
Collections.sort(nums);
// 将排序好的数据写入源文件
numberSort(nums, path);
br.close();
fr.close();
} catch (NumberFormatException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
// 对每个文件数据进行排序,再写入源文件
public static void numberSort(LinkedList list, String path) {
try {
FileWriter fs = new FileWriter(path);
BufferedWriter fw=new BufferedWriter(fs);
for (Iterator iterator = list.iterator(); iterator.hasNext();) {
Object object = (Object) iterator.next();
fw.write(object + "\r\n");
}
fw.close();
fs.close();
} catch (IOException e) {
e.printStackTrace();
}
}
// 文件数据最终整合(精度调整)
public static void deathDataFile(String filepath, String sqlitFilePath1,
int countAccuracy, int CountFile) throws IOException {
LinkedList nums = new LinkedList(); //添加数据,进行排序
Object temp = null; // 记录每次排序剩下的最后一个数字
boolean ispass = false;
LinkedList ispasses = null; //记录数据文件的状态信息
FileWriter fs = new FileWriter(filepath + "\\Sort.txt", false); //创建文件流,以便整合的数据写入
BufferedWriter bw=new BufferedWriter(fs);
FileReader fr = null; //声明读取文件流
BufferedReader br = null; //声明BufferedReader
LinkedList WriterLists = new LinkedList(); // 初始化文件流对象集合
LinkedList WriterListFile = new LinkedList();
for (int j = 1; j <= CountFile; j++) {
// 声明对象,开启所有子文件流访问所有子文件的数据
fr = new FileReader(sqlitFilePath1 + "\\12" + j + ".txt");
//开启所有BufferedReader,方便下次的整行的读取
br = new BufferedReader(fr);
// 将所有 FileReader对象装入集合
WriterListFile.add(fr);
// 将所有 BufferedReader对象装入集合
WriterLists.add(br);
}
for (;;) {
// 将十个源文件的是否有数据情况存入集合,以方便后面做判断
ispasses = new LinkedList();
// 分别读取十个源文件的单个数据
for (Iterator iterator = WriterLists.iterator(); iterator.hasNext();) {
BufferedReader object = (BufferedReader) iterator.next();
Object obj = null;
while (object.ready()) {
//添加所有文件流的每次的数据
nums.add(Integer.parseInt(object.readLine().toString()));
break;
}
if (object.ready() == false)
ispasses.add("true"); //将各文件中的数据状态存入集合中
}
// 决断是否是第一次进来
if (nums.size() % countAccuracy == 0 && ispass == false) {
// 对集合进行排序
Collections.sort(nums);
// 接收最大的数据,其它的数据写入总排序文件
temp = numberSortData(nums, filepath, false, countAccuracy, bw);
//重新初始化集合
nums = new LinkedList();
// 添加上一组比较剩下的数据
nums.add(temp);
ispass = true;
// 记录源文件的数据数量,以便下次的遍历
continue;
}
if (ispass) {
if (nums.size() % countAccuracy == 1 && nums.size() > 1) {
// 对集合进行排序
Collections.sort(nums);
// 接收最大的数据,其它的数据写入总排序文件
temp = numberSortData(nums, filepath, true, countAccuracy,
bw);
nums = new LinkedList();
nums.add(temp);
continue;
}
}
// 记录下一组数据的位置
// 判断是不是十个文件都没有数据
if (ispasses.size() == CountFile) {
Collections.sort(nums);
temp = numberSortData(nums, filepath, true, countAccuracy, bw);
nums = new LinkedList();
break;
}
}
bw.close();
//关闭写入流
fs.close();
//关闭所有的BufferedReader
for (Iterator iterator = WriterLists.iterator(); iterator.hasNext();) {
BufferedReader object2 = (BufferedReader) iterator.next();
object2.close();
}
//关闭所有的FileReader
for (Iterator iterator = WriterListFile.iterator(); iterator.hasNext();) {
FileReader object = (FileReader) iterator.next();
object.close();
}
}
// 对数据进行排序,写入最终文件中(精度调整)
public static Object numberSortData(LinkedList list, String filePath,
boolean ispass, int countAccuracy,BufferedWriter fs) {
Object temp = 0; //记录最后一个值
int tempCount = 0; //记录写入的数据位置
try {
for (Iterator iterator = list.iterator(); iterator.hasNext();) {
Object object = (Object) iterator.next();
// 判断是否是最后一个数
if (tempCount == list.size() - 1) {
// 判断集合里面不足一百個數了
if (list.size() < countAccuracy + 1 && ispass) {
temp = null;
} else {
temp = object;
break;
}
}
// 写入数据源
fs.write(object + "\r\n");
// 记录数据的下标
tempCount++;
}
} catch (IOException e) {
e.printStackTrace();
}
return temp;
}
发表评论
-
JVM调优总结
2019-07-10 17:14 366https://www.cnblogs.com/andy-zh ... -
JAVA RESULTSET 使用详解
2012-03-20 21:01 3150调用ResultSet中的last()方法时,提示: java ... -
JAVA采用JDBC执行批处理操作注意的问题
2012-03-20 20:50 1970让我们看看如何使用JDBC API在Java中执行批量插入。虽 ... -
java 各种加密算法详细比较
2012-03-15 11:07 2288本篇内容简要介绍BASE64、MD5、SHA、HMAC几种加密 ... -
JAVA 连接池,方便在平时使用
2012-02-21 15:03 1026java连接池使用 -
Java动态代理实现
2012-02-28 09:19 994Java动态代理实现 在目前的Java开发包中包含 ... -
Java Socket实战之五 使用加密协议传输对象
2012-02-16 13:49 1119本文地址:http://blog.csdn.net/kongx ... -
Java Socket实战之四 传输压缩对象
2012-02-16 13:48 1006转载:http://blog.csdn.net/kongxx/ ... -
Java Socket实战之三 传输对象
2012-02-16 13:48 674转载:http://blog.csdn.net/kongxx/ ... -
Java Socket实战之二 多线程通信
2012-02-16 13:47 1144本文地址:http://blog.csdn.net/kongx ... -
Java Socket实战之一 单线程通信
2012-02-16 13:46 1017转载:http://blog.csdn.net/kongx ... -
java5 新增线程池的使用
2012-02-09 09:26 1150package net.itdos.concurrent; ... -
P2P之UDP穿透NAT的原理与实现
2012-01-11 11:03 1246关键词: P2P UDP NAT 原理 穿透 Traveral ... -
火车票网上订票软件
2012-01-11 09:05 1905JAVA程序GOHOME自动抢票成功!非常棒~~~不多说,直接 ... -
java tcp/ip 通讯服务端和客户端
2011-12-15 08:20 1346java tcp/ip 通讯服务端和客户端 -
java 读取服务器上的某个文件,并解决UTF-8 BOM文件的问号问题
2011-11-28 15:16 1418JAVA读取UTF-8 BOM文件的时候会在文件头产生一个?号 ... -
JAVA 多线程学习笔记
2011-10-12 09:03 1059JAVA 多线程学习笔记 -
XBlink 1.0.0版发布,更轻、更快、更好用
2011-10-09 14:47 1308XBlink 1.0.0版发布,更轻、更快、更好用。 ... -
db4o 文件整理(收缩)
2011-09-29 22:26 1468一直都不敢大胆使用db4o,不是因为它不好用,不稳定,而 ... -
网站应用通过139邮箱发送短信做到日志提醒功能
2011-09-15 09:36 1814首先在139注册一个邮箱,然后再邮箱设置中设置收到邮件通过短信 ...
相关推荐
这个实例主要用于处理大量数据,例如进行大数据排序,它包括四个主要步骤:写入大文件、文件分割、单文件排序和数据整合。 1. **写入大文件**: 在`WriteData`方法中,我们创建了一个名为`12114.txt`的大文件,并...
总之,“Hadoop示例程序合并文件”揭示了Hadoop如何利用分布式计算和存储能力来解决大数据的挑战。理解这一过程对于开发者和数据工程师来说至关重要,因为它展示了如何在Hadoop环境中有效地管理和处理大规模数据。
3. 合并:最后,使用归并算法将所有排序好的块合并成一个有序的大文件。归并过程中,我们逐个读取各块的顶部元素,比较它们的大小,选择最小的一个写入结果文件,并移除该元素。这个过程重复,直到所有块都处理完毕...
通常,Java代码会定义一个类,包含分割文件、对子文件排序以及合并文件的方法。这些方法可能会使用到文件I/O操作,如`java.io`包中的`FileInputStream`、`FileOutputStream`和`BufferedReader`、`BufferedWriter`等...
数据先存入内存缓冲区,超过阈值时触发spill,先进行排序(分区+key),然后可能运行combiner进行初步聚合,最后将所有spill文件合并为一个文件。 - Reduce端的Shuffle:Reducer首先复制Map端对应分区的数据,然后...
Java大数据开发面试题涵盖了许多关键知识点,主要集中在Java编程、大数据技术栈(Hadoop、Spark)、分布式计算和数据处理上。以下是对这些知识点的详细解释: 1. Kafka 消息结构: Kafka的消息由header和body两部分...
### 大数据面试题知识点详解 #### 一、HDFS数据存储组件理解 - **问题**: 下面哪个程序负责HDFS数据存储? - **选项**: - a) NameNode - b) Jobtracker - c) Datanode - d) secondaryNameNode - e) ...
"切分大的文件以及合并切分的文件2" 这个项目提供了一种解决方案,它包含了一个名为 `SplitAndCombine` 的Java类及其相关的内部类,用于将大文件分割成小块,并在需要时将这些小块重新组合成原始文件。以下是对这个...
- 流数据访问:适合读取大文件,不适合频繁的写入操作。 - 大数据集:适用于存储和处理TB到PB级别的数据。 - **工作原理**: - **NameNode**:主节点,存储元数据(文件系统目录结构、文件与数据块的映射等)。 ...
- **知识点**: 在Map任务全部结束之前,产生的多个溢写文件会在最终被合并成一个大的文件,然后传输给Reduce任务进行处理。 28. **Map任务的缓存** - **知识点**: 每个Map任务都会被分配一个缓存区,Map的输出...
- **namespaceID**:文件系统的唯一标识符,在文件系统初始化时生成。 - **cTime**:通常设置为0。 - **storageType**:指示该文件夹保存的是元数据节点的数据结构。 **1.2.2 文件系统命名空间映像文件及修改日志**...
- **文件系统**:HDFS 是一个高度容错性的文件系统,适合一次写入多次读取的场景。 - **NameNode 元数据存储策略**:NameNode 的元数据存储在内存中,定期会将元数据信息持久化到磁盘。 - **DataNode**:DataNode...
在Java中实现外部排序,可以利用Java IO流进行文件操作,例如使用`BufferedReader`读取文件,`PrintWriter`写入文件,以及`FileInputStream`和`FileOutputStream`进行低级I/O操作。同时,Java的`PriorityQueue`数据...
这个文件被HDFS分割成多个块,并分布在集群的不同节点上。MapReduce的工作流程分为两个主要阶段:Map阶段和Reduce阶段。 1. **Map阶段**: 在Map阶段,Hadoop将输入文件分块并分配到各个节点上的Mapper任务。...
- **辅助NameNode**:定期合并fsimage文件和editlogs文件,减少NameNode的重启时间。 - **备份fsimage文件**:为NameNode提供故障恢复的能力。 #### 十二、HDFS环境的搭建步骤 1. **安装Java**:Hadoop依赖于Java...
- 中间结果通过网络传输到Reducer任务,Reducer先对数据进行排序和合并,然后调用Reducer函数进行处理。 - 最后,Reducer使用OutputFormat将处理结果写入输出文件。 **Hadoop的应用实例**: 这里提到的是一个简单...
5. 输出结果:经过Map和Reduce处理后的结果会被写入到输出文件中。 在上述过程中,Hadoop MapReduce提供了丰富的API供用户使用。例如,用户可以利用Hadoop Streaming通过标准输入输出接口编写非Java Map/Reduce程序...