Apache Sqoop 자습서 – HDFS와 RDBMS간에 데이터 가져 오기 / 내보내기



Apache Sqoop 자습서 : Sqoop은 Hadoop과 관계형 데이터베이스간에 데이터를 전송하는 도구입니다. 이 블로그는 MySQL에서 Sooop 가져 오기 및 내보내기를 다룹니다.

이 Apache Sqoop 튜토리얼을 시작하기 전에 한 발 뒤로 물러서 자. 이전 블로그에서 논의했듯이 데이터 수집의 중요성을 기억할 수 있습니까? Apache Flume . 이제 Apache Flume은 구조화되지 않은 소스를위한 데이터 수집 도구이지만 조직은 운영 데이터를 관계형 데이터베이스에 저장합니다. 따라서 관계형 데이터베이스에서 데이터를 가져오고 내보낼 수있는 도구가 필요했습니다. 이것이 Apache Sqoop이 탄생 한 이유입니다. Sqoop은 Hadoop과 쉽게 통합되고 HDFS의 관계형 데이터베이스에서 구조화 된 데이터를 덤프하여 Hadoop의 성능을 보완 할 수 있습니다. 이는 이유, Apache Sqoop 및 Flume에 대한 건전한 지식을 요구합니다.

처음에 Sqoop은 Cloudera에서 개발하고 유지 관리했습니다. 나중에 2011 년 7 월 23 일에 Apache에 의해 배양되었습니다. 2012 년 4 월 Sqoop 프로젝트는 Apache의 최상위 프로젝트로 승격되었습니다.





이 Apache Flume 튜토리얼 블로그에서는 다음 내용을 다룰 것입니다.



Apache Sqoop을 소개함으로써이 Apache Sqoop 자습서를 시작할 것입니다. 그런 다음 계속해서 Apache Sqoop 사용의 이점을 이해할 것입니다.

Apache Sqoop 튜토리얼 : Sqoop 소개

Apache Sqoop-Apache Sqoop 튜토리얼-Edureka일반적으로 애플리케이션은 RDBMS를 사용하여 관계형 데이터베이스와 상호 작용하므로 관계형 데이터베이스는 빅 데이터를 생성하는 가장 중요한 소스 중 하나가됩니다. 이러한 데이터는 관계형 구조의 RDB 서버에 저장됩니다. 여기에서 Apache Sqoop은 , 관계형 데이터베이스 서버와 HDFS 간의 가능한 상호 작용을 제공합니다.

따라서 Apache Sqoop은 데이터를 전송하도록 설계되었습니다. HDFS (Hadoop 스토리지) 및 MySQL, Oracle RDB, SQLite, Teradata, Netezza, Postgres 등과 같은 관계형 데이터베이스 서버. Apache Sqoop은 관계형 데이터베이스에서 HDFS로 데이터를 가져오고 HDFS에서 관계형 데이터베이스로 데이터를 내 보냅니다. Hadoop과 엔터프라이즈 데이터웨어 하우스, 관계형 데이터베이스 등과 같은 외부 데이터 저장소간에 대량 데이터를 효율적으로 전송합니다.



이것이 Sqoop이 그 이름을 얻은 방법입니다 –“ SQ L ~했다 열다 & Hadoop to SQL”.

또한 Sqoop은 외부 데이터 저장소의 데이터를 다음과 같은 Hadoop 에코 시스템의 도구로 가져 오는 데 사용됩니다. 하이브 & HBase .

이제 Apache Sqoop이 무엇인지 알고 있습니다. 이제 Apache Sqoop 자습서를 진행하고 Sqoop이 조직에서 광범위하게 사용되는 이유를 이해하겠습니다.

Apache Sqoop 튜토리얼 : 왜 Sqoop인가?

Hadoop 개발자의 경우 실제 게임은 데이터가 HDFS에로드 된 후 시작됩니다. 그들은 HDFS에 저장된 데이터에 숨겨진 다양한 통찰력을 얻기 위해이 데이터를 사용합니다.

