Hadoop 학습 HDFS 사용

4854 단어 Hadoop 학습

HDFS의 중요한 특징은 우선 파일을 저장하고 통일된 명칭 공간 디렉터리 트리를 통해 파일을 포지셔닝하는 파일 시스템이다.그 다음으로 이것은 분포식으로 많은 서버가 연합하여 그 기능을 실현하고 집단 중의 서버는 각자의 역할을 한다.2.1.master/slave 아키텍처 HDFS는 master/slave 아키텍처를 사용합니다.일반적으로 HDFS 클러스터는 Namenode 와 Datanode 로 구성됩니다.Namenode는 HDFS 집합 그룹의 메인 노드이고 Datanode는 HDFS 집합 종속 노드이며 두 가지 역할이 각각 그 직무를 맡고 분포식 파일 저장 서비스를 공동으로 조율하여 완성한다.2.2... 블록 저장소 HDFS의 파일은 물리적으로 블록 저장소(block)입니다. 블록의 크기는 설정 파라미터를 통해 정할 수 있습니다. 기본 크기는hadoop2입니다.x 버전은 128M입니다.2.3... 이름 공간(NameSpace) HDFS는 전통적인 계층형 파일 조직 구조를 지원합니다.사용자나 응용 프로그램은 디렉터리를 만들고 파일을 이 디렉터리에 저장할 수 있습니다.파일 시스템 이름 공간의 차원 구조는 대부분의 기존 파일 시스템과 유사하다. 사용자는 파일을 만들거나 삭제하거나 이동하거나 이름을 바꿀 수 있다.Namenode는 파일 시스템의 이름 공간을 유지하는 것을 맡고 있으며, 파일 시스템의 이름 공간이나 속성에 대한 수정은 Namenode에 기록됩니다.HDFS는 다음과 같이 클라이언트가 경로를 통해 파일에 액세스하는 통합 추상 디렉토리 트리를 제공합니다.hdfs://namenode:port/dir-a/dir-b/dir-c/file.data。 2.4...Namenode 메타데이터 관리 우리는 디렉터리 구조와 파일 블록 위치 정보를 메타데이터라고 부른다.Namenode는 전체 hdfs 파일 시스템의 디렉터리 트리 구조와 모든 파일에 대응하는 블록 정보 (block의 id, 그리고 있는 Datanode 서버) 를 유지합니다.베이징시 창평구 건축자재성 서로 김연룡 오피스텔 1층 전화: 400-618-9090 2.5...Datanode 데이터 저장 파일의 각 블록의 구체적인 저장 관리는 Datanode 노드가 책임진다.모든 블록은 여러 개의 Datanode에 있을 수 있다.Datanode는 자신이 보유하고 있는 Block 정보를 Namenode에 정기적으로 보고해야 합니다.여러 개의 복사본을 저장합니다. (복사본 수량은 매개 변수를 통해 dfs.replication을 설정할 수 있습니다. 기본값은 3).2.6.복사 메커니즘은 오류를 용납하기 위해 파일의 모든 블록에 복사본이 있습니다.모든 파일의 블록 크기와 복사 계수는 설정할 수 있습니다.응용 프로그램은 파일의 복사본 수를 지정할 수 있습니다.복사 계수는 파일을 만들 때 지정할 수도 있고 나중에 변경할 수도 있습니다.2.7... 한 번 쓰기, 여러 번 읽기 HDFS는 한 번 쓰기, 여러 번 읽기에 적합한 장면으로 설계되었으며 파일 수정은 지원되지 않습니다.그렇기 때문에 HDFS는 빅데이터 분석을 위한 베이스 메모리 서비스에 적합하지 않고 사용하기에 적합하지 않다.디스크 등 응용은 수정이 불편하고 지연이 크며 네트워크 비용이 크고 원가가 너무 높기 때문이다.


 


HDFS 쓰기 데이터 프로세스의 상세한 절차 해석: 1. 클라이언트가 파일 업로드 요청을 하고 RPC를 통해 NameNode와 통신을 구축한다. NameNode는 목표 파일이 존재하는지, 부모 디렉터리가 존재하는지, 업로드할 수 있는지 확인한다.2. 클라이언트가 첫 번째 블록을 요청하여 어떤 DataNode 서버에 전송해야 하는지;3. NameNode는 구성 파일에 지정된 백업 수량과 랙 감지 원리에 따라 파일을 할당하고 사용 가능한 DataNode의 주소를 A, B, C와 같이 반환합니다.참고: Hadoop은 설계할 때 데이터의 안전과 효율을 고려하여 데이터 파일은 기본적으로 HDFS에 세 부를 저장하고 저장 정책은 로컬 한 부, 선반 안의 다른 한 노드의 한 부, 다른 선반의 한 노드의 한 부를 저장한다.4. 클라이언트는 3대의 DataNode 중 한 대의 A가 데이터를 업로드할 것을 요청한다(본질적으로 RPC 호출이고 pipeline을 구축한다). A가 요청을 받으면 계속 B를 호출한 다음에 B호출 C를 호출하여 전체 pipeline을 완성하고 단계별로client로 돌아간다.5. 클라이언트는 A에 첫 번째 블록(디스크에서 데이터를 읽고 로컬 메모리 캐시에 넣는 것)을 업로드하기 시작하고packet 단위(기본 64K)로 A가 패킷을 받으면 B, B가 C로 전송한다.A 패킷을 전송할 때마다 응답 대기열에 넣어 응답을 기다립니다.6. 데이터는 하나의packet 데이터 패키지로 나누어 pipeline에서 순서대로 전송되고 pipeline 반대편에서 위로 각각ack(명령이 정확하게 응답됨)을 보내며 최종적으로 pipeline에서 첫 번째 DataNode 노드 A가 pipelineack을client에 발송한다.7. 블록 전송이 완료되면 클라이언트는 NameNode에 두 번째 블록을 서버에 업로드할 것을 다시 요청합니다


 


 


