2016-01-22 15 views
5

Birkaç ay önce phoenix kullanmaya başladım. Çevre ve sürüm detayları aşağıdadır.apache phoenix Soru stackover de bulunmuyor

Hadoop - Cloudera CDH 5.4.7-1. Phoenix - 4.3 - Phoenix, CDH5.4.7-1 üzerinde parsel olarak gelir. HBase sürümü - HBase 1.0.0 JDK - 1.7.0_67 1 Master ve 3 bölge sunucuları.

Apache Phoenix'i değerlendirmek için bir POC yapmaya başladık. Oracle DB'de 12 farklı tablodan veri var. Verileri Oracle altın kapısını kullanarak Hadoop sistemine alıyoruz.

Her biri birkaç yüz satırlı 40-100 sütun içeren 12 farklı Phoenix tablosu vardır. Bir dönüşüm süreci yaparız ve daha sonra final masasına yükleriz. Bu, yaptığımız temel ETL. Dönüşüm süreci ara tabloları doldurduğumuz birkaç ara aşamadan geçer. Dolayısıyla tablolar arasında “birleşmeler” vardır.

Her şey harika çalıştı ve tüm ETL işlemini gerçekleştirebildik. Kullanım kolaylığı ve uygulamadan çok memnun kaldım.

Performans testleri, milyonlarca satır ile başladığımızda başladı. Aşağıda konular.

  1. Ara dönüşüm işlemi bölge sunucularını çöker: Her biri 20 Milyon satırı olan iki tabloyu birleştirmek. Katıldığım sütunda ikinci dizin oluşturuldu. İki tablo 9 kova ile tuzlanır. Bu, birleşimden sonuçlanan satırların sayısı ~ 200k'dan azsa iyi performans gösterdi. 200 bin satırın yürütülmesi 10 dakikadan fazla sürüyor. Ortaya çıkan satır sayısı daha fazlaysa, bölge sunucuları çökmeye başlar. İç birleştirme salted.b_acct2 ba gelen test kodu seçme sayısı (available_bal) açıklar (salted.m_item2 mi den c_item_id seçmek burada s_info_id = 12345) ba.c_item_id = mi.c_item_id üzerinde mi gibidir;

    + ------------------------------------------ + | PLANI | + ------------------------------------------ + | MÜŞTERİ 9-CHUNK PARALLEL 9-ŞEY TAM TARAYICI SALTED.S2_BA_CI_IDX | | TEK KİŞİLİK SERVER AGGREGATE | | PARALEL İÇ KÖŞE TABLO 0 (SKIP MERGE) | | MÜŞTERİ 9-CHUNK PARALEL 9-GÜNLÜK ARALIK TARAMA SALTED.S_MI_SI_IDX ÜZERİNDE [0,19,266] | | MÜŞTERİ MERGE SORT | | TO_BIGINT ("C_ITEM_ID") DİNAMİK SUNUCU FİLTRESİ IN (MI.C_ITEM_ID) | + ------------------------------------------ +

  2. Son dönüşüm için 6 tabloya katılma: Dizine eklenmiş sütunlarda 6 tablo birleştirilmesi, 1M'den daha az satır için veri döndürür. Bu 10-12 dakika sürer. Ancak, katılma sonuçları yaklaşık 1 milyondan fazlaysa, askıda kalıyor ve sonuç geri gelmiyor. Başlangıçta yapılandırmayı değiştirip mevcut belleği artırarak çözdüğüm InsufficientMemoryException var. InsufficientMemoryException'ı tekrar alamıyorum, ancak sorgu 20 dakikadan uzun süredir çalışmıyor. Birkaç saniye içinde yürütmeyi bekliyoruz.

    jvm.bootoptions= -Xms512m –Xmx9999M. 
    hbase.regionserver.wal.codec : org.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec 
    hbase.rpc.timeout 600000 
    phoenix.query.timeoutMs 360000000 
    phoenix.query.maxServerCacheBytes 10737418240 
    phoenix.coprocessor.maxServerCacheTimeToLiveMs 900000 
    hbase.client.scanner.timeout.period 600000 
    phoenix.query.maxGlobalMemoryWaitMs 100000 
    phoenix.query.maxGlobalMemoryPercentage 50 
    hbase.regionserver.handler.count 50 
    

    Özet:

Aşağıda parametrelerdir çekirdek konular katılmak sorgularının Yavaş yürütme olmanın ve veri satırlarının 1 milyonun ötesine gittiğinde sonunda bölge sunucularının çökmesini. İcrada bir sınırlama var mı? Lütfen bir değerlendirme sürecinden geçerken bu sorunları çözmeme yardımcı olun ve ben de Phoenix’ten vazgeçmek istemiyorum! Yukarıdaki sorguları hızlı bir şekilde yürütebiliyorsam, Phoenix'i kullanmakta tereddüt etmem.

Selamlar, varsayılan olarak Shivamohan

cevap

1

Phoenix kullanan belleğe sığdırmak için veri gerektiren karma-katılır. Eğer problemlerle karşılaşırsanız (çok büyük tablolarla), Phoenix'e tahsis edilen bellek miktarını artırabilir (config ayarı) veya bir "ipucu" (yani, SELECT /*+ USE_SORT_MERGE_JOIN*/ FROM ...) sorgulamalarını, aynı olmayan, birleştirme-birleştirme birleştirmelerini kullanacak şekilde ayarlayabilirsiniz. gereklilik. Gelecekte ideal birleştirme algoritmasını otomatik olarak algılamayı planlıyorlar. Ek olarak, Phoenix şu anda yalnızca birleştirme işlemlerinin bir alt kümesini desteklemektedir.

+0

Teşekkürler kliew! Yapılandırma ayarlarını değiştirmeyi denedim (Sorularımdaki son ayarlarıma bakın) ve çalışmasını ancak belirli bir sınıra kadar yaptım. Performans sorunları nedeniyle bir milyon rekorun ötesine geçemedim. Sonunda Phoenix'e HBase'den tam teşekküllü bir SQL'den vazgeçti. Şimdi ham HBaz'ı değerlendiriyoruz. Ve ihtiyaç olarak Phoenix'i kullanabilir. –

+0

"USE_SORT_MERGE_JOIN" "sorgu ipucu", yapılandırma ayarlarına değil, sql sorgusuna eklenir. Bu sorgu ipucunu kullanarak katılmanızı çalıştırmayı denediniz mi? Bu sorgu ipucunu ayarladığınızda, Phoenix çok fazla bellek gerektirmeyen alternatif birleşim algoritması kullanır. – kliew

0

katılmak bir iç Örtmek u? Bir performans optimize özelliği (http://phoenix.apache.org/joins.html) olarak anka belgelerine tanımlanmıştır LHS & RHS konseptini deneyin mü sunucu önbellekte bir karma tablo olarak inşa edilecek katılmak ait LHS Bu nedenle, daha küçük tablonuzun iç birleştirmenin LHS'sini oluşturduğundan emin olun. Oluşturulan ikincil dizinin bir parçasını sorguda seçtiniz mi? Yukarıdakileri denediyseniz ve yine de dakikalar içinde bir gecikme yaşamaya devam ederseniz, Hbase bölge sunucularının belleğini ve sorgunuza hizmet etmek için yeterli olup olmadığını kontrol etmeniz gerekir.