通过Thrift访问HDFS分布式文件系统的性能瓶颈分析

2022-12-07,,,,

通过Thrift访问HDFS分布式文件系统性能瓶颈分析

引言

  Hadoop提供的HDFS布式文件存储系统,提供了基于thrift的客户端访问支持,但是因为Thrift自身的访问特点,在高并发的访问情况下,thrift自身结构可能将会成为HDFS文件存储系统的一个性能瓶颈。我们先来看一下一不使用Thrfit方式访问HDFS文件系统的业务流程。

一、HDFS文件读取流程

  aaarticlea/png;base64,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xmiTKy/fjBXZly8O0SK0LU7/rCLLpyUwxkhP6bHUBzmk8Am1L18cqu/10jPqHA12jgZ5y+KToudFneGbqnV0IbIgsyGRDYcjENkMzofmui/+brl0qfnSpeYbN252dnY5h34W2QhENiVAZLMTWZZv2myiSsqyPO+B0mmXqDUWehNZpy9M95IOct2k3tIVWqp744jsspg5ssumhn4ZY52jQXHoNHaOLCks72F9r1eUVPJRPhLM82abizHGWxafFO+5uKlSaogsyGyei2wEIpvJ+fjUJ2fONFmbW63NrXb7ra7unqEnw57RMc/o2GQgEFEgsqkAIgsA05/IcuNUbVJvuTXW93rre70kiHMVWcqW5mEaXqVytjOJrOidnaNB0VxjW6amaJxVbETcJ/4mRBZkPFxk/ZOBEY+3b2ikb2ik42H/rR86/nHj+0tXvr105duzX7ecPv/1F2cvfNZ4/rPG85+dOf/ZmXOIjnP+szPnP2/6suHcVw3nvjpz4fLnX/z9yy+/unLl2pUr127fudv78NHwT66xMe/YmHcyEITIpgaILADMsCJLQskYm7fIcpeluQQziWxsH0T4vSvPSo39PjLjztEgg8hCZEFcIpHIZCA4OiY7nww7nwx39/R+f/vO1avX6Dr3M41Nn33ecOqTT+vqP6mr/8T88Snzx6fMH9cj+gv9aE7V1Z+qP/Wfn3z6+Sefft7wd8u58xesza1tbba2Ntv9+x19/YOup27vuM877gsEQwpENiVAZAFgEFmILEQWaAFENlMCkdUOiCwALLtFdtnpQbpmSw4pCYrstJNiqR2nL8wX3WUQWYgsiIuiKIFgyDvuG3E9HXE97esbePCg4+bNW1evXrt69drly81fXrh49tyXjU3nGpvOnWk8i+g+55rOnj93/sK58xcuXrzc0nLlu+ttd+6237nb3t3TKzmfeEbHfBN+34Q/GAorUT2eCSCyABgSg4ps8nNk+c6Ji2znaJAP36oihxSx/heDyEJkQVyUaDQUDk/4J+kCoKEnw48e9T140PH97Tvf377T1ma7du27K1evffPN1W++udr6zZXWVkTf+ebqlSv/uPqPb6/+49vvvmu7efNWe/u9ru6eru6egUFpxOX2jvsmA4HJQCAcjujSYyGyABgTY4msqmoBbapKw/LiXNO2I5aPXXlWcvrCiU8t4NarqkG7bGqw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" alt="" />

流程说明:

    使用HDFS提供的客户端开发库Client,向远程的Namenode发起RPC请求;
    Namenode会视情况返回文件的部分或者全部block列表,对于每个block,Namenode都会返回有该block拷贝的DataNode地址;
    客户端开发库Client会选取离客户端最接近的DataNode来读取block;如果客户端本身就是DataNode,那么将从本地直接获取数据.
    读取完当前block的数据后,关闭与当前的DataNode连接,并为读取下一个block寻找最佳的DataNode;
    当读完列表的block后,且文件读取还没有结束,客户端开发库会继续向Namenode获取下一批的block列表。
    读取完一个block都会进行checksum验证,如果读取datanode时出现错误,客户端会通知Namenode,然后再从下一个拥有该block拷贝的datanode继续读。

二、HDFS文件写入流程

aaarticlea/png;base64,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" alt="" />