HDFS 읽기 데이터 프로세스 세부 단계 해석: 1. Client는 NameNode에 RPC 요청을 하여 요청 파일block이 있는 위치를 확인한다.2. NameNode는 상황에 따라 파일의 일부 또는 모든 block 목록을 되돌려줍니다. 모든 block에 대해 NameNode는 이 block 사본이 포함된 DataNode 주소를 되돌려줍니다.3. 이러한 되돌아오는 DN 주소는 집단 토폴로지 구조에 따라 DataNode와 클라이언트의 거리를 얻어낸 다음에 정렬하고 두 가지 규칙을 정렬한다. 그것이 바로 네트워크 토폴로지 구조에서 클라이언트와 가까운 배열이다.심박수 메커니즘에서 시간을 초과하여 보고된 DN 상태는 STALE로 이런 배열이다.4. Client는 정렬 앞에 있는 DataNode를 선택하여 Block을 읽습니다. 클라이언트 자체가 DataNode라면 로컬에서 직접 데이터를 가져옵니다.5. 밑바닥의 본질은 Socket Stream(FS Data Input Stream)을 구축하고 부류 Data Input Stream의 read 방법을 반복적으로 호출하여 이 블록의 데이터를 읽을 때까지 한다.6. 목록의 Block을 읽은 후 파일 읽기가 끝나지 않으면 클라이언트는 NameNode에 다음 Block 목록을 가져옵니다.7. 블록을 다 읽으면 checksum 검증을 합니다. DataNode를 읽을 때 오류가 발생하면 클라이언트가 NameNode에게 통지한 다음에 이 블록 사본을 가진 DataNode에서 계속 읽습니다.8. read 방법은 블록 정보를 병렬적으로 읽는 것이지 한 조각 한 조각 읽는 것이 아니다.NameNode는 클라이언트 요청이 블록을 포함하는 DataNode 주소를 되돌려 주는 것이지 요청 블록의 데이터를 되돌려 주는 것이 아니다.9. 최종적으로 읽은 모든 블록은 완전한 최종 파일로 통합됩니다.


 


 

Configuration conf = new Configuration();
//  hdfs  
conf.set("fs.defaultFS", "hdfs://node-21:9000");
// 
System.setProperty("HADOOP_USER_NAME", "root");
//  FileSystem  
FileSystem fs = FileSystem.get(conf);
//   
//FileSystem fs = FileSystem.get(new URI("hdfs://node-21:9000"), conf, "root");
// 
fs.create(new Path("/hdfsbyjava-ha"), false);
// 
fs.copyFromLocalFile(new Path("e:/hello.sh"), new Path("/hdfsbyjava-ha"));
// 
fs.close();

 


자바에서 HDFS를 조작하는 것은 주로 다음과 같은 Class:Configuration과 관련된다. 이 종류의 대상은 클라이언트나 서버의 설정을 봉인했다.File System: 이 종류의 대상은 파일 시스템의 대상입니다. 이 대상의 일부 방법으로 파일을 조작할 수 있습니다. File System의 정적 방법인 get을 통해 이 대상을 얻을 수 있습니다.FileSystem fs = FileSystem.get (conf) get 방법은conf의 매개 변수 fs에서 가져옵니다.defaultFS의 구성 값은 어떤 유형의 파일 시스템인지 판단합니다.만약 우리의 코드에 fs가 지정되지 않았다면defaultFS, 그리고 프로젝트classpath에서도 해당하는 설정을 지정하지 않았습니다. conf의 기본값은hadoop의jar 패키지의core-default에서 나온 것입니다.xml, 기본값: file://, 가져오는 것은 DistributedFile System의 실례가 아니라 로컬 파일 시스템의 클라이언트 대상입니다.


 
 
 
 

 


 


 


 


 


 


 


 


 


 
 
 
 
 

좋은 웹페이지 즐겨찾기