Skip to content

Latest commit

 

History

History
128 lines (104 loc) · 5.29 KB

commands.md

File metadata and controls

128 lines (104 loc) · 5.29 KB

Datei erzeugen und in HDFS ablegen

Textdatei anlegen, neues Verzeichnis im HDFS erstellen und die Datei dahin kopieren (geht auch mit -copyFromLocal, aber -put ist kürzer):

[root@sandbox hadoop]# echo "Dies ist die Textdatei fuer BigData." > test.txt
[root@sandbox hadoop]# hdfs dfs -ls
Found 3 items
drwx------   - root hdfs          0 2016-11-03 16:21 .staging
drwxr-xr-x   - root hdfs          0 2016-11-03 16:21 out1
-rw-r--r--   1 root hdfs     249321 2016-11-03 16:17 pg14591.txt
[root@sandbox hadoop]# hdfs dfs -mkdir test
[root@sandbox hadoop]# hdfs dfs -put test.txt test
[root@sandbox hadoop]# hdfs dfs -ls test
Found 1 items
-rw-r--r--   1 root hdfs         37 2016-11-03 20:15 test/test.txt
```

Dateigröße anzeigen:
```
[root@sandbox hadoop]# hdfs dfs -du -h test/test.txt
37  test/test.txt
```

Mit dem Parameter -h wird die Dateigröße in einer für Menschen besser lesbaren Form dargestellt. Das macht aber bei einer Datei, die nur 37 Byte groß ist, keinen Unterschied.

### Zwei Dateien per HDFS mergen

```
[root@sandbox hadoop]# echo "Dies ist der zweite Teil der Datei." > test2.txt
[root@sandbox hadoop]# hdfs dfs -put test2.txt test/test2.txt
[root@sandbox hadoop]# hdfs dfs -ls test
Found 2 items
-rw-r--r--   1 root hdfs         37 2016-11-03 20:15 test/test.txt
-rw-r--r--   1 root hdfs         36 2016-11-03 20:26 test/test2.txt
[root@sandbox hadoop]# hdfs dfs -du test
37  test/test.txt
36  test/test2.txt
```

Beide Dateien in eine mergen und auf dem lokalen Filesystem ablegen:
[root@sandbox hadoop]# hdfs dfs -getmerge test merged_file.txt

### Backup und Recovery mit Snapshots

Snapshot des Verzeichnis *test* erstellen:

```
[root@sandbox hadoop]# hdfs dfs -createSnapshot test snapshot01
16/11/03 20:36:33 WARN retry.RetryInvocationHandler: Exception while invoking ClientNamenodeProtocolTranslatorPB.createSnapshot over null. Not retrying because try once and fail.
org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.hdfs.protocol.SnapshotException): Directory is not a snapshottable directory: /user/root/test
...
createSnapshot: Directory is not a snapshottable directory: /user/root/test
```

Das Verzeichnis muss erst "snapshottable" gemacht werden:

```
[root@sandbox hadoop]# hdfs dfsadmin -allowSnapshot test
16/11/03 20:37:37 WARN retry.RetryInvocationHandler: Exception while invoking ClientNamenodeProtocolTranslatorPB.allowSnapshot over null. Not retrying because try once and fail.
org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.AccessControlException): Access denied for user root. Superuser privilege is required
```

Access denied --> ab hier nehmen wir den Superuser hdfs, der ausreichend Rechte hat.

```
[root@sandbox hadoop]# su hdfs
[hdfs@sandbox hadoop]$ hdfs dfs -mkdir /snaptest
[hdfs@sandbox hadoop]$ hdfs dfs -ls /snaptest
[hdfs@sandbox hadoop]$ hdfs dfs -createSnapshot /snaptest snap01
16/11/03 20:54:25 WARN retry.RetryInvocationHandler: Exception while invoking ClientNamenodeProtocolTranslatorPB.createSnapshot over null. Not retrying because try once and fail.
org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.hdfs.protocol.SnapshotException): Directory is not a snapshottable directory: /snaptest
createSnapshot: Directory is not a snapshottable directory: /snaptest
[hdfs@sandbox hadoop]$ hdfs dfsadmin -allowSnapshot /snaptest
Allowing snaphot on /snaptest succeeded
```

Datei für den Test erzeugen, im HDFS ablegen und Snapshot erstellen:

```
[hdfs@sandbox hadoop]$ hdfs dfs -put merged_file.txt /snaptest
[hdfs@sandbox hadoop]$ hdfs dfs -createSnapshot /snaptest snap01
Created snapshot /snaptest/.snapshot/snap01
```

Inhalt des Snapshots anzeigen:
```
[hdfs@sandbox hadoop]$ hdfs dfs -ls /snaptest/.snapshot/snap01
Found 1 items
-rw-r--r--   1 hdfs hdfs         73 2016-11-03 21:03 /snaptest/.snapshot/snap01/merged_file.txt
```

Datei hinzufügen, neuen Snapshot erzeugen und die beiden Snapshots vergleichen:

```
[hdfs@sandbox hadoop]$ hdfs dfs -put test.txt /snaptest
[hdfs@sandbox hadoop]$ hdfs dfs -createSnapshot /snaptest snap02
Created snapshot /snaptest/.snapshot/snap02
[hdfs@sandbox hadoop]$ hdfs snapshotDiff /snaptest snap01 snap02
Difference between snapshot snap01 and snapshot snap02 under directory /snaptest:
M       .
+       ./test.txt
```

Verzeichnis *snaptest* löschen:
```
[hdfs@sandbox hadoop]$ hdfs dfs -rm -r /snaptest
…
rm: Failed to move to trash: hdfs://sandbox.hortonworks.com:8020/snaptest: The directory /snaptest cannot be deleted since /snaptest is snapshottable and already has snapshots
```

Das Verzeichnis kann wegen der Snapshots nicht gelöscht werden.

Datei test.txt aus dem Verzeichnis snaptest löschen und mithilfe des Snapshots wiederherstellen:

```
[hdfs@sandbox hadoop]$ hdfs dfs -rm /snaptest/test.txt
16/11/03 21:17:27 INFO fs.TrashPolicyDefault: Moved: 'hdfs://sandbox.hortonworks.com:8020/snaptest/test.txt' to trash at: hdfs://sandbox.hortonworks.com:8020/user/hdfs/.Trash/Current/snaptest/test.txt
[hdfs@sandbox hadoop]$ hdfs dfs -ls /snaptest
Found 1 items
-rw-r--r--   1 hdfs hdfs         73 2016-11-03 21:03 /snaptest/merged_file.txt
[hdfs@sandbox hadoop]$ hdfs dfs -cp /snaptest/.snapshot/snap02/test.txt /snaptest
[hdfs@sandbox hadoop]$ hdfs dfs -ls /snaptest
Found 2 items
-rw-r--r--   1 hdfs hdfs         73 2016-11-03 21:03 /snaptest/merged_file.txt

-rw-r--r--   1 hdfs hdfs         37 2016-11-03 21:18 /snaptest/test.txt
```