hdfs的实验总结_HDFS文件读取实验

该代码示例展示了如何使用Hadoop API进行HDFS文件系统的读写操作。`myWrite`方法用于将字符串内容写入HDFS文件,而`myRead`方法读取并返回文件内容。此外,`merge`方法尝试对读取的内容进行排序,但排序逻辑似乎不完整。主要涉及的技术包括Hadoop配置、文件系统操作和基本的字符串处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

'''

#package org.hadoop.sort;

import java.io.BufferedReader;

import java.lang.Object;

import java.util.List;

//import java.util.Arrays;

import java.io.InputStreamReader;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.fs.FSDataInputStream;

import org.apache.hadoop.fs.FSDataOutputStream;

import org.apache.hadoop.fs.FileSystem;

import org.apache.hadoop.fs.Path;

public class HDFSfileifexist {

public static void myWrite(String content, String name){

try

{

Configuration conf=new Configuration();

conf.set("fs.defaultFS", "hdfs://localhost:9000");

conf.set("fs.hdfs.omp", "org.apache.hadoop.hdfs.DistributedFileSystem");

FileSystem fs=FileSystem.get(conf);

byte[] buff=content.getBytes();

String filename=name;

FSDataOutputStream os=fs.create(new Path(filename));

os.write(buff,0,buff.length);

System.out.println("Creat:"+filename);

os.close();

fs.close();

}

catch(Exception e)

{

e.printStackTrace();

}

}

public static String myRead(String fileName){

String content = null;

try

{

Configuration conf=new Configuration();

conf.set("fs.defaultFS", "hdfs://localhost:9000");

conf.set("fs.hdfs.omp", "org.apache.hadoop.hdfs.DistributedFileSystem");

FileSystem fs=FileSystem.get(conf);

Path file=new Path(fileName);

FSDataInputStream getIt=fs.open(file);

BufferedReader d=new BufferedReader(new InputStreamReader(getIt));

content=d.readLine();

System.out.println(""+content);

d.close();

fs.close();

}

catch(Exception e)

{

e.printStackTrace();

}

return content;

}

public static String merge(String s1){

String a = s1;

String [] s = a.split(" ");

String b = "";

s[0].compareTo(s[1]);

int temp;

int i,j;

for(i=0;i

{

for(j=0;j

{

if(Integer.parseInt(s[j])>Integer.parseInt(s[j+1]))

{

String temp1=s[j];

s[j]=s[j+1];

s[j+1]=temp1;

}

}

}

//Arrays.sort(s);

//Connections.sort();

System.out.println("a:"+a);

for(int i1 = 0; i1 < s.length; i1++){

b += s[i1]+" ";

}

System.out.println(b);

return b;

}

public static void main(String[] args) {

String s1 = myRead("hdfs://localhost:9000/input/1_3.txt");

//String s2 = myRead("hdfs://localhost:9000/input/1_2.txt");

String s3 = merge(s1);

myWrite(s3,"hdfs://localhost:9000/input/result.txt");

}

}

'''

from hdfs import InsecureClient client = InsecureClient('http://192.168.133.161:9870', user='root') def create_hdfs_directory(hdfs_dir_path): try: # 在HDFS上创建指定的目录,其中hdfs_dir_path: HDFS 目录路径 if not client.status(hdfs_dir_path, strict=False): client.makedirs(hdfs_dir_path) print(f"成功在 HDFS 上创建目录: {hdfs_dir_path}") except Exception as e: print(f"创建目录时出错: {e}") def upload_file_to_hdfs(local_path, hdfs_path): try: # 将本地文件上传到 HDFS,local_path: 本地文件路径;hdfs_path: HDFS 文件路径 client.upload(hdfs_path, local_path) print(f"成功将本地文件 {local_path} 上传到 HDFS 的 {hdfs_path}") except Exception as e: print(f"上传文件时出错: {e}") def deduplicate_data_in_hdfs(hdfs_input_path, hdfs_output_path): try: unique_lines = set() # 从 HDFS 读取文件 with client.read(hdfs_input_path) as reader: for line in reader: line = line.decode('utf-8').strip() if line: unique_lines.add(line) # 将去重后的数据写回 HDFS with client.write(hdfs_output_path, overwrite=True) as writer: for line in unique_lines: writer.write((line + '\n').encode('utf-8')) print(f"成功对 HDFS 中的数据进行去重,结果存储在 {hdfs_output_path}") except Exception as e: print(f"数据去重时出错: {e}") if __name__ == "__main__": # 本地原文件(duplicate_data.txt)路径 local_file_path = r"E:\xuxuxuxuxuuxuxu\作业和ppt\data.txt" # 设置上传至HDFS的存储目录 hdfs_dir = '/sj230136刘杭雨2' # 指定HDFS 输入文件路径 hdfs_input_path = f'{hdfs_dir}/duplicate_data.txt' # 指定HDFS 输出文件路径 hdfs_output_path = f'{hdfs_dir}/unique_data.txt' # 调用函数,在HDFS上创建存储目录 create_hdfs_directory(hdfs_dir) # 调用函数上传本地文件HDFS upload_file_to_hdfs(local_file_path, hdfs_input_path) # 对 HDFS 中的数据进行去重 deduplicate_data_in_hdfs(hdfs_input_path, hdfs_output_path)
最新发布
04-02
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值