Sqoop — это популярный инструмент передачи данных для Hadoop. Sqoop позволяет легко импортировать и экспортировать данные из структурированных хранилищ данных, таких как реляционные базы данных, корпоративные хранилища данных и хранилища данных NoSQL. Sqoop также интегрируется с основанными на Hadoop системами, такими как Hive, HBase и Oozie.
В этой записи блога я расскажу о различных возможностях управления паролями в Sqoop. Sqoop — очень стабильный и простой в использовании инструмент для передачи данных в Hadoop и из него. Однако, если вы хотите автоматизировать процесс импорта / экспорта, пароль должен быть в тексте плана, и этим можно злоупотреблять. Вот несколько решений этой проблемы.
1. Используйте защищенный файл в файловой системе
Создайте отдельные файлы для Prod и Development (всегда полезно использовать отдельные учетные записи для Prod и Development).
Установить права доступа к файлам в зависимости от пользователя
ProdFile, только пользователи Prod имеют доступ
1
|
-rw------- 1 vgunnuProd staff 1 .1M Oct 6 2014 password.txt |
Файл Dev, Предоставление группам доступа для чтения — для обмена файлом между членами команды
1
2
3
4
5
|
-rw-r----- 1 vgunnuDev staff 1 .1M Oct 6 2014 password.txt sqoop import --connect jdbc:mysql: //mapr.com/sqoop \ --username sqoop \ --password-file /mapr/democluster/opt/passwords/prodpass.txt --table vgunnu |
2. Чтение паролей из базы данных
Ведение таблиц базы данных Dev и PROD и использование разрешений MySQL для блокировки таблиц паролей PROD с целью предоставления доступа определенным пользователям из edgodes Prod.
1
2
3
4
5
6
7
|
# Read password from database # Select Password from mapr.Prod where applicationdb= 'mapr.vgunnu' echo -n $Password > /mapr/democluster/opt/passwords/prodpass.txt sqoop import --connect jdbc:mysql: //mapr.com/sqoop \ --username vgunnu \ --password-file /mapr/democluster/opt/passwords/prodpass.txt --table vgunnu rm /mapr/democluster/opt/passwords/prodpass.txt |
3. Используйте базу данных и ожидайте сценарий
В приведенном выше варианте вместо сохранения пароля в файл мы можем использовать скрипт Linux Spawn и Expect.
01
02
03
04
05
06
07
08
09
10
11
12
|
#!/bin/bash # Read password from database # Select Password from mapr.Prod where applicationdb= 'mapr.vgunnu' # Read password to variable pwd /usr/bin/expect «EOF spawn sqoop import --connect jdbc:mysql: //mapr.com/sqoop --username vgunnu -P --table vgunnu expect "Enter password:" send "$pwd\r\n" set timeout - 1 # Wait for Sqoop to finish expect "~~~~~~~~~~~~" wait EOF |
4. Используйте API Hadoop CredentialProvider
В Hadoop 2.6 была представлена фундаментальная функция — Credential API. API CredentialProvider в Hadoop позволяет разделять приложения и то, как они хранят свои необходимые пароли / секреты. В Sqoop 1.4.5 хранилище ключей API credentail поддерживается Sqoop.
Чтобы создать зашифрованное хранилище ключей учетных данных:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
|
[mapr @maprdemo ~]$ hadoop credential create msql.vgunnudb -provider jceks: //maprfs/user/mapr/mysql.password.m.jceks Enter password: Enter password again: msql.vgunnudb has been successfully created. org.apache.hadoop.security.alias.JavaKeyStoreProvider has been updated. [mapr @maprdemo ~]$ hadoop credential list -provider jceks: //maprfs/user/mapr/mysql.password.m.jceks Listing aliases for CredentialProvider: jceks: //maprfs/user/mapr/mysql.password.m.jceks msql.vgunnudb sqoop import -Dhadoop.security.credential.provider.path=jceks: //maprfs/user/mapr/mysql.password.m.jceks \ --connect jdbc:mysql: //mapr.com/sqoop \ --username vgunnu \ --password-file /mapr/democluster/opt/passwords/prodpass.txt --table vgunnu \ -–password-alias msql.vgunnudb |
В этом сообщении вы узнали о различных параметрах управления паролями в Sqoop. Если у вас есть какие-либо дополнительные вопросы, пожалуйста, задавайте их в разделе комментариев ниже.
Ссылка: | Основные советы по управлению паролями в Sqoop от нашего партнера по JCG Венката Гунну в блоге Mapr . |