자바에서 힘을 키우다

따라서이 분석을 위해 관계형 데이터베이스 관리 시스템에있는 데이터를 HDFS로 전송해야합니다. 글쓰기의 과제 관계형 데이터베이스에서 HDFS로 데이터를 가져오고 내보내는 코드는 흥미롭고 지루합니다. 이것이 Apache Sqoop이 구출하고 고통을 제거하는 곳입니다. 데이터 가져 오기 및 내보내기 프로세스를 자동화합니다.

Sqoop은 데이터 가져 오기 및 내보내기를위한 CLI를 제공하여 개발자의 삶을 쉽게 만듭니다. 데이터베이스 인증, 소스, 대상, 작업 등과 같은 기본 정보 만 제공하면됩니다. 나머지 부분은 처리합니다.

Sqoop은 내부적으로 명령을 MapReduce 작업으로 변환 한 다음 HDFS를 통해 실행됩니다. YARN 프레임 워크를 사용하여 데이터를 가져오고 내 보내며 병렬 처리에 내결함성을 제공합니다.

이 Sqoop Tutorial 블로그를 진행하면서 Sqoop의 주요 기능을 이해 한 다음 Apache Sqoop 아키텍처로 넘어갈 것입니다.

Apache Sqoop 자습서 : Sqoop의 주요 기능

Sqoop은 다음과 같은 많은 두드러진 기능을 제공합니다.

  1. 완전 부하 : Apache Sqoop은 단일 명령으로 전체 테이블을로드 할 수 있습니다. 단일 명령을 사용하여 데이터베이스에서 모든 테이블을로드 할 수도 있습니다.
  2. 증분 하중 : Apache Sqoop은 또한 테이블이 업데이트 될 때마다 테이블의 일부를로드 할 수있는 증분로드 기능을 제공합니다.
  3. 평행 수입 수출 : Sqoop은 YARN 프레임 워크를 사용하여 데이터를 가져오고 내 보내며, 이는 병렬 처리 위에 내결함성을 제공합니다.
  4. 수입 결과 SQL 질문 : HDFS의 SQL 쿼리에서 반환 된 결과를 가져올 수도 있습니다.
  5. 압축 : –compress 인수와 함께 deflate (gzip) 알고리즘을 사용하거나 –compression-codec 인수를 지정하여 데이터를 압축 할 수 있습니다. 압축 된 테이블을로드 할 수도 있습니다. Apache Hive .
  6. 커넥터 ...에 대한 모두 주요한 RDBMS 데이터베이스 : Apache Sqoop은 거의 전체 원주를 포함하는 여러 RDBMS 데이터베이스 용 커넥터를 제공합니다.
  7. Kerberos 보안 완성 : Kerberos는 '티켓'을 기반으로 작동하는 컴퓨터 네트워크 인증 프로토콜로, 비보안 네트워크를 통해 통신하는 노드가 안전한 방식으로 서로의 신원을 증명할 수 있습니다. Sqoop은 Kerberos 인증을 지원합니다.
  8. 하중 데이터 직접 으로 HIVE / HBase : 데이터를 직접로드 할 수 있습니다. Apache Hive 분석을 위해 또한 NoSQL 데이터베이스 인 HBase에 데이터를 덤프합니다.
  9. 지원하다 ...에 대한 축적 : Sqoop에게 HDFS의 디렉토리가 아닌 Accumulo로 테이블을 가져 오도록 지시 할 수도 있습니다.

아키텍처는 Apache Sqoop에 이러한 이점을 제공하는 것입니다. 이제 Apache Sqoop의 기능을 알고 있으므로 Apache Sqoop의 아키텍처 및 작동을 이해해 보겠습니다.

Apache Sqoop 튜토리얼 : Sqoop 아키텍처 및 작업

아래 다이어그램을 사용하여 Apache Sqoop의 작동 방식을 이해하겠습니다.

가져 오기 도구는 RDBMS에서 HDFS로 개별 테이블을 가져옵니다. 테이블의 각 행은 HDFS에서 레코드로 처리됩니다.

