hadoop HDFS 랙 인식
4238 단어 hadoop
실험 환경 hadoop : 2.6.5
master: 192.168.1.160
slave1: 192.168.1.161
랙 인식
하나의hadoop분포식 집단은 많은 서버가 있을 것이다. 선반 슬롯과 교환기 인터페이스의 제한을 받기 때문에 대형 분포식 집단은 여러 개의 선반을 뛰어넘는다. 선반 안의 서버 간의 네트워크 속도는 보통 선반 서버 간의 네트워크 속도보다 높고 선반 사이의 서버의 네트워크 통신은 상부 교환기 간의 네트워크 대역폭의 제한을 받는다.
HDFS는 데이터 파일에 블록을 나누어 저장합니다. 블록마다 기본적으로 3개의 복사본이 있습니다. (3보다 크게 설정할 수도 있습니다.) HDFS는 복사본에 대한 저장 정책은 다음과 같습니다.
hadoop : 2.6.5
master: 192.168.1.160
slave1: 192.168.1.161
하나의hadoop분포식 집단은 많은 서버가 있을 것이다. 선반 슬롯과 교환기 인터페이스의 제한을 받기 때문에 대형 분포식 집단은 여러 개의 선반을 뛰어넘는다. 선반 안의 서버 간의 네트워크 속도는 보통 선반 서버 간의 네트워크 속도보다 높고 선반 사이의 서버의 네트워크 통신은 상부 교환기 간의 네트워크 대역폭의 제한을 받는다.
HDFS는 데이터 파일에 블록을 나누어 저장합니다. 블록마다 기본적으로 3개의 복사본이 있습니다. (3보다 크게 설정할 수도 있습니다.) HDFS는 복사본에 대한 저장 정책은 다음과 같습니다.
이러한 전략은 주로 데이터의 신뢰성과 데이터 접근의 성능을 고려하기 위한 것이다.
hadoop이 선반에 대한 감지는 스스로 적응하는 것이 아니라 사용자가hadoop기계(ip)와 선반의 대응 관계를 알려줘야 한다.
실현
hadoop 프레임 감지는 두 가지 방식으로 실현할 수 있으며 프레임 감지 프로그램과 스크립트 방식을 작성할 수 있다.
랙 감지기
import org.apache.hadoop.net.DNSToSwitchMapping;
import java.util.ArrayList;
import java.util.List;
public class MyDNSToSwitchMapping implements DNSToSwitchMapping {
@Override
public List resolve(List list) {
List paths = new ArrayList();
if (list != null && !list.isEmpty()) {
for (String hostname : list) {
String rackPath = "";
if ("master".equals(hostname)) { // , master slave1。
rackPath = "/rack1";
} else {
rackPath = "/rack2";
}
paths.add(rackPath);
}
}
return paths;
}
@Override
public void reloadCachedMappings() {
}
@Override
public void reloadCachedMappings(List list) {
}
}
pom.xml
```
org.apache.hadoop
hadoop-client
2.6.5
```
mvn package -Dmaven.test.skip=true
net.topology.node.switch.mapping.impl
com.tongfang.learn.MyDNSToSwitchMapping
./sbin/start-dfs.sh
[hadoop@master hadoop-2.6.5]$ ./bin/hdfs dfsadmin -printTopology
Rack: /rack1
192.168.1.160:50010 (master)
Rack: /rack2
192.168.1.161:50010 (slave1)
기계가 rack1과 rack2 두 개의 선반에 분포되어 있음을 알 수 있다..스크립트hadoop도 스크립트 방식으로 프레임 감지 방식을 설정합니다. 흔히 볼 수 있는 실현 방식은 셸 스크립트와python 스크립트 두 가지가 있습니다. 여기서python 스크립트를 예로 들겠습니다.
#!/usr/bin/python
#coding=utf-8
import sys
rack={
"192.168.1.160":"/dc1/rack1",
"192.168.1.161":"/dc1/rack2",
"master":"/dc1/rack1",
"slave1":"/dc1/rack2",
}
if __name__=="__main__":
print rack.get(sys.argv[1], "default-rack") # ip , default-rack
호스트 이름인지 IP 주소인지 정확한 문서를 찾지 못했기 때문에 스크립트에서 호스트 이름과 IP 주소를 호환하는 것이 좋습니다.
:
chmod +x test.py
net.topology.script.file.name
/home/hadoop/test.py
./sbin/start-dfs.sh
[hadoop@master hadoop-2.6.5]$ ./bin/hdfs dfsadmin -printTopology
Rack: /dc1/rack1
192.168.1.160:50010 (master)
Rack: /dc1/rack2
192.168.1.161:50010 (slave1)
기계가/dc1/rack1과/dc1/rack2 두 개의 선반에 분포되어 있음을 알 수 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Azure HDInsight + Microsoft R Server에서 연산 처리 분산Microsoft Azure HDInsight는 Microsoft가 제공하는 Hadoop의 PaaS 서비스로 인프라 주변의 구축 노하우를 몰라도 훌륭한 Hadoop 클러스터를 구축할 수 있는 훌륭한 서비스입니다. 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.