Har*_*rry 5 java cpu multithreading hadoop
我很困惑在hdfs-site.xml中使用少量参数,
dfs.namenode.handler.count - namenode的服务器线程数. dfs.datanode.handler.count - datanode的服务器线程数. dfs.datanode.max.transfer.threads - 指定用于将数据传入和传出DN的最大线程数.
我将default datanode handler
'count 设置为'10',其中' dfs.datanode.max.transfer.threads
'设置为'4096'.
lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 2
On-line CPU(s) list: 0,1
Thread(s) per core: 1
Core(s) per socket: 2
Socket(s): 1
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 62
Model name: Intel(R) Xeon(R) CPU E5-2640 v2 @ 2.00GHz
Stepping: 4
CPU MHz: 2000.000
BogoMIPS: 4000.00
Hypervisor vendor: VMware
Virtualization type: full
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 20480K
NUMA node0 CPU(s): 0,1
Run Code Online (Sandbox Code Playgroud)
我的困惑是
1)
我有2个CPU,根据我的理解,我的系统一次可以服务2个线程,将datanode/namenode处理程序设置为更高的值如"10"有什么用?
2)是什么区别handler count
和maximum transfer thread
两个用于处理?
谢谢,哈利
1)我有2个CPU,根据我的理解,我的系统一次可以服务2个线程,将datanode/namenode处理程序设置为更高的值如"10"有什么用?
大多数情况下,这些线程将被阻塞(睡眠)等待IO操作.假设平均有1个线程在99.9%的时间内处于睡眠状态,那么它只消耗0.1%的CPU.您可以轻松地同时运行1000个线程.在生产中,threads
配置应基于群集设置(每个节点的物理核心,磁盘吞吐量,网络吞吐量,工作负载等).如果您不确定,只需使用默认值.
2)处理程序计数和最大传输线程之间有什么区别用于处理?
dfs.datanode.handler.count
是处理程序线程ClientDatanodeProtocol
,用于客户端/ DN RPC传递有关块恢复元信息的信息.消息大小很小,传输速度很快,处理程序在大多数时间都处于空闲状态,因此我们不需要太多的处理程序.我们可以轻松地重用闲置的.所以默认值10
比它小得多transfer.threads
.
dfs.datanode.max.transfer.threads
是DataXceiver
线程数,用于通过DTP(数据传输协议)传输块.块数据很大,传输需要一些时间.一个块读取将提供1个线程.只有在传输整个块之后,线程才能被重用.如果同时有许多客户端请求阻塞,我们需要更多线程.对于每个写连接,将有2个线程.因此,对于写入绑定应用程序,此数字应该更大.
实际上DataXceiver
线程将被阻塞,等待从磁盘读取或等待通过接口发送数据.因此,除了数据校验和计算之外,它不会消耗太多的CPU.
归档时间: |
|
查看次数: |
2959 次 |
最近记录: |