Sqoop 명령을 제출할 때 우리의 주요 작업은 개별 Map Task가 내부적으로 처리하는 하위 작업으로 나뉩니다. Map Task는 데이터의 일부를 Hadoop 생태계로 가져 오는 하위 작업입니다. 전체적으로 모든 Map 작업은 전체 데이터를 가져옵니다.

내보내기도 비슷한 방식으로 작동합니다.

내보내기 도구는 HDFS에서 RDBMS로 파일 세트를 다시 내 보냅니다. Sqoop에 대한 입력으로 제공된 파일에는 테이블의 행이라고하는 레코드가 포함됩니다.

작업을 제출하면 HDFS에서 데이터 청크를 가져 오는 Map Tasks에 매핑됩니다. 이러한 청크는 구조화 된 데이터 대상으로 내보내집니다. 이러한 모든 내 보낸 데이터 청크를 결합하여 대상에서 전체 데이터를 수신하며, 대부분의 경우 RDBMS (MYSQL / Oracle / SQL Server)입니다.

집계의 경우 단계 감소가 필요합니다. 그러나 Apache Sqoop은 집계를 수행하지 않는 데이터 만 가져오고 내 보냅니다. 매핑 작업은 사용자가 정의한 수에 따라 여러 매퍼를 시작합니다. Sqoop 가져 오기의 경우 각 매퍼 작업에는 가져올 데이터의 일부가 할당됩니다. Sqoop은 고성능을 얻기 위해 매퍼간에 입력 데이터를 균등하게 분배합니다. 그런 다음 각 매퍼는 JDBC를 사용하여 데이터베이스와의 연결을 생성하고 Sqoop에서 할당 한 데이터의 일부를 가져와 CLI에서 제공하는 인수를 기반으로 HDFS, Hive 또는 HBase에 기록합니다.

이제 Apache Sqoop의 아키텍처와 작동을 이해 했으므로 Apache Flume과 Apache Sqoop의 차이점을 이해하겠습니다.

Apache Sqoop 자습서 : Flume 대 Sqoop

Flume과 Sqoop의 주요 차이점은 다음과 같습니다.

  • Flume은 구조화되지 않은 데이터 또는 반 구조화 된 데이터 만 HDFS로 수집합니다.
  • Sqoop은 RDBMS 또는 엔터프라이즈 데이터웨어 하우스에서 HDFS로 또는 그 반대로 구조화 된 데이터를 가져오고 내보낼 수 있습니다.

이제 Apache Sqoop 튜토리얼에서 Apache Sqoop 명령을 살펴볼 때입니다.

Apache Sqoop 자습서 : Sqoop 명령

  • Sqoop – IMPORT 명령

Import 명령은 관계형 데이터베이스에서 HDFS로 테이블을 가져 오는 데 사용됩니다. 우리의 경우 MySQL 데이터베이스에서 HDFS로 테이블을 가져올 것입니다.

아래 이미지에서 볼 수 있듯이 HDFS로 가져올 직원 데이터베이스에 직원 테이블이 있습니다.

테이블을 가져 오는 명령은 다음과 같습니다.

sqoop import --connect jdbc : mysql : // localhost / employees --username edureka --table 직원

아래 이미지에서 볼 수 있듯이이 명령을 실행하면 Map 작업이 백엔드에서 실행됩니다.

코드가 실행되면 HDFS의 웹 UI (예 : 데이터를 가져온 localhost : 50070)를 확인할 수 있습니다.

  • Sqoop – 대상 디렉터리가있는 IMPORT 명령

아래 명령을 사용하여 HDFS의 특정 디렉토리에있는 테이블을 가져올 수도 있습니다.

sqoop import --connect jdbc : mysql : // localhost / employees --username edureka --table employee --m 1 --target-dir / employees

Sqoop은 대부분의 데이터베이스 소스에서 병렬로 데이터를 가져옵니다. -미디엄 속성은 실행할 매퍼 수를 지정하는 데 사용됩니다.

