hadoop理解小项目:hdfs

通过对项目的深入理解,掌握Hadoop。

一,创建ideal项目

create project ->选择maven->选择apache-maven-quickly进入文件创建,(其余自己配置)进入ideal。

在pom配置中,依赖包需要hadoop-hdfs和hadoop-common,去maven官网找到对应的依赖包,选对版本。
在这里插入图片描述

在这里插入图片描述
根据上图文件的结构创建客户端(myclient),服务器(myservice),hdfs中的读和写(myReadAndWrite)

二,MyReadAndWrite代码的理解

public class MyReadAndWrite {
static FileSystem fs;
static{
try {
fs=FileSystem.get(new URI(“hdfs://192.168.56.101:9000”),new Configuration());
} catch (IOException e) {
e.printStackTrace();
} catch (URISyntaxException e) {
e.printStackTrace();
}
}
首先先创建一个提供用户连接的一个接口,filesystem主要通过get的方法得到实体类,通过get方法得到hdfs的ip地址
public void read(){
InputStream is = null;
try {
is = fs.open(new Path("/mydemo/zxc.txt"));
OutputStream os =new FileOutputStream(“d://zxc.txt”);
IOUtils.copyBytes(is,os,4096,true);
} catch (IOException e) {
e.printStackTrace();
}
}
hdfs读文件方法:读取hdfs中的文件(定义inputsteam,找到文件path,读取文件),输出到window下的文件中,最后IOUtils.copyBytes(is,os,4096)理解:is是输入流,os是输出流,4096是用来拷贝的buffer大小,也就是缓冲区大小。

public void wirte(){
    try {
        OutputStream os = fs.create(new Path("mydemo/zxc.txt"));
        InputStream is = new FileInputStream("d://zxc.txt");
        IOUtils.copyBytes(is,os,4096,true);
    }catch (Exception e){
        e.printStackTrace();
    }
}

写和读的方法差不多,

public static void main(String[] args) {
    new MyReadAndWrite().wirte();
}

}
最后创建主方法,调用write()方法

三,client客户端代码

public class Client extends Thread {

@Override
public void run() {
    try {
        for (int i = 0; i <20 ; i++) {
            Socket socket = new Socket("localhost", 19999);
            OutputStream os = socket.getOutputStream();
            String message = "hello world"+i;
            os.write(message.getBytes());
            os.close();
            socket.close();
            Thread.sleep(3000);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

public static void main(String[] args) throws IOException {
    new Client().start();
}

}

因为需要启动线程,所以client类需要继承thread类,调用run的方法。
socket 是网络编程中最底层的程序接口,分为服务器端和客户端,服务器负责监听某个端口,客户端负责连接某个端口,客户端负责链接服务器上的某个端口,一旦链接通过后,服务器和客户端就可以双向通讯了。
socket(localhost,19999)这里是想服务器发送请求建立连接。从socket中获取输入流,在循环中,在socket里面定义一个massage字符串,每循环一次在message里面写入一次hello+i,然后输入流关闭,socket关闭,让线程睡眠3秒。

四,service代码理解

public class Server {
public static void main(String[] args) throws IOException {
ServerSocket sck = new ServerSocket(19999);
boolean flag = false;
while(true){
Socket socket = sck.accept();
InputStream is = socket.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String info = null;
while (!((info=br.readLine())null)){
System.out.println(“服务器收到来自客户端的请求”+info);
if (info.equalsIgnoreCase(“exit”)) {
flag = true;
}
}
if (flag) {
break;
}
if (info
null){
continue;
}
is.close();
br.close();
socket.close();
}
sck.close();
}
}

最后自行理解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值