流程说明:

    使用HDFS提供的客户端开发库Client,向远程的Namenode发起RPC请求;
    Namenode会检查要创建的文件是否已经存在,创建者是否有权限进行操作,成功则会为文件创建一个记录,否则会让客户端抛出异常;
    当 客户端开始写入文件的时候,开发库会将文件切分成多个packets,并在内部以数据队列"data queue"的形式管理这些packets,并向Namenode申请新的blocks,获取用来存储replicas的合适的datanodes列表, 列表的大小根据在Namenode中对replication的设置而定。
    开始以pipeline(管道)的形式将packet写入所 有的replicas中。开发库把packet以流的方式写入第一个datanode,该datanode把该packet存储之后,再将其传递给在此 pipeline中的下一个datanode,直到最后一个datanode,这种写数据的方式呈流水线的形式。
    最后一个datanode成功存储之后会返回一个ack packet,在pipeline里传递至客户端,在客户端的开发库内部维护着"ack queue",成功收到datanode返回的ack packet后会从"ack queue"移除相应的packet。
    如 果传输过程中,有某个datanode出现了故障,那么当前的pipeline会被关闭,出现故障的datanode会从当前的pipeline中移除, 剩余的block会继续剩下的datanode中继续以pipeline的形式传输,同时Namenode会分配一个新的datanode,保持 replicas设定的数量。

三、关键词

  HDFSClient通过文件IO操作最终实现是通过直接访问DataNode进行。

四、Thrift的访问流程:猜测版

  aaarticlea/png;base64,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" alt="" />

流程说明:

1.ThriftClient客户端将操作命令传给ThriftServer。

2.ThriftServer调用HDFSClient接口API实现HDFS读写操作,操作流程如和三所示。

五、疑问

  与DataNode发生数据交换的到底是ThriftServer还是ThriftClient,如果是ThriftServer,那么多个ThriftClient并行访问时,ThriftServer必将成为HDFS访问的性能瓶颈;如果是ThriftClient直接访问DataNode,那么理论依据何在呢?

aaarticlea/png;base64,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" alt="" />

六、示例程序

  下面是一个基于Thrift实现的HDFS客户端程序,实现了文件的访问和创建和读取

  1 // HdfsDemo.cpp : Defines the entry point for the console application.
