Veri depolamak için HDFS kullanan geleneksel bir çevrimdışı veri ambarı oluşturmak üzere Hive kullanıyorsanız, ambarlarda depolanan veri miktarı arttıkça maliyetler yükselir. Bu durumda, Hive veri ambarının alttaki depolama katmanı olarak OSS-HDFS'i (JindoFS) kullanabilir ve daha iyi okuma/yazma performansı elde etmek için JindoSDK'dan yararlanabilirsiniz.
Önkoşullar
Örneğin, dağıtımınız için Alibaba Cloud ECS kullanıyorsanız bir ECS örneği satın almanız gerekir.
Bir paket için OSS-HDFS hizmeti etkinleştirilmiş ve hizmete erişim yetkilendirilmiştir. Daha fazla bilgi için bkz. OSS-HDFS hizmetini etkinleştirme.
Bir Hive istemcisi dağıtılmıştır.
Yordam
ECS örneğine bağlanın. Daha fazla bilgi için bkz. Bir ECS örneğine bağlanma.
-
JindoSDK'yı yapılandırın.
JindoSDK JAR paketinin en son sürümünü indirin. JindoSDK'yı indirmek için GitHub adresini ziyaret edin.
-
JindoSDK JAR paketini açın.
Aşağıdaki örnek kod,
jindosdk-x.x.x-linux.tar.gzadlı bir paketin nasıl açılacağını gösterir. Farklı bir JindoSDK sürümü kullanıyorsanız paket adını ilgili JAR paketinin adıyla değiştirin.tar zxvf jindosdk-x.x.x-linux.tar.gzNotx.x.x, JindoSDK JAR paketinin sürüm numarasını belirtir.
-
JindoSDK JAR paketini Hive'in classpath yoluna kopyalayın.
cp jindosdk-x.x.x-linux/lib/*.jar $HIVE_HOME/lib/
-
OSS-HDFS uygulama sınıfını ve bir pakete erişmek için kullanılan AccessKey çiftini yapılandırın
-
Hive'in core-site.xml dosyasında OSS-HDFS uygulama sınıfını yapılandırın.
<configuration> <property> <name>fs.AbstractFileSystem.oss.impl</name> <value>com.aliyun.jindodata.oss.JindoOSS</value> </property> <property> <name>fs.oss.impl</name> <value>com.aliyun.jindodata.oss.JindoOssFileSystem</value> </property> </configuration> -
Hive'in core-site.xml dosyasında, OSS-HDFS'nin etkinleştirildiği pakete erişmek için kullanmak istediğiniz AccessKey ID ve AccessKey secret değerlerini belirtin.
<configuration> <property> <name>fs.oss.accessKeyId</name> <value>LTAI******** </value> </property> <property> <name>fs.oss.accessKeySecret</name> <value>KZo1********</value> </property> </configuration>
-
-
OSS-HDFS uç noktasını yapılandırın.
Object Storage Service (OSS) paketlerine erişmek için OSS-HDFS kullanmak istiyorsanız OSS-HDFS uç noktasını belirtmeniz gerekir. OSS-HDFS'e erişim için kullanılan yolu
oss://<Bucket>.<Endpoint>/<Object>biçiminde (örnek:oss://examplebucket.cn-shanghai.oss-dls.aliyuncs.com/exampleobject.txt) yapılandırmanızı öneririz. Uç noktayı yapılandırdıktan sonra JindoSDK, erişim yolundaki belirtilen uç noktaya göre ilgili OSS-HDFS işlemine erişir.OSS-HDFS uç noktasını başka yöntemlerle de yapılandırabilirsiniz. Farklı yöntemlerle yapılandırılan uç noktaların öncelikleri farklıdır. Daha fazla bilgi için bkz. Hızlı başlangıç: EMR olmayan bir kümeyi OSS-HDFS hizmetine bağlama.
ÖnemliYukarıdaki yapılandırmaları tamamladıktan sonra yapılandırmaların etkili olması için Hive'i yeniden başlatmanız gerekir.
-
Hive'e bağlanmak için terminalde aşağıdaki komutu çalıştırın.
Diğer bağlantı yöntemleri için bkz. Hive bağlantı yöntemleri.
hive -
Verileri depolamak için OSS-HDFS kullanın.
Bir veritabanı veya tablo oluştururken, veritabanının veya tablonun depolama yolu olarak bir OSS-HDFS yolunu belirtmek için aşağıdaki yöntemlerden birini kullanabilirsiniz:
-
Yöntem 1: Komutta OSS-HDFS depolama yolunu belirtme
-
Bir veritabanı oluştururken OSS-HDFS depolama yolunu belirtin:
CREATE DATABASE db_on_oss1 LOCATION 'oss://bucket_name.endpoint_name/path/to/db1'; -
Bir tablo oluştururken OSS-HDFS depolama yolunu belirtin:
CREATE TABLE db2.table_on_oss ( id INT, name STRING, age INT ) LOCATION 'oss://bucket_name.endpoint_name/path/to/db2/tablepath';
-
-
Yöntem 2: Hive yapılandırma dosyasında OSS-HDFS depolama yolunu belirtme
Hive Metastore'un hive-site.xml yapılandırma dosyasında hive.metastore.warehouse.dir değerini OSS-HDFS depolama yoluna ayarlayabilir ve Hive Metastore'u yeniden başlatabilirsiniz. Daha sonra oluşturulan veritabanları ve tablolar belirtilen OSS-HDFS depolama yolunda saklanır.
Aşağıdaki örnek kod, hive.metastore.warehouse.dir değerini OSS-HDFS depolama yoluna ayarlama işlemini gösterir:
<configuration> <property> <name>hive.metastore.warehouse.dir</name> <value>oss://bucket_name.endpoint_name/path/to/warehouse</value> </property> </configuration>
-
-
Mevcut bir tabloya bölümler ekleyin.
Tablonun verilerini daha küçük birimlerde depolamak için mevcut bir tabloya bölümler ekleyebilirsiniz. Sorgu koşullarını bölümlere göre belirtebilirsiniz. Bu sayede yalnızca belirtilen koşulları karşılayan bölümler taranır ve sorgu performansı artırılır.
-
Komut sözdizimi
ALTER TABLE <table_name> ADD [IF NOT EXISTS] PARTITION <pt_spec> [PARTITION <pt_spec> PARTITION <pt_spec>...] LOCATION 'location';Aşağıdaki tabloda yukarıdaki komuttaki parametreler açıklanmaktadır.
Parametre
Zorunlu
Açıklama
table_name
Evet
Bölüm eklemek istediğiniz tablonun adı.
IF NOT EXISTS
Hayır
Tabloda aynı ada sahip bir bölüm varsa hatanın atlanmasına neden olan parametre. IF NOT EXISTS parametresi belirtilmezse ve eklemek istediğiniz bölümle aynı ada sahip bir bölüm zaten mevcutsa işlem başarısız olur ve bir hata döndürülür.
pt_spec
Evet
Eklemek istediğiniz bölümler. Bu parametrenin değeri(partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...)biçimindedir. Bu biçimdepartition_colbölüm anahtar sütunlarının adlarını,partition_col_valueise bunların değerlerini temsil eder. Bölüm anahtar sütunlarının adları büyük/küçük harfe duyarlı değildir, değerleri ise büyük/küçük harfe duyarlıdır.
location
Evet
Bir bölümdeki verileri depolamak için kullanılan OSS yolu. -
Örnekler
Aşağıdaki örnek kod, China (Hangzhou) bölgesindeki Aralık 2021 satış kayıtlarını depolamak üzere sale_detail adlı bir tabloya bölüm ekleme ve bölümdeki verilerin depolanacağı OSS yolunu belirtme işlemini gösterir:
ALTER TABLE sale_detail ADD IF NOT EXISTS PARTITION (sale_date='202112', region='hangzhou') LOCATION 'oss://examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/path/2021/';
-