通过对项目的深入理解,掌握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 (infonull){
continue;
}
is.close();
br.close();
socket.close();
}
sck.close();
}
}
最后自行理解