Hadoop

Z MetaCentrum
Přejít na: navigace, hledání

(English version)

Základní informace

  • frontend: hador.ics.muni.cz
  • HDFS namenode: hador-c1.ics.muni.cz, hador-c2.ics.muni.cz
  • YARN Resource Manager: hador-c1.ics.muni.cz, hador-c2.ics.muni.cz
  • MapRedure History Server: hador-c2.ics.muni.cz
  • uzly: hador1.ics.muni.cz - hador24.ics.muni.cz

Dostupné hardwarové prostředky

  • CPU: 24(+3) strojů x 16 jader x 2 hyperthreading (Intel® Xeon® CPU E5-2630 v3 @ 2.40GHz)
  • RAM: 24(+3) strojů x 128 GB
  • disk: 240 x 3.6 TB (data), 78 x 0.91 TB (OS), 48 x 3.6 TB (rezervováno pro Ceph)
    • data: 887.4 TB (4 replikace x 221.9 TB)
    • režie a metadata: 71 TB (2 x 5.5 TB HDFS metadata, 3.2 TB OS, 24 x 1.7 TB + 5.5 TB scratch, raid overhead, ...)

Instalovaný SW

Hadoop 2.6.0 - distributed storage and processing of very large data sets

HBase 1.2.0 - distributed, scalable, big data store

Hive 1.1.0 - data warehouse software facilitates

Hue 3.9.0 - Analytics Workbench for self-service (GUI)

Pig 0.12.0 - platform for analyzing large data sets

Spark 1.6.0 - fast and general engine for large-scale data processing

Používá se Cloudera 5.14.0 s patchem HADOOP-12617 (Java 8 + SPNEGO).

Kterak se přihlásit

Frontend je na hador.ics.muni.cz:

kinit
ssh -K hador.ics.muni.cz

(volba -K forwarduje existující Kerberos lístek)

Dlouhé úlohy

Pro delší úlohy je nutno ještě inicializovat lístek s delším renewable time (po přihlášení na hador.ics.muni.cz):

kinit -r 7d

Úloha na pozadí

Při odhlášení se Kerberos lístky mažou. Pokud úloha běží na pozadí a má běžet i po odhlášení, je potřeba si lístky zkopírovat a nastavit KRB5CCNAME.

Lze využít wrapper /usr/local/bin/launch, který se o vše postará:

kinit -r 7d
nohup launch program ...

Nebo lze pracovat s lístky přímo:

hawking@hador:~$ klist 
Credentials cache: FILE:/tmp/krb5cc_60303_Iw6Y1NTTCf
        Principal: hawking@META
hawking@hador:~$ cp /tmp/krb5cc_60303_Iw6Y1NTTCf /tmp/krb5cc_`id -u`_long
hawking@hador:~$ export KRB5CCNAME=FILE:/tmp/krb5cc_`id -u`_long
hawking@hador:~$ nohup program ...

Po skončení je vhodné provést kdestroy (se stejným KRB5CCNAME):

hawking@hador:~$ export KRB5CCNAME=FILE:/tmp/krb5cc_`id -u`_long
hawking@hador:~$ kdestroy

Vzdálený klient

Popis konfigurace vlastního klienta viz Hadoop Klient.

Hadoop

Informace

  • max. délka úlohy omezena:
    • max. refresh time uživatelského Kerberos ticketu
    • max. lifetime uživatelských tokenů Hadoopu, 7 dní
  • zabezpečení dat: řešen přístup k datům, konzistence dat, ale lokálně se nešifruje

Příklady

