복붙노트

[HADOOP] Greenplum, Pivotal HD + Spark, 또는 구조화 된 데이터의 결핵에 대한 HAWQ?

HADOOP

Greenplum, Pivotal HD + Spark, 또는 구조화 된 데이터의 결핵에 대한 HAWQ?

Greenplum DB에 구조화 된 TB의 TB가 있습니다. 기본적으로 내 데이터에서 MapReduce 작업을 실행해야합니다.

MapReduce의 기능을 적어도 다시 구현하여이 데이터가 스트리밍 방식으로 메모리에 저장되도록했습니다.

그런 다음 다른 곳에서보다 완벽한 솔루션을 찾기로했습니다.

Scala와 Spark 벤치 마크를 사용하고 있기 때문에 Pivotal HD + Spark를 보았습니다. 그러나이 HDFS의 데이터 저장소는 Greenplum보다 효율적이지 않을 것이라고 생각합니다. ( "나는 믿는다"라는 것을 유의하십시오.) 나는 틀렸음을 알게되어 기쁘지만 증거를 제시해주십시오.)

그래서 Greenplum 스토리지 계층을 유지하기 위해 기본적으로 Hadoop 인 Pivotal의 HAWQ를 살펴 보았습니다.

이 접근 방식에는 많은 기능이 없어졌습니다. 주로 스파크의 사용.

또는 내장 된 Greenplum 기능을 사용하는 것이 더 낫습니다.

그래서 저는 어떤 방법이 최선인지 모르는 사이의 교차점에 있습니다. 관계형 DB 모델에 적합한 TB의 데이터를 처리하고 싶습니다. Spark 및 MapReduce의 이점이 필요합니다.

너무 많이 묻는거야?

해결법

  1. ==============================

    1.내 대답을 게시하기 전에 다음과 같이 내 이해를 바탕으로 질문을 바꿔 봅니다.

    내 대답을 게시하기 전에 다음과 같이 내 이해를 바탕으로 질문을 바꿔 봅니다.

    관계형 DB 모델에 잘 맞는 TB 데이터가 있고 SQL을 사용하여 데이터를 쿼리하고 싶습니다. (그래서 Greenplum DB에 저장하는 것이 좋습니다.)하지만 때때로 Spark 및 MapReduce를 사용하여 액세스하려고합니다. 데이터의 유연성 때문입니다.

    내 이해가 정확하다면 HAWQ를 사용해 보시기를 강력히 권장합니다. HAWQ의 일부 기능은 요구 사항에 완벽하게 부합됩니다 (참고 : HAWQ의 개발자이므로 편향 될 수 있음).

    우선 HAWQ는 Hadoop 데이터베이스의 SQL입니다. 즉, HDFS를 데이터 저장소로 사용한다는 의미입니다. HAWQ는 Greenplum DB 스토리지 계층을 유지하지 않습니다.

    둘째, "HDFS는 Greenplum보다 효율적이지 않을 것"이라고 반박하기는 어렵습니다. 그러나 성능 차이는 생각만큼 중요하지 않습니다. HDFS 데이터에 액세스하기위한 몇 가지 최적화 작업을 수행했습니다. 한 가지 예는 하나의 데이터 블록이 로컬에 저장되어있는 경우 일반 RPC 호출이 아닌 디스크에서 직접 읽는 것입니다.

    셋째, MapReduce 용 HAWQ InputFormat이라는 이름의 HAWQ 기능이 있습니다 (Greenplum DB에는없는 HAWQ 기능이 있습니다). 이 기능을 사용하면 Spark 및 MapReduce 코드를 작성하여 HAWQ 데이터에 쉽고 효율적으로 액세스 할 수 있습니다. MapReduce 용 HAWQ InputFormat은 Spark 및 MapReduce 코드가 HDFS에 저장된 HAWQ 데이터에 직접 액세스 할 수있게 해주는 Hadoop에서 제공하는 DBInputFormat과 다릅니다 (마스터가 성능 병목 현상이 될 수 있습니다). 그것은 전적으로 분산되어 있으므로 매우 효율적입니다.

    마지막으로 Greenplum DB에서와 마찬가지로 SQL을 사용하여 HAWQ로 데이터를 쿼리 할 수 ​​있습니다.

  2. ==============================

    2.Spark - JDBC 커넥터를 사용하여 Spark 데이터를 읽으려고 했습니까?

    Spark - JDBC 커넥터를 사용하여 Spark 데이터를 읽으려고 했습니까?

    분할 열, 하한, 상한 및 numPartitions를 사용하여 녹색 점 테이블을 여러 Spark 작업자간에 분할합니다.

    예를 들어,이 예제를 사용할 수 있습니다.

    import java.util.Random
    
    import org.apache.spark.sql.SQLContext
    
    import org.apache.spark.{SparkConf, SparkContext}
    
    
    
    object SparkGreenplumApp extends App {
    
      val conf = new SparkConf().setAppName("SparkGreenplumTest")
    
      val sparkContext = new SparkContext(conf)
    
       val sqlContext = new SQLContext(sparkContext)
    
      import sqlContext.implicits._
    
    
     val df = sqlContext.load("jdbc", Map(
        "url" -> "jdbc:postgresql://servername:5432/databasename?user=username&password=*******",
        "dbtable" -> "(select col, col2, col3 where datecol > '2017-01-01' and datecol < '2017-02-02' ) as events",
        "partitionColumn"-> "ID",
        "lowerBound"->"100",
        "upperBound"->"500",
        "numPartitions"->"2",
        "driver" -> "org.postgresql.Driver"))
    }
    
  3. from https://stackoverflow.com/questions/32531383/greenplum-pivotal-hd-spark-or-hawq-for-tbs-of-structured-data by cc-by-sa and MIT license