大数据实验两个文件分别是有序的数,上传到HDFS读出来排序,写回到HDFS 的新的文件

小编 2026-06-20 阅读:1472 评论:0
import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FSDataInputStream; import or...
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;

import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;


import java.io.BufferedReader;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URI;

public class Demo {
	static int[] array = new int[80];
	static int[] array2 = new int[40];
	static int[] array3 = new int[88];
	public static int[] mergeSortedArray(int[] A, int[] B) {
        // Write your code here
        if(A.length==0)
			return B;
		if(B.length==0)
			return A;
		int []C=new int[A.length+B.length];
		int i=0;//A
		int j=0;//B
		int k=0;//C
		while(i<A.length&&j<B.length){
			if(A[i]>B[j]){
				C[k++]=B[j++];
			}else{
				C[k++]=A[i++];
			}
		}
		while(i<A.length){
			C[k++]=A[i++];
		}
		while(j<B.length){
			C[k++]=B[j++];
		}
		return C;
 
    }

 
	public static void main(String[] args) {
		try {
			String filename = \"hdfs://localhost:9000/input/3.txt\";
			String filename2 = \"hdfs://localhost:9000/input/4.txt\";
			Configuration conf = new Configuration();
			FileSystem fs = FileSystem.get(conf);
			FileSystem fs2 = FileSystem.get(conf);
			if (fs.exists(new Path(filename))&&fs2.exists(new Path(filename2))) {
				System.out.println(\"文件存在\");
				 try {
					 Path filePath=new Path(filename);
					 Path filePath2=new Path(filename2);
					 	
					 fs=FileSystem.get(URI.create(filename),conf);
					 fs2=FileSystem.get(URI.create(filename2),conf);	
					 if(fs.exists(filePath)){ 
						 String charset=\"UTF-8\"; 
						 //打开文件数据输入流 
						 FSDataInputStream fsDataInputStream=fs.open(filePath); 
						 //创建文件输入 
						 InputStreamReader inputStreamReader=new InputStreamReader(fsDataInputStream,charset);
						 String line=null; 
						 //把数据读入到缓冲区中
						 BufferedReader reader=null;
						 reader=new BufferedReader(inputStreamReader); 
						 //从缓冲区中读取数据 
						 while((line=reader.readLine())!=null)
						 {
							 System.out.println(\"line=\"+line); 
							 String [] arr = line.split(\"\\\\s+\");
							 
							 int[] intarr = new int[arr.length];
							 for (int i = 0; i < arr.length; i++) 
							 { 
								 intarr[i] = Integer.parseInt(arr[i]);
							 //substring是找出包含起始位置,不包含结束位置,到结束位置的前一位的子串 } 
							 	//输出数组arr
							 		System.out.print(intarr[i]+\" \");
							 }	
							 array=intarr;
						 
						 } 				 
					 } 
					 if(fs2.exists(filePath2)){  
						 String charset=\"UTF-8\"; 
						 //打开文件数据输入流 
						 FSDataInputStream fsDataInputStream=fs.open(filePath2); 
						 //创建文件输入 
						 InputStreamReader inputStreamReader=new InputStreamReader(fsDataInputStream,charset);
						 String line=null; 
						 //把数据读入到缓冲区中
						 BufferedReader reader=null;
						 reader=new BufferedReader(inputStreamReader); 
						 //从缓冲区中读取数据 
						 while((line=reader.readLine())!=null)
						 {
							 System.out.println(\"line=\"+line); 
							 String [] arr2 = line.split(\"\\\\s+\");
							 int[] intarr2 = new int[arr2.length];
							 for (int i = 0; i < arr2.length; i++) 
							 { 
								 intarr2[i] = Integer.parseInt(arr2[i]);
							 //substring是找出包含起始位置,不包含结束位置,到结束位置的前一位的子串 } 
							 	//输出数组
							 		System.out.print(intarr2[i]+\" \");
							 }
							 array2=intarr2;
							/* for(String ss : arr2){
								    System.out.println(ss);
								}*/
							 /*int[] arr2= {12};
							 for(int i=0;i<arr.length;i++){
							     arr2[i]=Integer.parseInt(arr[i]);
							     System.out.println(arr2[i]);
							 }*/
							 
						 } 		
						 
					 } 
		
			
				//合并并且排序
				array3 =mergeSortedArray(array,array2);
			
				//生成5.txt
				File file = new File(\"/home/hadoop/5.txt\");
				FileWriter out = new FileWriter(file);
				for(int i=0;i<array3.length;i++) {
					out.write(array3[i]+\"\\t\");
					System.out.println(array3[i]);
				}
				out.close();
				
				//上传文件
					 try{
						 Path localPath = new Path(\"/home/hadoop/5.txt\"); 
						 Path hdfsPath = new Path(\"hdfs://localhost:9000/input/5.txt\");
						 FileSystem hdfs = FileSystem.get(conf);
						 hdfs.copyFromLocalFile(localPath, hdfsPath);
					 }catch(Exception e){
						 e.printStackTrace(); 
						 } 
					 }
							 
				 catch (IOException e) 
				 { e.printStackTrace();
				 }
				
				 

			} else {
				System.out.println(\"文件不存在\");
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

//格式化文件,
//./bin/hadoop namenode -format
//启动 结束时要关比,不然数据节点不起动
//./sbin/start-dfs.sh
//创建文件夹input
//./bin/hadoop fs -mkdir /input
//查看文件夹input(是空的)
//./bin/hdfs dfs -ls /input
//上传文件到input
//./bin/hadoop fs -put  /home/hadoop/3.txt   /input
//./bin/hadoop fs -put  /home/hadoop/4.txt   /input
//运行这个java代码,生成5.txt

 

版权声明

本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。

热门文章
  • 机房智能化温湿度解决方式之POE供电以太网温湿度传感器

    机房智能化温湿度解决方式之POE供电以太网温湿度传感器
    机房智能化温湿度解决方式之POE供电以太网温湿度传感器 北京盈创力和电子科技有限公司 智能型TCP网口温湿度记录仪 北京IP网络温湿度记录仪厂家,北京盈创力和 北京智能型TCP网口温湿度记录仪IP网络温湿度记录仪是一种新型的基于TCP/IP协议双绞线以太网标准温湿度采集模块,利用它可以实现现场温度值、相对湿度值的采集,同时利用其自身的RJ45通信接口可以方便地和机房监控主机或交换机集线器进行联网。 工作于-40℃~85℃工业级带...
  • Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering

    Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering
    Problem Statement 我们考虑一个具有马尔可夫性质、非线性、非高斯的状态空间模型(State Space Model):对于一个时间序列上的观测结果{yt,t∈N}\\{ y_t , t \\in N \\}{yt​,t∈N},我们认为每个观测结果yty_tyt​的生成依赖于一个无法直接观察的隐变量xt∈{xt,t∈N}x_t \\in \\{x_t , t \\in N \\}xt​∈{xt​,t∈N},即:p(...
  • HTTP状态保持的原理

    HTTP状态保持的原理
    a)在用户登录之后,浏览器返回响应的时候会在响应中添加上cookieb)浏览器接收到cookie之后会自动保存c)当用户再次请求同一服务器中的其他网页的时候,浏览器会自动带上之前保存的cookied)服务接收到请求之后可以请 request 对象中取到cookie 判断当前用户是否登录  Http是无状态的,就是连接时数据互通,关闭后...
  • Hive 系统函数及示例

    Hive 系统函数及示例
    查看所有系统函数 show functions; 函数分类 内置函数【系统函数】 数学函数: floor、round、ceil、cos、log2等 字符串函数: length、reverse、trim、lower、get_json_object、repeat等 收集函数: size 转换函数: cast 日期函数: year、month、datediff、date、date_add等 条件函数: coalesce、case…w...
  • CSRF的原理和防范措施

    CSRF的原理和防范措施
    a)攻击原理:i.用户C访问正常网站A时进行登录,浏览器保存A的cookieii.用户C再访问攻击网站B,网站B上有某个隐藏的链接或者图片标签会自动请求网站A的URL地址,例如表单提交,传指定的参数iii.而攻击网站B在访问网站A的时候,浏览器会自动带上网站A的cookieiv.所以网站A在接收到请求之后可判断当前用户是登录状态,所以...
标签列表