Na frontendu (viz #Základní informace), přístup přes Kerberos:

hadoop jar /usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar pi 2 10

hdfs dfs -put /etc/hadoop/conf input
hadoop jar /usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar grep input output 'dfs[a-z.]+'
hdfs dfs -cat output/*

hadoop jar /usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar randomwriter out/

hadoop jar /usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar teragen 100 gendata
hadoop jar /usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar terasort gendata sorted
hadoop jar /usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar teravalidate gendata reportdata

Získání logů

yarn application -list
yarn logs -applicationId APPLICATION_ID

Webový přístup

Přes web lze přistupovak k datům (WebHDFS, read-only) nebo jsou k dispozici servisní informace clusteru. Pro webový přístup k Hadoop clusteru je nutný protokol SPNEGO (Kerberos přes HTTP(S)).

Prohlížeč

Postup povolení protokolu SPNEGO v prohlížeči:

  • firefox [1]:
    1. about:config
    2. nastavit network.negotiate-auth.trusted-uris=ics.muni.cz (nebo čárkami oddělené hostnamy serverů)
    3. pro Windows:
      1. nainstalovat Kerberos
      2. nastavit také network.auth.use-sspi=false
  • chrome: [2]
    • parametr --auth-server-whitelist="hador*.ics.muni.cz"
    • trvalé nastavení: vyrobit soubor /etc/opt/chrome/policies/managed/hadoop-metacentrum.json:
      {
        "AuthServerWhitelist": "hador*.ics.muni.cz",
        "AuthNegotiateDelegateWhitelist": "hador*.ics.muni.cz"
      }
    • Windows: SPNEGO a Kerberos zřejmě není podporováno

curl

Příklady použití curl a SPNEGO.

Protože máme HA prostředí, je nutné jako server použít aktivní HDFS Namenode: hador-c1.ics.muni.cz nebo hador-c2.ics.muni.cz.

Detaily o souboru:

curl -i --negotiate -u : "https://hador-c1.ics.muni.cz:50470/webhdfs/v1/<PATH>?op=LISTSTATUS"

Stažení souboru:

curl -L --negotiate -u : "https://hador-c1.ics.muni.cz:50470/webhdfs/v1/<PATH>?op=OPEN" -o file

Upload souboru (dvoukrokově):

HDFS_PATH='/user/...'
LOCAL_FILE='...'

# vytvoří soubor a vrátí odkaz na datový uzel v 'Location'
curl --negotiate -u : -i -X PUT "https://hador-c1.ics.muni.cz:50470/webhdfs/v1${HDFS_PATH}?op=CREATE" | tee curl.log

# URL z headru 'Location'
DATA_URL="`grep ^Location: curl.log | cut -c11- | tr -d '\r'`"

# upload dat
curl -i -T ${LOCAL_FILE} ${DATA_URL}

Servisní stránky

Cluster:

Jednotlivé uzly (X=1..24):

NFS

Na hador.ics.muni.cz je HDFS lokálně připojeno přes NFS bránu do adresáře /hdfs.

Pro HDFS-NFS bránu platí následující omezení:

  • je řádově pomalejší (cca 10⨯)
  • soubory nelze přepisovat

HBase

Viz Hadoop HBase.

Hive

Informace

Správa přístupů:

  • řešena na úrovni HDFS ==> po vytvoření databáze je možno řídit práva na HDFS adresáři /user/hive/warehouse/${DATABASE}
  • výchozí práva na databázi po vytvoření jsou včetně čtení a zápisu pro všechny uživatele Hadoopu

Připojení

  • beeline klient ("$DBNAME" nahradit za název databáze):
 beeline -u "jdbc:hive2://hador-c1.ics.muni.cz:10000/$DBNAME;principal=hive/hador-c1.ics.muni.cz@ICS.MUNI.CZ"
  • beeline klient - připojení přes příkaz '!connect' ("DBNAME" nahradit za název databáze):
 beeline
   !connect jdbc:hive2://hador-c1.ics.muni.cz:10000/DBNAME;principal=hive/hador-c1.ics.muni.cz@ICS.MUNI.CZ  
  • java kód:
String url = "jdbc:hive2://hador-c1.ics.muni.cz:10000/DBNAME;principal=hive/hador-c1.ics.muni.cz@ICS.MUNI.CZ"
Connection con = DriverManager.getConnection(url);
  • hive klient (deprecated, podporovaný je beeline klient):
hive

Detaily viz hive cli --help.

Integrace s HBase

https://cwiki.apache.org/confluence/display/Hive/HBaseIntegration

Integrace se Spark

Viz. #Příklady 4.

Příklady

DBNAME="`id -un`_test"
JDBC_URL="jdbc:hive2://hador-c1.ics.muni.cz:10000/$DBNAME;principal=hive/hador-c1.ics.muni.cz@ICS.MUNI.CZ"

# vyrobení databáze <USER>_test
beeline -u $JDBC_URL -e "CREATE DATABASE $DBNAME"

# použití <USER>_test
beeline -u $JDBC_URL
  CREATE TABLE pokes (foo INT, bar STRING);
  CREATE TABLE invites (foo INT, bar STRING) PARTITIONED BY (ds STRING);
  SHOW TABLES;
  SELECT a.foo FROM invites a WHERE a.ds='2008-08-15';
  DESCRIBE invites;
  
  INSERT INTO pokes VALUES (1, 'A'), (2, 'B');
  INSERT INTO invites PARTITION (ds='2015-01-01') SELECT * FROM pokes;
  INSERT INTO invites PARTITION (ds='2015-12-11') SELECT * FROM pokes;

Hue

Informace

URL: https://hador.ics.muni.cz

Autentizace přes SPNEGO, viz #Prohlížeč.

Přístup k agregovaným logům úloh je nutno řešit z řádky (např. výstupy na konzoli):

yarn logs -applicationId APPLICATION_ID

Seznam aplikací

  • HDFS browser
  • Metastore browser
  • Job browser
  • Hive
  • Pig (výsledky nutno získat přes yarn logs)

Pig

Spuštění:

pig
pig -e PŘÍKAZ
pig -f SKRIPT

Příklady

fs -put /etc/passwd .

A = load 'passwd' using PigStorage(':');
B = foreach A generate $0 as id;
dump B;

fs -rm ./passwd

Spark

Informace

Podporovány režimy:

  • Spark přes YARN (cluster): --master yarn --deploy-mode cluster
  • Spark přes YARN (client): --master yarn --deploy-mode client
  • lokální Spark: --master local

Příklady

  • výpočet pí
spark-submit --class org.apache.spark.examples.SparkPi --deploy-mode cluster --master yarn `ls /usr/lib/spark/lib/spark-examples-*.jar` 10
# (nahradit APPLICATION_ID za skutečné ID)
yarn logs --applicationId APPLICATION_ID
  • volání map/reduce
    (nahradit LOGIN za uživatelské jméno)
hdfs dfs -put /etc/passwd

spark-shell --master yarn
  val file = sc.textFile("hdfs://hador-cluster/user/LOGIN/passwd")
  val counts = file.flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey(_ + _)
  counts.saveAsTextFile("hdfs://hador-cluster/user/LOGIN/spark-output")

hdfs dfs -cat ./spark-output/\*
hdfs dfs -rm -r ./spark-output ./passwd
  • použití Hive metastore
    (nahradit LOGIN za uživatelské jméno, předpokládá databázi vyrobenou v #Příklady_2)
spark-shell
  sqlContext.sql("FROM LOGIN_test.pokes SELECT *").collect().foreach(println)
  • puštění vlastní aplikace

Je potřeba zkopírovat /usr/lib/spark/lib/spark-assembly.jar, přibalit tam své knihovny, nakopírovat na HDFS a předhodit Sparku:

# (nahradit /user/hawking/lib/spark-assembly.jar za skutečnouu cestu na HDFS)
spark-submit --master yarn --deploy-mode cluster \
  --conf spark.yarn.jar=hdfs:///user/hawking/lib/spark-assembly.jar \
  ...