sqoop sqoop2
Sqoop是流行的Hadoop数据传输工具。 Sqoop允许从结构化数据存储(如关系数据库,企业数据仓库和NoSQL数据存储)轻松导入和导出数据。 Sqoop还与Hive,HBase和Oozie等基于Hadoop的系统集成。
在此博客文章中,我将介绍可用于在Sqoop中管理密码的各种选项。 Sqoop是一个非常稳定且易于使用的工具,可用于将数据传入和传出Hadoop。 但是,如果要自动执行导入/导出过程,则密码必须在计划文本中,这可能会被滥用。 以下是应对这一挑战的一些解决方案。
1.在文件系统中使用受保护的文件
为产品和开发创建单独的文件(将单独的帐户用于产品和开发总是一个好习惯)。
根据用户设置文件权限
ProdFile,只有Prod用户可以访问
-rw------- 1 vgunnuProd staff 1.1M Oct 6 2014 password.txt
开发文件,授予组读取权限–在团队成员之间共享文件
-rw-r----- 1 vgunnuDev staff 1.1M Oct 6 2014 password.txtsqoop import --connect jdbc:mysql://mapr.com/sqoop \--username sqoop \--password-file /mapr/democluster/opt/passwords/prodpass.txt --table vgunnu
2.从数据库中读取密码
维护Dev和PROD数据库表,并利用MySQL授权权限锁定PROD密码表,以允许从Prod边缘节点访问某些用户。
# 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.使用数据库和Expect脚本
在上述选项中,我们可以使用linux spawn and Expect脚本来代替将密码保存到文件中。
#!/bin/bash
# Read password from database
# Select Password from mapr.Prod where applicationdb='mapr.vgunnu'
# Read password to variable pwd
/usr/bin/expect «EOFspawn sqoop import --connect jdbc:mysql://mapr.com/sqoop --username vgunnu -P --table vgunnuexpect "Enter password:"send "$pwd\r\n"set timeout -1 # Wait for Sqoop to finishexpect "~~~~~~~~~~~~"wait
EOF
4.使用Hadoop CredentialProvider API
在Hadoop 2.6中,引入了一项基本功能–凭据API。 Hadoop中的CredentialProvider API允许分离应用程序以及它们如何存储所需的密码/秘密。 在Sqoop 1.4.5中,Sqoop支持credentail API密钥库。
生成加密的credentail密钥库:
[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.vgunnudbsqoop 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中管理密码的不同选项。 如果您还有其他问题,请在下面的评论部分中提问。
翻译自: https://www.javacodegeeks.com/2016/03/key-tips-managing-passwords-sqoop.html
sqoop sqoop2