2 //
3
4 #include "stdafx.h"
5 #include <iostream>
6 #include <string>
7 #include <boost/lexical_cast.hpp>
8 #include <protocol/TBinaryProtocol.h>
9 #include <transport/TSocket.h>
10 #include <transport/TTransportUtils.h>
11 #include "ThriftHadoopFileSystem.h"
12
13 #ifndef _WIN32_WINNT
14 #define _WIN32_WINNT 0x0500
15 #endif
16 using namespace std;
17 using namespace apache::thrift;
18 using namespace apache::thrift::protocol;
19 using namespace apache::thrift::transport;
20
21 int _tmain(int argc, _TCHAR* argv[])
22 {
23 if (argc < 3)
24 {
25 std::cerr << "Invalid arguments!\n" << "Usage: DemoClient host port" << std::endl;
26 //return -1;
27 }
28 boost::shared_ptr<TTransport> socket(new TSocket("192.168.230.133", 55952));//boost::lexical_cast<int>(argv[2])));
29 boost::shared_ptr<TTransport> transport(new TBufferedTransport(socket));
30 boost::shared_ptr<TProtocol> protocol(new TBinaryProtocol(transport));
31 ThriftHadoopFileSystemClient client(protocol);
32 try
33 {
34 transport->open();
35 Pathname path;
36 //01_create directory
37 path.__set_pathname("/user/hadoop");
38 if(client.exists(path) == true)
39 {
40 printf("path is exists.\r\n");
41 }
42 else
43 {
44 printf("path is not exists.");
45 //return 0;
46 }
47 //02_put file
48 Pathname filepath;
49 filepath.__set_pathname("/user/hadoop/in/test1.txt");
50 /*
51 FILE* localfile = fopen("E:\\project\\Hadoop\\HdfsDemo\\Debug\\hello.txt","rb");
52 if (localfile == NULL)
53 {
54 transport->close();
55 return 0;
56 }
57 ThriftHandle hdl;
58 client.create(hdl,filepath);
59 while (true)
60 {
61 char data[1024];
62 memset(data,0x00,sizeof(data));
63 size_t Num = fread(data,1,1024,localfile);
64 if (Num <= 0)
65 {
66 break;
67 }
68 client.write(hdl,data);
69 }
70 fclose(localfile);
71 client.close(hdl);
72 */
73 //03_get file
74 /*
75 ThriftHandle hd2;
76 FileStatus stat1;
77 client.open(hd2,filepath);
78 client.stat(stat1,filepath);
79 int index = 0;
80 while(true)
81 {
82 string data;
83 if (stat1.length <= index)
84 {
85 break;
86 }
87 client.read(data,hd2,index,1024);
88
89 index += data.length();
90 printf("==%s\r\n",data.c_str());
91 }
92 client.close(hd2);
93 */
94
95 //04_list files
96 std::vector<FileStatus> vFileStatus;
97 client.listStatus(vFileStatus,path);
98 for (int i=0;i<vFileStatus.size();i++)
99 {
100 printf("i=%d file=%s\r\n",i,vFileStatus[i].path.c_str());
101 }
102 transport->close();
103 } catch (const TException &tx) {
104 std::cerr << "ERROR: " << tx.what() << std::endl;
105 }
106 getchar();
107 return 0;
108 }

 七、源码分析

  1.文件创建:

 1     /**
2 * Create a file and open it for writing, delete file if it exists
3 */
4 public ThriftHandle createFile(Pathname path,
5 short mode,
6 boolean overwrite,
7 int bufferSize,
8 short replication,
9 long blockSize) throws ThriftIOException {
10 try {
11 now = now();
12 HadoopThriftHandler.LOG.debug("create: " + path +
13 " permission: " + mode +
14 " overwrite: " + overwrite +
15 " bufferSize: " + bufferSize +
16 " replication: " + replication +
17 " blockSize: " + blockSize);
18 FSDataOutputStream out = fs.create(new Path(path.pathname),
19 new FsPermission(mode),
20 overwrite,
21 bufferSize,
22 replication,
23 blockSize,
24 null); // progress
25 long id = insert(out);
26 ThriftHandle obj = new ThriftHandle(id);
27 HadoopThriftHandler.LOG.debug("created: " + path + " id: " + id);
28 return obj;
29 } catch (IOException e) {
30 throw new ThriftIOException(e.getMessage());
31 }
32 }

  ThriftHandle的两端到底是谁呢?是ThriftClient和DataNode?还是ThriftServer与DataNode?

  2.文件写入

 1     public boolean write(ThriftHandle tout, String data) throws ThriftIOException {
2 try {
3 now = now();
4 HadoopThriftHandler.LOG.debug("write: " + tout.id);
5 FSDataOutputStream out = (FSDataOutputStream)lookup(tout.id);
6 byte[] tmp = data.getBytes("UTF-8");
7 out.write(tmp, 0, tmp.length);
8 HadoopThriftHandler.LOG.debug("wrote: " + tout.id);
9 return true;
10 } catch (IOException e) {
11 throw new ThriftIOException(e.getMessage());
12 }
13 }

  写入时依赖的还是ThriftHandle?  

  3.文件读取

 1     /**
2 * read from a file
3 */
4 public String read(ThriftHandle tout, long offset,
5 int length) throws ThriftIOException {
6 try {
7 now = now();
8 HadoopThriftHandler.LOG.debug("read: " + tout.id +
9 " offset: " + offset +
10 " length: " + length);
11 FSDataInputStream in = (FSDataInputStream)lookup(tout.id);
12 if (in.getPos() != offset) {
13 in.seek(offset);
14 }
15 byte[] tmp = new byte[length];
16 int numbytes = in.read(offset, tmp, 0, length);
17 HadoopThriftHandler.LOG.debug("read done: " + tout.id);
18 return new String(tmp, 0, numbytes, "UTF-8");
19 } catch (IOException e) {
20 throw new ThriftIOException(e.getMessage());
21 }
22 }

 八、遗留问题

  ThriftHandle可以看做是Socket连接句柄,但是他的两端到底是谁呢?如果是ThriftClient代表的客户端则一切OK,那么我该如何证明呢?存疑待考!

通过Thrift访问HDFS分布式文件系统的性能瓶颈分析的相关教程结束。

《通过Thrift访问HDFS分布式文件系统的性能瓶颈分析.doc》

下载本文的Word格式文档,以方便收藏与打印。