2009-10-07 23 views
18

Muszę zapisywać dane w Hadoop (HDFS) z zewnętrznych źródeł, takich jak okna systemu Windows. W tej chwili kopiowałem dane do namenodu i stosowałem polecenie put HDFS, aby je zaimportować do klastra. Podczas przeglądania kodu nie widziałem do tego interfejsu API. Mam nadzieję, że ktoś może mi pokazać, że się mylę i istnieje łatwy sposób kodowania zewnętrznych klientów przeciwko HDFS.Zapisywanie danych do Hadoop

Odpowiedz

11

Install Cygwin, Hadoop zainstalować lokalnie (wystarczy binarne i pliki konfiguracyjne, które wskazują na swojej NN - nie ma potrzeby, aby faktycznie uruchomienia usługi), uruchom hadoop fs -copyFromLocal /path/to/localfile /hdfs/path/

Można również korzystać z nowego pulpitu Cloudera przesłać plik za pośrednictwem interfejsu WWW, ale może to nie być dobra opcja dla gigantycznych plików.

Istnieje również nakładka WebDAV dla HDFS, ale nie wiem, jak stabilna/niezawodna.

17

Istnieje interfejs API w języku Java. Możesz go użyć, dołączając kod Hadoop do swojego projektu. Javadoc jest bardzo pomocne w ogóle, ale oczywiście trzeba wiedzieć, czego szukasz * g * http://hadoop.apache.org/common/docs/

dla danego problemu, zajrzyj na: http://hadoop.apache.org/common/docs/current/api/org/apache/hadoop/fs/FileSystem.html (dotyczy to najnowszy wypuść, sprawdź inne JavaDocs dla różnych wersji!)

Typowe połączenie będzie następujące: Filesystem.get(new JobConf()).create(new Path("however.file")); Powoduje to przesłanie strumienia, który można obsłużyć standardowym językiem JavaIO.

+3

dokładniej (i prowadzony za pomocą hadoop Jar code.jar {classname}) org.apache.hadoop.fs.FileSystem.get (New org.apache.hadoop.mapred.JobConf()). Utworzenia (nowy Org .apache.hadoop.fs.Path ("yet.file")); –

13

Dla problemu ładowania danych, które musiałem umieścić w HDFS, postanowiłem rozwiązać problem.

Zamiast przesyłać pliki do HDFS z serwera, na którym rezydują, napisałem zadanie Java Map/Reduce, w którym program odczytuje plik z serwera plików (w tym przypadku przez https), a następnie zapisuje go bezpośrednio do HDFS (przez Java API).

Lista plików jest odczytywana z wejścia. Następnie mam zewnętrzny skrypt, który zapełnia plik listą plików do pobrania, przesyła plik do HDFS (przy użyciu hadoop dfs -put), a następnie uruchamia mapę/redukuje pracę z przyzwoitą liczbą twórców map.

Daje mi to doskonałą wydajność przesyłania, ponieważ wiele plików jest jednocześnie zapisywanych/zapisywanych.

Może nie jest to odpowiedź, której szukałeś, ale miejmy nadzieję, że i tak pomocna :-).

12

Około 2 lata po mojej ostatniej odpowiedzi pojawiły się teraz dwie nowe opcje - Hoop/HttpFS i WebHDFS.

Jeśli chodzi o Hoop, został on po raz pierwszy ogłoszony w Cloudera's blog i można go pobrać z github repository. Udało mi się przekonać tę wersję do porozmawiania co najmniej z Hadoopem 0.20.1, prawdopodobnie z nieco starszymi wersjami.

Jeśli używasz Hadoop 0.23.1, który w momencie pisania nie jest jeszcze opublikowany, Hoop jest częścią Hadoop jako jego własnym komponentem, HttpFS. Ta praca została wykonana jako część HDFS-2178. Hoop/HttpFS może być proxy nie tylko dla HDFS, ale także dla innych systemów plików kompatybilnych z Hadoop, takich jak Amazon S3.

Hoop/HttpFS działa jako samodzielna usługa.

Istnieje również WebHDFS, który działa jako część usług NameNode i DataNode. Zapewnia również interfejs API REST, który, jeśli dobrze rozumiem, jest zgodny z interfejsem API HttpFS. WebHDFS jest częścią Hadoop 1.0, a jedną z jego głównych cech jest to, że zapewnia on lokalność danych - podczas wysyłania żądania odczytu nastąpi przekierowanie do komponentu WebHDFS w datanodzie, w którym znajdują się dane.

Który z komponentów do wyboru zależy od aktualnej konfiguracji i Twoich potrzeb. Jeśli potrzebujesz teraz interfejsu HTTP REST do HDFS, a masz wersję, która nie zawiera WebHDFS, zaczynasz od Hoop z repozytorium github, wydaje się być najłatwiejszą opcją. Jeśli używasz wersji, która zawiera WebHDFS, wybrałbym tę opcję, chyba że potrzebujesz niektórych funkcji Hoop ma brak WebHDFS (dostęp do innych systemów plików, ograniczenie przepustowości itp.).

3

Wygląda na to, że istnieje strona dedykowana teraz za to co http://wiki.apache.org/hadoop/MountableHDFS:

tych projektów (wymienionych poniżej) pozwalają HDFS być zamontowana (w większości smaki Unix) jako standardowy system plików przy użyciu polecenia mount. Po zamontowaniu użytkownik może operować na instancji hdfs przy użyciu standardowych narzędzi Unixowych, takich jak "ls", "cd", "cp", "mkdir", "find", "grep", lub użyć standardowych bibliotek Posix jak otwarte, pisać, czytać, bliską z C, C++, Python, Ruby, Perl, Java, bash itp

Później opisuje te projekty

  • contrib/topikowy DFS jest zbudowany na bezpieczniku, niektóre C klej, libhdfs i hadoop-dev.jar
  • bezpieczników-j-HDFS jest zbudowany na bezpiecznik, bezpiecznik dla Java i Hadoop-dev.jar
  • HDFS bezpiecznik - projekt Google Code jest bardzo podobna do contrib/topikowy DFS
  • WebDAV - HDFS narażony mapa zasobu webdav - zawiera zamknięty system plików zgodny z hdfs, który obsługuje odczyt/zapis Dostęp NFS
  • Proxy HDFS NFS - eksportuje HDFS jako NFS bez użycia bezpiecznika. Obsługuje protokół Kerberos i ponownie zamawia zapisy, więc są one kolejno zapisywane w hdfs .

nie próbowałem żadnej z nich, ale będę aktualizował odpowiedź najszybciej jak mam te same potrzeby jak OP

0

Teraz można również spróbować użyć Talend, który zawiera komponenty dla Integracja z Hadoop.

Powiązane problemy