HDFS 2

1.HDFS读写流程

HDFS读流程

HDFS client 调用FileSystem.open(filePath),

与NN进行【RPC】通宵,返回该文件的block列表

返回 FSDataInputStream 对象

HDFS client 调用FSDataInputStream.read方法

与第一个块最近的DN进行读取,读取完成后检查是否读取到想要的数据?

如果读取到,关闭与DN通信

如果未读取到,就从第二个节点去读取,以此类推

当block列表全部读取完成

HDFS client调用FSDataInputStream的close方法

关闭数据流

(RPC:远程过程调用)

HDFS写流程

HDFS client 调用FileSystem.create(filePath)方法

与NN进行【RPC】通信

NN会检查这个文件是否存在?是否有权限创建这个文件如果都可以,就创建一个文件

这个时候,文件是没有数据的,也不关联block

NN会再根据文件的大小,块大小,副本数等

计算要上传多少的块和对应的DN节点

最终这个信息返回给客户端【FSDataOutputStream】对象

HDFSclient调用客户端【FSDataOutputStream】对象

根据NN返回的信息,将第一个块的第一个副本写到DN1,

写完复制到DN2,再复制到DN3

当我们三个副本写完,DN3返回ack【确认字符】给DN2

DN2接收到ack,返回ack给DN1

DN1接收到ack,返回ack给【FSDataoutputStream】

告诉它第一个块的三副本写完了

以此类推

当所有的块全部都写完

HDFS client调用【FSDataoutputStream】的close方法

关闭数据流

然后调用FileSystem.complete方法,告诉NN文件写成功。

2.SQL

rows between 

unbounded preceding        前面所有行

n preceding                        前面n行

current row                         当前行

n following                          后面n行

unbounded following          后面所有行

连续登陆:

登陆日期与rank值做差,相同的值为连续登陆。

select id, max(cnt)
  from (select id, login_sub, count(1) cnt
          from (select id, login_data - rk login_sub
                  from (select id,
                               login_data,
                               row_number() over(partition by id order by login_data) rk
                          from login))
         group by id, login_sub)
 group by id

3.sql题

递归,emp表递归
empno,ename,level,tree

select t1.empno,t1.ename,t1.mgr,t2.ename mgr_name,level from emp t1
left join emp t2
on t1.mgr=t2.empno
start with t1.ename='KING'
connect by prior t1.empno=t1.mgr

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值