HDFS的读写流程
写流程
- 客户端请求创建文件
- NameNode收到创建文件的请求后,会在元数据中记录新文件的信息,并返回一个输出流对象给客户端
- 当客户端开始写数据时,输出流对象会与NameNode通信,获取DataNodes列表,从而知道写在哪些DataNodes上
- 数据传输至DataNode后,每个DataNode会将确认信息返回到客户端
- 当所有数据都被写入后,NameNode将此文件标记为已完成
读流程
- 客户端调用FileSystem对象的open方法打开一个文件
- 客户端查询NameNode来获得文件开头部分数据块的位置信息
- 直接从DataNode读取数据
- 重复步骤2和3
HIVE的调优
- 使用分区裁剪,可以先减少搜索的数据量,然后再关联表
- 谓词下推,提前执行过滤,减少map到reduce的传输数据
- 分区表,根据常用的查询维度对数据进行分区
- 分桶表:对需要频繁执行JOIN操作的数据集,可通过哈希分桶来组织数据,加速JOIN过程
- 根据需要调整map和reduce的数量