HDFS 초보 학습 의 총화

4990 단어 hdfs
HDFS 의 기본 개념 과 구조       먼저 HDFS 는 Hadoop 프레임 워 크 의 분포 식 파일 시스템 이라는 것 을 알 게 되 었 다.파일 시스템 이란 저장 장치 에서 데이터 파일 을 조직 하고 조작 하 는 것 이다.우리 가 컴퓨터 를 열 때 windows 창 인터페이스 에서 조작 파일 을 두 번 클릭 하 든 Liux 에서 셸 로 파일 을 조작 하 든 사실은 하층 작업 은 모두 파일 시스템 에서 한다.과학 기술 이 발전 함 에 따라 데이터 의 양 이 증가 하 는 오늘날, 하나의 단기 저장 장 치 는 점점 대량의 데 이 터 를 놓 을 수 없 게 되 었 다.그래서 구 글 의 세 논문 에 분산 파일 시스템 (DFS) 이 등장 했다.여러 기 계 를 하나의 전체 로 볼 수 있 습 니 다. 이렇게 저장 공간 이 충분 합 니 다. 그러면 어떻게 한 기계 에서 파일 을 조작 하 는 것 과 같 습 니까?이것 이 DFS 의 역할 이다.운영 체제 위 에 파일 시스템 이 있 으 면 파일 시스템 위 에 분포 식 파일 시스템 이 탑 재 됩 니 다.분포 식 파일 시스템 의 매력 은 매우 크 지만 디자인 과정 에서 도 많은 문제점 이 있다.예 를 들 어 각 기계 간 의 네트워크 전송 문제.그리고 게임 네트워크 를 끊 으 면 파일 을 어떻게 잃 어 버 리 지 않 을 수 있 습 니까? 즉 안정성 의 문제 입 니 다.HDFS 가 이 문제 들 을 어떻게 해결 하 는 지 봅 시다.      HDFS 가 이런 문 제 를 어떻게 해결 하 는 지 알 기 위해 서 는 먼저 HDFS 의 체계 구 조 를 살 펴 봐 야 한다.HDFS 는 하나의 namenode, 하나의 secondary namenode, 여러 개의 datanode, 그리고 하나의 클 라 이언 트 로 구성 되 어 있 습 니 다.NameNode 는 전체 HDFS 의 관리 노드 이기 때문에 저장 할 파일 자 체 를 저장 하 는 것 이 아니 라 이 파일 의 메타 데이터 입 니 다.파일 의 이름, 크기, 권한, 수정 시간 등 이다.fsimage 는 메타 데이터 의 미 러 파일 로 edits (작업 로그 파일) 도 있 습 니 다.이 파일 들 은 모두 Liux 파일 시스템 에 저 장 된 것 입 니 다.DataNode 노드 는 파일 자 체 를 저장 하고 파일 은 하나의 파일 블록 으로 나 누 어 저장 합 니 다.왜 파일 블록 으로 저장 합 니까?첫째, 많은 큰 파일 의 한 노드 가 저장 되 지 않 고 반드시 블록 으로 나 눌 것 임 이 분명 하 다.두 번 째 네트워크 전송 시 만약 지연 되면 작은 부분 을 다시 전송 할 수 있 습 니 다.종합 적 으로 파일 블록 은 HDFS 에서 가장 기본 적 인 저장 단위 이다.파일 블록 의 기본 크기 는 128 M (hadop 1.0 버 전 은 64M) 이 고 기본 블록 크기 는 수정 할 수 있 습 니 다.우 리 는 하나의 개념 을 분명히 해 야 한다. 그것 은 만약 에 두 개의 130 M 파일 이 4 개의 파일 이 있다 면 130 M 파일 마다 128 M 개의 파일 과 2M 개의 파일 이 고 네가 상상 하 는 모든 블록 이 128 M 인 것 이 아니다.파일 을 블록 으로 나 누 는 것 외 에 모든 파일 에 사본 이 있 습 니 다. 이것 도 제 가 위 에서 말 한 안정성 을 위해 서 입 니 다. 기계 가 끊 으 면 안에 있 는 파일 을 원 하면 다른 기계 에 가서 파일 의 사본 을 찾 을 수 있 습 니 다.기본 값 은 세 개의 복사 본 이 며, hdfs - site. xml 의 replication 속성 을 통 해 복사 본 수량 을 수정 할 수 있 습 니 다
HDFS 의 셸 이 HDFS 를 조작 하 는 많은 셸 명령 은 Liux 의 셸 명령 과 비슷 하 다.예 를 들 어 ls, cat 등등.그 중 HDFS 에 있 는 파일 을 지정 하려 면그럼 이렇게 써 도 돼 요.hdfs://192.168.1.1(hadop 클 러 스 터 ip): 9000 (기본 포트)/parent/child  /parent/child .hdfs dfs -ls/   (모든 파일 목록/디 렉 터 리 아래)   hdfs dfs -appendToFile ...    (대상 파일 에 파일 내용 추가) chgrp  chmod chown 의 용법 은 Liux 와 같 습 니 다.copyFromLocal  copy ToLocal 과 get  put 와 마찬가지 로 파일 을 HDFS 에 불 러 오고 HDFS 에서 파일 을 다운로드 하 는 것 입 니 다.count 는 폴 더 의 수량, 파일 의 수량, 총 크기 를 보 여 줍 니 다.cp 폴 더 복사, - p 를 통 해 기 존 권한 정 보 를 유지 할 수 있 습 니 다.du 파일 크기 표시.text 는 cat 효과 와 유사 하지만 zip 파일 을 볼 수 있 습 니 다.hdfs dfsadmin -setQuota 10/your  설정/your 폴 더 에 10 개의 파일 만 있 습 니 다 (자신 포함). -clrQuota 제거.hdfs dfsadmin -setSpaceQuota 4k/your 설정 은 총량 4k 만 넣 을 수 있 습 니 다. -clrSpace Quota 제거 -safenode 에 파 라 메 터 를 추가 하면 안전 모드 에 있 는 지 확인 할 수 있 습 니 다. -report 는 hdfs 의 전체 시스템 보고 서 를 볼 수 있 습 니 다
  • JAVA API 
  • public class HdfsTest {
     private FileSystem fileSystem;
     @Before
     public void getFileystem() throws Exception {
      Configuration conf = new Configuration();
      URI uri;
      uri = new URI("hdfs://115.28.138.100:9000");
      fileSystem = FileSystem.get(uri, conf, "hadoop");
     }
     @Test
     public void testAdd() throws Exception {
      fileSystem.mkdirs(new Path("hdfs://115.28.138.100:9000/niubia"));
     }
     @Test
     public void testDelete() throws Exception{
      fileSystem.delete(new Path("hdfs://115.28.138.100:9000/niubia"),false);
     }
     @Test
     public void TestRead() throws Exception{
      FSDataInputStream  fsDataInputStream=fileSystem.open(new Path("hdfs://115.28.138.100:9000/a.txt"));
      FileOutputStream fileOutputStream=new FileOutputStream("D:\\eclipseforee\\eclipse\\a.txt");
      IOUtils.copy(fsDataInputStream, fileOutputStream);
      
     }
    }

       4. 파일 읽 기        먼저 FileSystem 의 open 방법 을 호출 합 니 다. 사실은 Distributed FileSystem 의 open 방법 입 니 다.rpc 를 통 해 파일 의 첫 번 째 block 의 location 메 시 지 를 가 져 옵 니 다. 복사 본 수가 1 보다 많 기 때문에 여러 개의 location 매개 변수 가 되 돌 아 옵 니 다.그들 은 토폴로지 구조 에 따라 클 라 이언 트 와 가 까 운 것 을 앞 에 놓 았 다.이 어 스 트림 대상 인 DFSInputStream (FSDataInputStream 을 포 장 했 음) 을 되 돌려 줍 니 다.이렇게 하나씩 읽 으 면 클 라 이언 트 에 게 방 불 이라는 흐름 은 연속 적 인 것 과 같다.그 중에서 만약 에 어떤 블록 전송 이 실패 하면 두 번 째 클 라 이언 트 와 가 까 운 블록 을 가 져 와 서 읽 고 실패 블록 이 있 는 datanode 를 기록 하여 namenode 에 보고 합 니 다.나머지 block 은 읽 을 때 이 datanode 를 건 너 뜁 니 다.
       5. 파일 쓰기
            클 라 이언 트 가 hdfs 에 데 이 터 를 쓸 때 먼저 클 라 이언 트 에 블록 크기 의 데 이 터 를 캐 시 하고 이어서 namenode 에 게 알려 줍 니 다. namenode 는 블록 을 할당 합 니 다.이 어 클 라 이언 트 가 이 블록 이 있 는 datanode 를 찾 아 전송 합 니 다.복사 본 수가 1 보다 많 으 면 예 를 들 어 3 이면 클 라 이언 트 가 기록 한 datanode 는 블록 을 다른 datanode 에 기록 하고 이 datanode 는 이 작업 을 반복 하 며 복사 본 수가 3 일 때 중단 합 니 다.이 과정 에서 클 라 이언 트 는 항상 연결 을 유지 합 니 다.
       6. 기타
            HDFS 의 HA 는 쉽게 말 하면 두 개의 namenode, 즉 두 개의 클 러 스 터 가 datanode 를 공유 하지만 이 두 클 러 스 터 의 파일 은 공유 되 지 않 습 니 다.
            HDFS 휴지통 은/user/사용자 이름/. Trash 에 있 습 니 다.
            작은 문 서 는 어떻게 해결 합 니까?일반적으로 HDFS 는 작은 파일 을 저장 하 는 데 익숙 하지 않다. 작은 파일 이 많 을 수록 namenode 의 fsimage 가 크 고 fsimage 는 메모리 에 있 기 때문이다.그래서 작은 문서 문 제 를 해결 해 야 한다.  방법 은 프로그램 을 큰 파일 로 통합 하거나 archive (여러 개의 작은 파일 을 패키지 로 만 드 는 것) 또는 Sequence File, 예 를 들 어 HBase 의 compact 나 MR 의 Combine FileInput Format 등 을 제어 할 수 있 습 니 다.
     

    좋은 웹페이지 즐겨찾기