Sqoop은 대부분의 데이터베이스 소스에서 병렬로 데이터를 가져옵니다. 다음을 사용하여 가져 오기를 수행하는 데 사용할 맵 작업 (병렬 프로세스) 수를 지정할 수 있습니다. -미디엄 또는 – 매퍼 수 논의. 이러한 각 인수는 사용할 병렬 처리 정도에 해당하는 정수 값을 사용합니다.

디렉토리에있는 파일 수와 관계없이 매퍼 수를 제어 할 수 있습니다. 내보내기 성능은 병렬 처리 정도에 따라 다릅니다. 기본적으로 Sqoop은 내보내기 프로세스에 4 개의 작업을 병렬로 사용합니다. 이것은 최적이 아닐 수 있으므로 자신의 특정 설정을 실험해야합니다. 추가 작업은 더 나은 동시성을 제공 할 수 있지만 인덱스 업데이트, 트리거 호출 등에서 데이터베이스에 이미 병목 현상이있는 경우 추가로드로 인해 성능이 저하 될 수 있습니다.

아래 이미지에서 매퍼 작업의 수가 1임을 알 수 있습니다.

MySQL 테이블을 가져 오는 동안 생성되는 파일 수는 생성 된 매퍼 수와 같습니다.

  • Sqoop – Where 절이있는 IMPORT 명령

Sqoop 가져 오기 도구의 'where'절을 사용하여 테이블의 하위 집합을 가져올 수 있습니다. 각 데이터베이스 서버에서 해당 SQL 쿼리를 실행하고 그 결과를 HDFS의 대상 디렉터리에 저장합니다. 다음 명령을 사용하여‘ 어디 ‘절 :

sqoop import --connect jdbc : mysql : // localhost / employees --username edureka --table employee --m 3 --where 'emp_no & gt 49000'--target-dir / Latest_Employees

  • Sqoop – 증분 가져 오기

Sqoop은 이전에 가져온 일부 행 집합보다 새로운 행만 검색하는 데 사용할 수있는 증분 가져 오기 모드를 제공합니다. Sqoop은 두 가지 유형의 증분 가져 오기를 지원합니다. 추가마지막 수정 . –incremental 인수를 사용하여 수행 할 증분 가져 오기 유형을 지정할 수 있습니다.

지정해야합니다. 추가 행 ID 값이 증가하면서 새 행이 계속 추가되는 테이블을 가져올 때 모드입니다. 행의 ID가 포함 된 열을 지정합니다. – 체크-컬럼 . Sqoop은 검사 열에 지정된 값보다 큰 값이있는 행을 가져옵니다. – 마지막 값 .

Sqoop에서 지원하는 대체 테이블 업데이트 전략이 호출됩니다. 마지막 수정 방법. 소스 테이블의 행이 업데이트 될 때이를 사용해야하며 이러한 각 업데이트는 마지막으로 수정 된 열의 값을 현재 타임 스탬프로 설정합니다.

후속 가져 오기를 실행할 때 다음을 지정해야합니다. – 마지막 값 이렇게하면 새 데이터 또는 업데이트 된 데이터 만 가져올 수 있습니다. 이는 반복적 인 증분 가져 오기를 수행하는 데 선호되는 메커니즘 인 저장된 작업으로 증분 가져 오기를 생성하여 자동으로 처리됩니다.

먼저 HDFS에서 업데이트 할 새 행을 삽입합니다.

인공 지능 논란 장단점

증분 가져 오기 명령은 다음과 같습니다.

sqoop import --connect jdbc : mysql : // localhost / employees --username edureka --table employee --target-dir / Latest_Employees --incremental append --check-column emp_no --last-value 499999

아래 이미지에서 업데이트 된 데이터로 새 파일이 생성되는 것을 볼 수 있습니다.

  • Sqoop – 모든 테이블 가져 오기

