I. 빌드 HADOOP 개발 환경
우리가 우리의 일에 작성 하는 다양 한 코드는 서버에서 실행 되 고 HDFS 작업 코드도 예외는 아니다. 개발 단계 동안 우리 사용 이클립스 윈도우 개발 환경으로 가상 컴퓨터에서 실행 하는 HDFs에 액세스할 수 있습니다. 즉, 로컬 이클립스에서 자바 코드를 통해 원격 리눅스에서 HDFs를 액세스합니다.
호스트에서 자바 코드를 사용 하 여 클라이언트 컴퓨터에서 HDFS에 액세스 하려면 다음 되도록 해야 합니다.
호스트 및 클라이언트 네트워크는 상호 (1) 확인
(2) 되도록 호스트 및 클라이언트 방화벽은 폐쇄, 때문에 많은 포트 필요 통과, 방화벽 구성을 줄이기 위해 직접 종료.
호스트 컴퓨터는 클라이언트에서 사용 하는 JDK 버전에 따라 (3) 확인 합니다. 클라이언트는 JDK6 호스트 Jdk7 경우 코드 지원 되지 않는 버전 오류가 실행 됩니다.
(4)는 호스트의 로그인 사용자 이름 클라이언트의 사용자 이름을 동일 해야 합니다. 예를 들어 우리는 리눅스의 루트를 사용 하 여, Windows 루트 사용자를 사용 합니다., 그리고 그렇지 않으면 그것은 권한 예외를 보고 합니다.
& http://www.aliyun.com/zixun/aggregation/37954.html > nbsp; 이클립스 프로젝트에서 Hadoop을 덮어 Org.apache.hadoop.fs.FileUtil 클래스의 Checkreturnvalue 메서드 그림 1.1과 같이 권한 오류가 발생 하지 않도록 것입니다.
그림 1.1
독자 개발 과정에서 권한 가진 문제 경우, 사용자 환경 확인 하려면이 섹션에서 프롬프트를 따릅니다.
II를 읽고 매우 중요 한 API는 Hadoop의 HDFs에 데이터를 쓸 파일 시스템 API를 사용 하 여 Org.apache.hadoop.fs.FileSystem, 이것이 우리의 사용자 코드 동작 HDFS 직접 액세스 이 클래스는 HDFs 조작의 다양 한 방법을 포함, JDBC에 운영 데이터베이스의 직접 항목을 비슷한 연결 클래스.
파일 시스템 개체를 어떻게 받을 수 있나요?
코드 보기
위의 코드에서 참고 전화는 파일 시스템 정적 Hdfs는 두 개의 값 형식 매개 변수는 첫 번째 HDFs 주소, 프로토콜의 주소를 전달, ip는 10.1.14.24, 포트는 9000. 이 주소에 대 한 완전 한 정보는 코어-site.xml, 구성 파일에 지정 된 고 독자는 그들의 환경의 구성 파일에서 설정을 사용할 수 있습니다. 두 번째 매개 변수는 구성 개체입니다.
1입니다. 만들 폴더
루트 디렉터리에서 파일 상황 보고 HDFs 셸 명령을 사용 하 여 그림 2.1과 같이.
그림 2.1
우리는 다음 코드와 함께, HDFs의 루트 디렉터리에 폴더를 만듭니다.
------------------------------------------------------------------------------------------------------
최종 문자열 pathstring = "/ D1";
부울 존재 = fs.exists (새로운 경로 (pathstring));
만약 (! 존재) 없음
부울 결과 = Fs.mkdirs (새로운 경로 (pathstring));
SYSTEM.OUT.PRINTLN (결과);
}
------------------------------------------------------------------------------------------------------
위의 코드는 main 함수에 배치 됩니다.
만드는 폴더에 전체 경로 결정 하는 첫 번째 줄은 / d1. 코드의 두 번째 줄 폴더 존재 여부를 확인 하거나 존재 하지 않는 경우 만들기 작업을 수행 하려면 exitst 메서드를 사용 하는. 세 번째 줄 Mkdirs 메서드를 호출 하는 폴더를 만들고 반환 값은 부울 값 이며 true, 성공적인 창조 또는 창조 하지 못했음을 나타내는 false를 나타냅니다.
그림 3.2,3.3 표시 생성 성공 에서처럼 이제 성공, 좀 봐.
그림 3.2
그림 3.3
2입니다. 파일
를 작성
우리는 코드는 다음과 같습니다, HDFs에 파일을 작성할 수 있습니다.
-----------------------------------------------------------------------------------------------------
최종 문자열 pathstring = "/ D1/F1";
마지막 Fsdataoutputstream Fsdataoutputstream = fs.create (새로운 경로 (pathstring))
Ioutils.copybytes (새로운 Bytearrayinputstream ("내 이름은 이다 Sunddenly". GetBytes ()),
Fsdataoutputstream, 회의 true);
------------------------------------------------------------------------------------------------------
코드의 첫 번째 줄 만든 파일 방금 만든 D1 폴더 아래에 있는 F1 파일 임을 나타냅니다
;
두 번째 줄은 출력 스트림에 HDFs에 지도 구축 하는 Create 메서드를 호출 하는
제 3 라인 Hadoop copybytes의 도구 클래스 ioutils의 정적 메서드를 호출 하 여 문자열을 출력 스트림에 보낼 것 이다.
정적 메서드에 네 개의 매개 변수:
첫 번째 매개 변수 입력된 스트림입니다. 두 번째 매개 변수는 출력 스트림에. 세 번째 매개 변수는 구성 개체입니다. 네 번째 인수는 부울 값, 그리고 true는 스트림을 후 닫을 경우 데이터 전송을 완료 했습니다.
그림 3.4와 같이 이제는 창조의 성공에 봐.
그림 3.4
3입니다. 읽기 파일
이제 우리 "/ d1/f1" 그냥 HDFs에 기록 파일을 읽어와 코드는 다음과 같이 읽는다:
------------------------------------------------------------------------------------------------------
최종 문자열 pathstring = "/ D1/F1";
마지막 Fsdatainputstream Fsdatainputstream = Fs.open (새로운 경로 (pathstring))에 읽기 /
Ioutils.copybytes (Fsdatainputstream, System.out, 회의 true);
-------------------------------------------------------------------------------------------------------
첫 번째 줄 읽기 파일의 경로 지정합니다. 두 번째 줄이 나타냅니다 오픈 호출 메서드가 지정 된 파일을 엽니다, 반환 값은 파일, 및 세 번째 행 또는 전화 ioutils.copybytes 메서드는 입력된 스트림, 출력 대상 콘솔입니다.
그림 3.5 참조
그림 3.5
4입니다. 디렉터리 목록 보기 및 세부 사항
파일
다음 코드는 루트 디렉터리에서 모든 파일 및 디렉터리 표시할 수 있습니다.
--------------------------------------------------------------------------------------------------------
최종 문자열 pathstring = "/";
최종 filestatus Liststatus = fs.liststatus (새로운 경로 (pathstring));
없음; (Filestatus filestatus:liststatus)에 대 한
최종 문자열 유형 = Filestatus.isdir ()? 디렉터리 ":" 파일;
마지막 짧은 복제 = Filestatus.getreplication ();
최종 문자열 권한 = Filestatus.getpermission (). toString ();
마지막 긴 len = Filestatus.getlen ();
최종 경로 경로 = Filestatus.getpath ();
System.out.println (유형 + "T" 권한 + "T" 복제 + "\ T" + 렌 + "T" + + 경로);
}
-----------------------------------------------------------------------------------------------------------
모든 파일 및 지정된 된 경로 아래에 폴더를 얻을 것 이다 Liststatus 메서드를 호출, 각각 한 filestatus에 의해 표시 됩니다. 우리는 각 Filestatus 개체를 표시 하는 For 루프를 사용 합니다. Filestatus 개체 형식에 대 한 정보를 많이, 복제, 사용 권한, 길이, 경로, 및 등의 수를 포함 하는 파일의 세부 사항을 나타냅니다. 결과 그림 3.6에 표시 됩니다.
그림 3.6
5입니다. 파일 또는 디렉터리 삭제
파일 또는 다음 코드 경로 삭제할 수 있습니다.
-----------------------------------------------------------------------------------------------------
최종 문자열 pathstring = "/ D1/F1";
Fs.delete (새로운 경로 ("/ d1"), true);
Fs.deleteonexit (새로운 경로 (pathstring));
-----------------------------------------------------------------------------------------------------
코드의 셋째 줄 나타냅니다 파일 "/ d1/f 1", 삭제 및 디렉터리 재귀 삭제를 나타내는 코드의 두 번째 줄 "/ d1"와 아래의 내용을 모두. 위에 나열 된 FS 접근 이외에 다양 한 방법으로 독자를 상담할 수 있다 API 자신 있다.
원본 링크: http://www.cnblogs.com/sunddenly/p/3983090.html