Mapreduce 실행 프로세스
에 Mapreduce 하이브에 하이브
실행 프로세스 자세한 해결
단계 1:ui (사용자 인터페이스) 호출 ExecuteQuery 인터페이스, 드라이버 단계 2:driver HQL 쿼리 문을 쿼리에 대 한 세션 핸들 만들고 문을 구문 분석을 위한 대기 컴파일러에 쿼리 문을 보냅니다 보냅니다 및 빌드 실행 계획 단계 3와 4:compiler는 Metastore에서 관련된 메타 데이터를 얻을: 메타 데이터 쿼리 트리에 식을 입력 하는 데 사용은 하 고 파티션을 조정 기반 쿼리 조건자 계획 "6" (6.1,6.2,6.3) 구축: com 겹쳐 piler 생성 된 실행 계획은 상연 DAG 각 단계 맵/리듀스 작업, 메타 데이터 작업, HDFS 파일 작업, 실행 엔진 제출 하는 각 단계에 해당 구성 요소가 실행의 DAG에 포함 될 수 있습니다. 단계 7, 8, 9: 각 작업 (매퍼/감속 기), 쿼리 결과 임시 파일로 HDFS에 저장 됩니다. 쿼리 결과 저장 하는 임시 파일 드라이버 가져올 API에서 반환 콘텐츠 실행 엔진이 HDFS에서 직접 읽혀집니다. MapReduce 특성 관계형 데이터베이스 테이블의 부하 패턴에 하이브 데이터가 로드 될 때 적용 됩니다 (모드를 로드 하는 테이블 데이터는 데이터베이스에 저장 되어 있는 파일 포맷을 의미), 그것 로드 될 때 로드 되는 데이터 패턴에 맞지 않는, 경우 관계형 데이터베이스 데이터를 쓰기-시간 모드 라고 로드를 거부 데이터 로드 될 때 확인에 대 한 데이터 스키마를 검사 하는 쓰기-시간 패턴. 하이브 때 데이터와 관계형 데이터베이스, 하이브 로드 데이터를 로드 하는 동안 데이터를 확인 하지 않습니다 로드 데이터 파일 변경 되지 않습니다 동안 체크 데이터 형식 수행 쿼리 작업 중 "시간 읽기 모드." 라고 데이터 로딩의 속도 매우 느린, 하지만 데이터 잘 로드 될 때 우리가 빨리 데이터를 쿼리 하는 데가 실용적인 응용 프로그램에서 부하 데이터에 쓰기-시간 모드 데이터 압축 열을 색인 것입니다. 하지만 우리의 데이터 구조적 이며 저장 패턴은 알 수 없는, 관계형 데이터 조작 이다 훨씬 더 성가신 시나리오 그리고 하이브 그것을 활용할 수 있을 것입니다. 관계형 데이터베이스는 행의 중요 한 기능 또는 데이터의 어떤 행을 업데이트할 수 있습니다, 삭제 작업, 하이브 * * 특정 행의 작업을 지원 하지 않습니다, 하이브는 데이터의 작업 원래 데이터를 덮어쓰기 및 데이터를 추가 * *. 거래 및 인덱스 하이브 또한 지원 하지 않습니다. 업데이트, 트랜잭션 및 인덱스는 관계형 데이터베이스의 모든 특성 그리고 이러한 하이브는 지원 되지 않습니다, 하이브 디자인은 대규모 데이터 처리, 완전 하기 때문에 지원 하기 위하지 없습니다.데이터 정상, 일부 특정 데이터 운영 효율성에 대 한 검색 하는 것은 업데이트 작업에 대 한 매우 가난한 하이브가 마침내 새 테이블에 저장 된 원래 테이블 데이터 변환의 쿼리를 통해,이 고 전통적인 데이터베이스 업데이트 작업은 매우 다르다. 하이브는 또한 그들의 자신의 기여, 즉, 하 둡과 hbase 통합에 실시간 쿼리를 만들 수 있습니다, HBase 빠른 쿼리 수 하지만 hbase 클래스 SQL 문을 지원 하지 않는 다음 하이브 SQL 쉘, 구문 분석을 제공 하는 hbase를 줄 수 있는 SQL 문 클래스와 HBase 데이터베이스를 조작할 수 있습니다. 하이브는 MapReduce 패키지로 간주 될 수 있습니다. 하이브의 의미는 작성 하 고 복잡 한 MapReduce 프로그램으로, 크게 감소 Hadoop 학습의 더 많은 사용자가 Hadoop을 사용 하 여 데이터 마이닝 분석을 위한 수 있도록 비즈니스 분석에서 쓰기 쉬운 SQL 언어를 변환 하는 것입니다. 비교 SQL HIVEQL ANSI SQL 지원 하더라도 업데이트 완벽 하 게 지원 하지 않습니다 Update\insert\delete 삽입 overwrite\into 테이블 트랜잭션 지원 지원 되지 않는 모드 쓰기 모드 읽기 모드 데이터 저장 블록 장치, 로컬 파일 시스템 HDFS 지연 낮은 높은 삽입을 지원 하지 않는 여러 개의 테이블 지원 하위 전체 지원 FROM 절 보기 업데이트할 수 있는 읽기 전용 확장성 낮은 데이터 규모 작은 크기에만 사용할 수 있습니다... Sparksql Sparksql 소개
Sparksql, 이전의 상어, 빠른 시작 도구를 RDBMS에 익숙한 기술자에 대 한 하지만 MapReduce, 이해 하지 않았다 제공 했던 유일한 시간에서 Hadoop에서 실행 되도록 Sql에 hadoop 도구. 그러나, mapreduce 계산 과정 과정 방문 중간 디스크의 많은 수 I/O 많이 사용, 운영 효율성을 향상 시키기 위해 sql에 hadoop의 효율성, 상어와 서 되 고에 뿐만 아니라 때문에 줄일 상어 (하이브 구문 파서를 사용 하 여 같은 하이브에 너무 많이 의존 쿼리 최적화, 등), 2014 상어 개발을 막으려고 불꽃 팀 Sparksql 프로젝트에 모든 리소스를 넣어
? Sparksql, 스파크 생태계의 구성원으로 계속 개발, 하이브, 더 이상 제한 하지만 호환 하이브; 하이브가 불꽃을 촉발 하이브의 기본 엔진 중 하나로, 즉 하이브 개발 계획 하이브는 엔진 제한 됩니다 더 이상 맵 리듀스, Tez, 불꽃, 기타 등등에 의해 구동 수 없습니다.
Sparksql 두 가지 구성 요소
Sqlcontext:spark SQL SqlContext 캡슐화 스파크에서에서 모든 관계형 기능을 제공합니다. 앞의 예제에서 기존의 sparkcontext와 sqlcontext를 만들 수 있습니다. Dataframe:dataframe의 명명 된 열 형태로 구성 하는 데이터의 분산된 컬렉션입니다. Dataframe R 언어, 관계형 데이터베이스에서 데이터베이스 테이블에 비슷한 데이터 프레임 개념을 기반으로 합니다. RDD를 RDD (RDD 행)의 행으로는 Dataframe의 내용을 반환 하는 RDD 메서드를 호출 하 여 Dataframe를 변환할 수 있습니다. 다음 데이터 원본에서 Dataframe를 만들 수 있습니다: 기존 RDD, 데이터 파일, JSON 데이터 집합, 하이브 테이블 및 외부 데이터베이스 구조. Sparksql 스키마
를 실행
관계형 데이터베이스와 마찬가지로, Sparksql는 또한 투영 (A1, A2, A3), 데이터 원본 (TableA), 필터 (조건)에 문을 각각, 결과, 데이터 과정에서 SQL 쿼리를 해당 소스, SQL 문의 동작 순서 설명 하는 의미-운영 데이터 소스-> 결과.
SPARKSQL 계산 서의 순서를 실행 하는 경우
는 SQL 문에서 어떤 단어는 프로젝션, 그리고는 데이터 소스, 식 (SELECT 등, 어디에서), 키워드 식별 하 (구문 분석) 읽기 SQL 문 구문 분석 판단 여부 SQL 문에서 규범적인;
프로젝션: 간단 하 게 선택, 참조 하 여 선택한 열을 컬렉션: SQL 프로젝션 바인드 SQL 문을 데이터베이스 데이터 사전 (열, 테이블, 뷰 및 등등) (바인딩) 경우 관련된 프로젝션, 데이터 SQL 문을 실행할 수 있습니다 의미, 실행 통계는 일반적으로 몇 가지 실행 계획을 제공 하는 일반적인 데이터베이스 소스, 등이 존재, 어디에 데이터베이스 선택 최적의 계획 (최적화); 계획 실행 (실행) 이 작업의 순서로 이루어집니다-> 데이터 소스-결과, 때로는 심지어 그냥 실행 하는 SQL 문을 다시 실행 하는 같은 물리적 테이블을 읽이 필요 없이 결과 반환 하 고 데이터베이스의 버퍼 풀에서 직접 반환 결과 얻을 가능성이. 스파크
에 하이브
? 스파크에 하이브 Cloudera, 인텔, 모임의 같은 회사를 포함 하는 오픈 소스 프로젝트에 의해 시작 되었다 하 고 하이브를 위한 컴퓨팅 엔진으로 점화 하 고 하이브 쿼리 계산에 대 한 스파크 클러스터에 스파크로 제출 하도록 설계 되었습니다. 이 프로젝트와 하이브 쿼리 성능을 향상 시킬 수 있으며 사용자가 배포한 하이브 또는 불꽃, 그로 인하여 더 하이브 및 불꽃의 범위를 증가 대 한 좀 더 유연한 선택 제공 수 있습니다.
불꽃에 하이브 Sparksql
의 차이
? 스파크에 하이브는 대략 SPARKSQL 구조를 SQL 엔진은 서로 다른, 하지만 계산 엔진은 스파크! 칠판에 노크! 그건 포인트!
Pyspark에서 스파크에 하이브를 사용 하 여 경험에 살펴보겠습니다
#初始化Spark SQL #导入Spark SQL pyspark.sql 가져오기 Hivecontext에서 행 # 하이브 종속성 도입 될 수 없습니다 # PYSPARK.SQL 가져오기 Sqlcontext, 행 # 참고 위의 포인트는 그 같은 가방에서 두 키를 얼마나 많은 hivectx를 구분할 수 있습니다 Hivecontext (SC) #创建SQL上下文环境 입력 = = Hivectx.jsonfile (예시) #基本查询示例 INP Ut.registertemptable ("짹짹") #注册输入的SchemaRDD (스파크 버전 1.3 Dataframe로 변경 된 후 Schemardd) #依据retweetCount (전달 수) 선택 짹짹 Toptweets = Hivectx.sql ("선택 텍스트, Retweetcount 제한 10 트위터 순서에서 retweetcount")
우리 모두에서 여기에서 사실, 이해 될 수 있다 Pyspark.sql 패키지 SqlContext 및 Hivecontext는 스파크에 하이브 및 sparksql 많은 차이 확인 하지 않습니다 볼 수 있습니다.
스파크에 구조적으로 하이브 그리고 sparksql는 한 SQL 분산된 실행 스파크 프로그램으로 변환 하는 계층. 그리고 모두의 엔진은 스파크.
Sparksql와 스파크에 하이브는 불꽃에 SQL을 구현 하는 솔루션입니다. 스파크 이전 SQL 계층을 구현 하기 위해 상어 프로젝트 했지만 나중에 다시 전복 되었다 sparksql. 이것은 스파크 공식 Databricks 프로젝트, 스파크 프로젝트 자체 SQL 구현의 주요 푸시. 하이브 스파크에 조금 나중에 Sparksql 보다. 하이브는 원래 Tez 프로젝트를 지원 하 고 대략적인 계획 구조 (하지 MapReduce dag)을 촉발 하이브 허용에 하이브 동안 MapReduce, 외부 엔진에 대 한 좋은 지원을 했다. 이 기초에, 스파크에 하이브를 시작한 Cloudera 주도. 프로젝트는 Ibm, 인텔, 모임의 (하지만 아무 databricks)에 의해 지원 되었다.
MapReduce에 하이브 MapReduce 현장에 sparksql 사용 장면 하이브 하이브 MapReduce, 익숙하지 하지만 SQL 기술에 잘 알고 그의 존재를 약한 프로그래밍 및 가난한 Java 언어 사용자 수 쉽게 SQL 언어 쿼리를 사용 하 여, 요약, 및 HDFs 큰 데이터 집합에 데이터를 분석 및 SQL 언어에 능숙 한 사람들은 Java 언어. Sparksql 시나리오에서 오프 라인, 비 실시간 데이터에 대 한 실력 보다 훨씬 더 하이브 불꽃 원사, Mesos, 모두 로컬 및 독립 실행형 클러스터, 다른 모드를 실행할 수 있으며 또한 EC2 같은 구름에서 실행. 또한, 불꽃의 데이터 소스는 매우 광범위 한 이며 HDFs, HBase, 하이브, 카산드라, 타키온에서 데이터의 다양 한 종류를 처리할 수 있습니다. 실시간 요구 사항 또는 사이트 하이브 MapReduce와 sparksql 성능 비교
에 대 한 높은 속도 요구 사항
결론: Sparksql 그리고에 하이브 같은 시간 촉발 MapReduce에 하이브 보다 훨씬 빠릅니다, 그리고 공식적인 데이터는 전통적인 MapReduce 보다 10-100 배 빠른 것입니다.