RDBMS 데이터베이스 서버에서 HDFS로 모든 테이블을 가져올 수 있습니다. 각 테이블 데이터는 별도의 디렉터리에 저장되며 디렉터리 이름은 테이블 이름과 동일합니다. 해당 데이터베이스의 모든 테이블에는 기본 키 필드가 있어야합니다. 데이터베이스에서 모든 테이블을 가져 오는 명령은 다음과 같습니다.

sqoop import-all-tables --connect jdbc : mysql : // localhost / employees --username edureka

  • Sqoop – 데이터베이스 나열

Sqoop을 사용하여 관계 데이터베이스에있는 데이터베이스를 나열 할 수 있습니다. Sqoop 목록-데이터베이스 도구는 데이터베이스 서버에 대해 'SHOW DATABASES'쿼리를 구문 분석하고 실행합니다. 데이터베이스 나열 명령은 다음과 같습니다.

sqoop 목록 데이터베이스 --connect jdbc : mysql : // localhost / --username edureka

  • Sqoop – 목록 테이블

Sqoop을 사용하여 MySQL 데이터베이스 서버에서 특정 데이터베이스의 테이블을 나열 할 수도 있습니다. Sqoop 목록 테이블 도구는 'SHOW TABLES'쿼리를 구문 분석하고 실행합니다. 테이블 나열 명령은 데이터베이스입니다.

sqoop 목록 테이블 --connect jdbc : mysql : // localhost / employees --username edureka

  • Sqoop – 내보내기

위에서 설명한 것처럼 HDFS에서 RDBMS 데이터베이스로 데이터를 내보낼 수도 있습니다. 대상 테이블은 대상 데이터베이스에 있어야합니다.데이터는 HDFS에 레코드로 저장됩니다. 이러한 레코드를 읽고 구문 분석하고 사용자 지정 구분 기호로 구분합니다.기본 작업은 INSERT 문을 사용하여 입력 파일의 모든 레코드를 데이터베이스 테이블에 삽입하는 것입니다. 업데이트 모드에서 Sqoop은 기존 레코드를 데이터베이스로 대체하는 UPDATE 문을 생성합니다.

따라서 먼저 데이터를 내보낼 빈 테이블을 만듭니다.

HDFS에서 관계형 데이터베이스로 데이터를 내보내는 명령은 다음과 같습니다.

sqoop export --connect jdbc : mysql : // localhost / employees --username edureka --table emp --export-dir / user / edureka / employees

  • Sqoop-Codegen

개체 지향 응용 프로그램에서 모든 데이터베이스 테이블에는 개체를 초기화하는 'getter'및 'setter'메서드가 포함 된 하나의 데이터 액세스 개체 클래스가 있습니다. Codegen은 DAO 클래스를 자동으로 생성합니다. Table Schema 구조를 기반으로 Java에서 DAO 클래스를 생성합니다.

Java 코드를 생성하는 명령은 다음과 같습니다.

sqoop codegen --connect jdbc : mysql : // localhost / employees --username edureka --table 직원

위 이미지에서 코드가 생성 된 경로를 확인할 수 있습니다. 경로로 이동하여 생성 된 파일을 확인하겠습니다.

이 블로그가 유익하고 가치가 있기를 바랍니다. 더 많은 것을 배우고 싶다면이 과정을 통해 빅 데이터에 대해 설명하고 Hadoop이 빅 데이터와 관련된 문제를 어떻게 해결하는지 알려줍니다.

이제 Apache Sqoop을 이해 했으므로 전 세계에 걸쳐 250,000 명 이상의 만족 한 학습자 네트워크를 보유한 신뢰할 수있는 온라인 학습 회사 인 Edureka에서 작성했습니다. Edureka BigData Hadoop 인증 교육 과정은 학습자가 소매, 소셜 미디어, 항공, 관광, 금융 도메인에서 실시간 사용 사례를 사용하여 HDFS, Yarn, MapReduce, Pig, Hive, HBase, Oozie, Flume 및 Sqoop의 전문가가 될 수 있도록 도와줍니다.

질문이 있으십니까? 의견란에 언급 해 주시면 연락 드리겠습니다.