Herhangi biri, bazı dosya yükleme/indirme işlemleri için, Namenode HA kurulumu ile HDFS'ye başvurmak için java uygulamasını kullanıyorsanız, Bu isteğin ilk önce nerede olduğunu söyleyebilir mi? Yani müşteri hangi adenoidin aktif olduğunu nasıl anlardı? Bazı iş akışı türü şeması veya istek adımlarını ayrıntılı olarak açıklayan bir şey sağlarsanız (baştan sona), bu harika olurdu. Hadoop küme HA ile yapılandırılmışNamenode yüksek kullanılabilirlikli müşteri talebi
cevap
, o zaman böyle HDF'ler-site.xml dosyasını içinde namenode kimliğe sahip olur:
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>namenode1,namenode2</value>
</property>
Hangisi NameNode aktif hale gelecektir ilk başlatılır. Kümeyi, tercih ettiğiniz düğümün ilk önce başlayacak şekilde belirli bir sırayla başlatmayı seçebilirsiniz. Eğer namenode mevcut durumunu belirlemek istiyorsanız
kullanabileceğiniz getServiceStatus() komutu: Sürücü sınıfını yazarken
hdfs haadmin -getServiceState <machine-name>
Eh, yapılandırma nesnesi aşağıdaki özellikleri ayarlamanız gerekir :
public static void main(String[] args) throws Exception {
if (args.length != 2){
System.out.println("Usage: pgm <hdfs:///path/to/copy> </local/path/to/copy/from>");
System.exit(1);
}
Configuration conf = new Configuration(false);
conf.set("fs.defaultFS", "hdfs://nameservice1");
conf.set("fs.default.name", conf.get("fs.defaultFS"));
conf.set("dfs.nameservices","nameservice1");
conf.set("dfs.ha.namenodes.nameservice1", "namenode1,namenode2");
conf.set("dfs.namenode.rpc-address.nameservice1.namenode1","hadoopnamenode01:8020");
conf.set("dfs.namenode.rpc-address.nameservice1.namenode2", "hadoopnamenode02:8020");
conf.set("dfs.client.failover.proxy.provider.nameservice1","org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider");
FileSystem fs = FileSystem.get(URI.create(args[0]), conf);
Path srcPath = new Path(args[1]);
Path dstPath = new Path(args[0]);
//in case the same file exists on remote location, it will be overwritten
fs.copyFromLocalFile(false, true, srcPath, dstPath);
}
talep nameservice1 gidip başka namenode durum (etkin/bekleme) uyarınca Hadoop küme tarafından ele olacaktır.
fazla ayrıntı için, taşıma HDF'ler istemci istekleri kilit kişilerle HDFS High availability
kontrol edin Namenode HA mimarisini bakınız.
bu istek ilk sen? İstemci hangi adının aktif olduğunu nasıl anlardı?
İstemci/sürücü için hangi adenoidin etkin olduğu önemli değil. çünkü adlandırma kimliği yerine adenoid kimliği yerine HDFS ile sorgu yapıyoruz. nameservice, istemci isteklerini otomatik olarak aktif adenode aktarır.
Örnek: hdfs://nameservice_id/rest/of/the/hdfs/path
Açıklama:
Bu nasıl hdfs://nameservice_id/
çalışır ve işin içinde Confs nelerdir?
dosya hdfs-site.xml
yılında
buna bir id ekleyerek nameservice oluşturun
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
<description>Logical name for this new nameservice</description>
</property>
Şimdi küme
dfs.ha.namenodes.[$nameservice ID]
yılında namenodes belirlemek için namenode kimlikleri belirtmek (burada nameservice_id
mycluster
olan):
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2</value>
<description>Unique identifiers for each NameNode in the nameservice</description>
</property>
Sonra istemciler DFS İstemci hangi NameNode belirlemek için bu sınıf kullanması için Aktif NameNode ulaşmak için kullanmak HDF'ler Java sınıfı belirtmek
dfs.namenode.rpc-address.[$nameservice ID].[$name node ID]
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>machine1.example.com:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>machine2.example.com:8020</value>
</property>
Bundan sonra namenode ana namenode kimlikleri bağlantı şu anda müşteri isteklerine hizmet vermektedir.
<property>
<name>dfs.client.failover.proxy.provider.mycluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
Son olarak URL bu yapılandırma değişikliklerinden sonra böyle olacak HDF'ler.
hdfs://mycluster/<file_lication_in_hdfs>
'da bir kod örneğine ihtiyacım var java'yı uygulama olarak kullanıyorum ve HDFS birleşik kümesinde bazı yapılandırma nesnesiyle ilgili kılavuzlara ihtiyacım var. Tüm etkin adlar tüm gelen istemci isteklerini yatay olarak nasıl paylaşabilir? Bunun için java'da bir kod örneğine ihtiyacım var – user2846382
- 1. Müşteri Sırrı
- 2. Hadoop java.io.IOException: Ben namenode -format.This ran
- 3. Datanode hbase ve namenode başlamıyor hortonworks
- 4. CDH4 ikincil adı düğümü başlatılamıyor: NameNode adresi
- 5. Orta katmandaki talebi değiştirin?
- 6. POST talebi, Alamofire 4
- 7. Jersey: Asıl talebi yazdır
- 8. aynı kaynak talebi
- 9. Youtube Talebi engellendi
- 10. JAVA: http gönderi talebi
- 11. Çapraz-Kaynak Talebi
- 12. OpenTSDB'de yığın talebi nedir?
- 13. Android Volley PUT talebi
- 14. Müşteri varlık çağrıda
- 15. OutputCache Yer = Müşteri
- 16. Django Genel Görünüm - Erişim talebi
- 17. Önizleme CURL talebi göndermeden önce
- 18. Denetleyiciden http iletme talebi oluştur
- 19. Perl HTTP Bilgi talebi() issue
- 20. okhttp gönderi talebi başarılı değil
- 21. WCF Data Service - Hata talebi
- 22. node.js - socket.io ayrıştırma talebi URL
- 23. CORS talebi - neden çerezler gönderilmiyor?
- 24. Retrofit kullanarak toplu iş talebi
- 25. Ajax talebi - iç sunucu hatası
- 26. Güncelleme bağlantı müşteri girdiye dayalı
- 27. ServiceStack Sabun 1.2 HTTPS Müşteri
- 28. Raylar PDFKit müşteri tarafında bekle
- 29. Müşteri Arama E-posta ile
- 30. Swagger Müşteri API anahtarı doğrulaması
Sanırım sorumu doğru anlamadınız. Ben istek yapmak için java uygulama kullanıyorum .. Benim soruları yapmak hangi sorularım var. Bunun için hangi namonun aktif olduğunu bilmem gerekiyor – user2846382
@ user2846382: yapılandırmayı sürücü sınıfında ayarlamanız gerekiyor. Lütfen güncellenmiş cevaba bakın. –
, Değerli cevabı için çok teşekkürler ... Benim için çalışıyor .. – user2846382