Spark SQL 빅 데이터 처리

8517 단어 빅 데이터
InfoQ 에서 어떤 학자 가 Spark 의 빅 데이터 처리 에 대해 귀납 적 인 강연 을 했 습 니 다. 저 는 이런 강연 을 번역 하려 고 했 습 니 다. 자신의 이해 와 실험 이 해 를 넣 었 습 니 다. 제 것 일 수도 있 고 잘못된 것 일 수도 있 습 니 다. 실험 은 자신의 이해 가 정확 하 다 는 것 을 증명 하기 위해 서 입 니 다.
Big Data Processing with Apache Spark - Part 2 : Spark SQL
https://www.infoq.com/articles/apache-spark-sql?utm_source=apachesparkseries&utm_medium=link&utm_campaign=internal
스파크 빅 데이터 처리 에 관 한 두 번 째 강 의 였 다.지난 편 '왜 Spark 를 사용 합 니까?' 는 Spark 를 소개 하 는 머리말 로 실제 응용 을 말한다.
Spark 는 계산 프레임 워 크 입 니 다.
비계 가 몇 가지 인 데 고 층 빌딩 을 원 하 는 지 호 원 별장 을 원 하 는 지 모두 Spark 의 인 프 라 를 바탕 으로 한다.Spark SQL 은 Spark 인 프 라 에 대한 개조 응용, Spark 의 베이스, SQL 의 상부 구조 이다.당신 은 SQL 을 그대로 쓰 고 Spark SQL 은 Spark 바 텀 애플 리 케 이 션 의 계산 절차 로 번역 해 줍 니 다. 분포 식 계산 을 마 친 후에 결 과 를 모 아 놓 았 습 니 다. 여기 있 습 니 다. Spark 는 어떻게 처리 하 는 지 전혀 신경 쓰 지 마 세 요.
밑바닥 에 대해 유일 하 게 주의해 야 할 것 은 데이터 '바닥 재료' 의 격식 이다. 빌딩 을 짓 는 것 은 대개 철근 시멘트 나 목재 또는 남경 성벽 과 마찬가지 로 쌀 로 벽돌 을 쌓 고 몇 백 년 동안 우뚝 솟 아 도 쓰 러 지지 않 는 다 는 것 이다.
어떻게 Spark SQL 의 우수 성 을 나 타 냅 니까?
만약 에 우리 가 3 대의 Spark 컴퓨터 로 Spark SQL 클 러 스 터 를 구성 하고 spark 노드 와 똑 같이 설 치 된 SQL Server / Oracle 이 똑 같은 3 억 개의 데 이 터 를 모 았 다 고 가정 하면 시간 이 길 고 짧 은 지 살 펴 보 자.
Select AVG(SalesAmount) From FctSales ;
만약 에 FctSales 가 30 억 개의 데 이 터 를 가지 고 있다 고 가정 하면 모든 컴퓨터 의 메모리 가 1G, CPU 1.3 이다. 계산 이 돌아 오 는 시간 을 보면 그 구조 가 빠르다 는 것 을 알 수 있다.
데이터 베이스, Spark SQL 연결 데이터 형식, Hive 외 에 도 JSon, Batch File 등 최신 버 전 은 더 많은 형식 을 지원 할 수 있 습 니 다. 예 를 들 어 2018.02.28 에 발 표 된 Spark 2.3 은 Vectorized ORC Reader 를 지원 합 니 다.
Spark 1.3 부터 이전의 SchemaRDD 등 개념 이 새로운 업데이트 되 었 다.
*DataFrame: The new release provides a programming abstraction called DataFrames which can act as distributed SQL query engine. Data Sources: With the addition of the data sources API, Spark SQL now makes it easier to compute over structured data stored in a wide variety of formats, including Parquet, JSON, and Apache Avro library. JDBC Server: The built-in JDBC server makes it easy to connect to the structured data stored in relational database tables and perform big data analytics using the traditional BI tools.*
DataFrame 은 SchemaRDD 를 대체 하여 차세 대 분포 식 조회 엔진 이 되 었 으 나 사용자 에 게 이것 은 투명 합 니 다. 우 리 는 SQL 로 씁 니 다. DataFrame 은 자동 으로 SQL 문 구 를 분석 하고 네트워크 통신, 데 이 터 를 캡 처 하 며 데 이 터 를 모 으 는 등 작업 을 완성 합 니 다.
Data Source, 즉 데이터 베이스 입 니 다. Parquet, Avro, JSon. JSon 을 지원 하기 시 작 했 습 니 다. 모두 가 쉽게 이해 할 수 있 고 평소에 사용 하 는 것 도 적지 않 습 니 다. 바로 JavaScript Object 입 니 다.
그럼 Parquet, Avro 는 무엇 입 니까? 왜 이 두 가지 형식의 데 이 터 를 가지 고 있 습 니까?각각 어떤 선진 적 인 부분 이 있 는 지, 이것들 은 모두 우리 에 게 발견 하도록 남 겨 두 었 다.
Apache Parquet 는 열 저장 형식의 데이터 입 니 다. 다음은 위 키 백과 의 설명 입 니 다.
Apache Parquet is a free and open-source column-oriented data store of the Apache Hadoop ecosystem. It is similar to the other columnar storage file formats available in Hadoop namely RCFile and Optimized RCFile.
그래서 Apache Parquet 도 분포 식 저장 소 를 기반 으로 합 니 다.
Apache Avro 는 그리 간단 하지 않다.
https://en.wikipedia.org/wiki/Apache_Avro
*Avro is a remote procedure call and data serialization framework developed within Apache’s Hadoop project. It uses JSON for defining data types and protocols, and serializes data in a compact binary format. Its primary use is in Apache Hadoop, where it can provide both a serialization format for persistent data, and a wire format for communication between Hadoop nodes, and from client programs to the Hadoop services. It is similar to Thrift and Protocol Buffers, but does not require running a code-generation program when a schema changes (unless desired for statically-typed languages).*
이 는 JSon 을 압축 된 바 이 너 리 형식 으로 정렬 하여 데이터 의 부 피 를 더욱 작 게 하고 전파 와 저장 을 쉽게 할 수 있다.
우리 의 Spark SQL - Spark SQL JDBC 서버 최대 화
모든 사용자 가 Spark SQL 의 프로 그래 밍 기법 데이터 분석 수단 을 사용 하 는 것 이 아니 라 천천히 추진 되 고 있 습 니 다.처음에 C / S 시스템 의 보고서 도구 부터 분석 원 의 대량의 Excel 제작, BI 보고서 의 대량 사용 까지 모든 단 계 는 데이터 분석 이라는 생산력 의 향상 을 대표 했다.한편, 빅 데이터 가 유행 할 때 우 리 는 우리 의 분석 도 구 를 업그레이드 시 켜 시대 의 발전 을 따라 잡 고 빅 데이터 분석 분야 에 들 어 갈 수 있 도록 해 야 한다.
그렇다면 분석 원 이 엑셀, BI 보고서 에 기술 을 축적 해 빅 데이터 분석 으로 확장 할 수 있 는 방법 은 없 을 까?
엑셀, BI 보고서 에 JDBC 연결 을 추가 하면 Spark SQL 에 연결 되 고 자주 사용 하 는 SQL 을 실행 하여 데 이 터 를 캡 처 하고 빅 데 이 터 를 분석 할 수 있다 고 생각 합 니 다. 이것 이 바로 Spark SQL JDBC Server 입 니 다!
Thrift JDBC Server 는 서버 프로 세 스 입 니 다. Spark SQL 의 일부분 입 니 다. Thrift JDBC Server 를 시작 할 때 기본 값 은 로 컬 10000 포트 를 열 었 습 니 다.
start-thriftserver.sh
이 때 여러 클 라 이언 트 가 우리 의 Spark SQL 에 접근 할 수 있 도록 허용 합 니 다.
로 컬 10000 포트 에 SQL 요청 을 보 내 면 Spark SQL 은 이 SQL 요청 을 Spark SchemaRDD, DataFrame 의 실행 명령 으로 변환 하여 클 러 스 터 관리자 (YARN) 를 통 해 각 실행 노드 에 전송 하여 실행 합 니 다. 최종 결과 가 돌아 올 때 까지!
다음은 spark SQL JDBC Server 를 간단하게 연결 하 는 자바 의 예 입 니 다. 이 예 에서 저 희 는 Spark 라 이브 러 리 를 사용 하지 않 았 습 니 다. Spark 환경 과 독립 된 응용 프로그램 이지 만 Spark SQL 을 방문 하여 병렬 계산 을 할 수 있 습 니 다. 따라서 저희 응용 프로그램 이 사이트 라 하 더 라 도 Spark SQL JDBC Server 를 연결 할 수만 있다 면 Spark SQL 을 사용 할 수 있 습 니 다.
package SparkSQL;
import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class Employee{
public static void main(String args[]) {
    try {
Class.forName("org.apache.hive.jdbc.HiveDriver");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
    Connection conn = null ;
    try {
conn = DriverManager.getConnection("jdbc:hive2://localhost:10000/default","","");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
    System.out.println("Connected!");

    Statement stmt = null;
try {
stmt = conn.createStatement();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
    String sql;
    sql = "SELECT count(*) as employeesCnt FROM employees";
    ResultSet rs = null;
try {
rs = stmt.executeQuery(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
    //STEP 5: Extract data from result set
    try {
while(rs.next()){
  //Retrieve by column name
  int cnt  = rs.getInt("employeesCnt");

  System.out.print("employeeCnt: " + cnt);

}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

여기 서 개념 은 특히 명확 해 야 한다.
a 이상 의 Spark SQL 중 SQL 은 Hive 를 말 합 니 다. b 이 Thrift JDBC Server 는 Hive Server 입 니 다. 클 라 이언 트 가 Hive 에 대한 요청 을 받 을 수 있 습 니 다. c. 자바 가 spark SQL 을 연결 하 는 응용 프로그램 을 만 들 때 Hive Server 를 연결 하 는 것 입 니 다.
그렇다면 Spark SQL JDBC Server 의 의 미 는 어디 에 있 습 니까? Hive 도 Remote Access 를 열 수 있 고 Thrift Server 를 사용 합 니 다. Spark SQL 은 특수 한 SQL 입 니 다. 일반적인 SQL 언어 를 지원 합 니 다. 다만 이러한 언어 가 다른 언어 에서 호출 될 때 Spark SQL JDBC Server 에 보 내 면 Spark 내 장 된 분포 식 엔진 에 의 해 Spark 명령 으로 번 역 됩 니 다.각 Spark 실행 노드 에 할당 되 어 실 행 됩 니 다. Spark SQL 이 지원 하 는 분포 식 라 이브 러 리 는 Hive 가 있 습 니 다. 따라서 Hive 의 HQL 언어 는 Spark SQL 이 지원 하 는 (Hive Context) 입 니 다. 여기 있 는 Spark SQL JDBC Server 는 Hive Server 가 아니 라 Spark 컴 파일 층 입 니 다.

좋은 웹페이지 즐겨찾기