一、sqoop1.4.6 to hbase1.2 in hue4.1
CM安装 cdh 5.15.x,因想用简单的sqoop1所以parce装的sqoop1 client,经测试报:SQOOP_CONF_DIR找不到,mysql drive no find ,检查发现安装目录和classpath都有,依然如此,后找文档说是cdh只支持sqoop2,sqoop1需要手配置 oozie/libext并上传到hdfs下,链接https://www.cloudera.com/documentation/enterprise/latest/topics/cdh_oozie_sqoop_jdbc.html,翻译如下 :
在Oozie中使用Sqoop动作
Sqoop 1不附带第三方JDBC驱动程序。您必须单独下载它们并将它们保存到在/ var / lib中/ sqoop /Oozie服务器上的目录。有关更多信息,请参阅使用命令行设置Apache Sqoop。
建议
-
Cloudera建议您不要将Sqoop CLI命令与Oozie Shell Action一起使用。此类部署不可靠,并且在升级和配置更改期间容易中断。
- 要将数据导入Hive,请使用Sqoop Action和Hive2 Action的组合。
- SQoop Action简单地将数据摄入HDFS。
- Hive2 Action将数据从HDFS加载到Hive中。
部署和配置Oozie Sqoop1操作JDBC驱动程序
在开始此过程之前,请确认您的Sqoop1 JDBC驱动程序是否存在 在/ var / lib中/ sqoop。
SSH到Oozie服务器主机并执行以下命令在HDFS上部署和配置驱动程序:
cd / var / lib / sqoop
sudo -u hdfs hdfs dfs -mkdir / user / oozie / libext
sudo -u hdfs hdfs dfs -chown oozie:oozie / user / oozie / libext
sudo -u hdfs hdfs dfs -put /opt/cloudera/parcels/SQOOP_NETEZZA_CONNECTOR/sqoop-nz-connector*.jar / user / oozie / libext /
sudo -u hdfs hdfs dfs -put /opt/cloudera/parcels/SQOOP_TERADATA_CONNECTOR/lib/*.jar / user / oozie / libext /
sudo -u hdfs hdfs dfs -put /opt/cloudera/parcels/SQOOP_TERADATA_CONNECTOR/sqoop-connector-teradata*.jar / user / oozie / libext /
sudo -u hdfs hdfs dfs -put /var/lib/sqoop/*.jar / user / oozie / libext /
sudo -u hdfs hdfs dfs -chown oozie:oozie /user/oozie/libext/*.jar
sudo -u hdfs hdfs dfs -chmod 755 /user/oozie/libext/*.jar
sudo -u hdfs hdfs dfs -ls / user / oozie / libext
#[/ user / oozie / libext的样本内容]
-rwxr-xr-x 3 oozie oozie 959987 2016-05-29 09:58 /user/oozie/libext/mysql-connector-java.jar
-rwxr-xr-x 3 oozie oozie 358437 2016-05-29 09:58 /user/oozie/libext/nzjdbc3.jar
-rwxr-xr-x 3 oozie oozie 2739670 2016-05-29 09:58 /user/oozie/libext/ojdbc6.jar
-rwxr-xr-x 3 oozie oozie 3973162 2016-05-29 09:58 /user/oozie/libext/sqoop-connector-teradata-1.5c5.jar
-rwxr-xr-x 3 oozie oozie 41691 2016-05-29 09:58 /user/oozie/libext/sqoop-nz-connector-1.3c5.jar
-rwxr-xr-x 3 oozie oozie 2405 2016-05-29 09:58 /user/oozie/libext/tdgssconfig.jar
-rwxr-xr-x 3 oozie oozie 873860 2016-05-29 09:58 /user/oozie/libext/terajdbc4.jar
配置Oozie Sqoop1操作工作流JDBC驱动程序
使用以下步骤配置Oozie Sqoop1操作工作流:
- 确认HDFS中存在Sqoop1 JDBC驱动程序。为此,请通过SSH连接到Oozie Server主机并运行以下命令:
sudo -u hdfs hdfs dfs -ls / user / oozie / libext
- 在Oozie中配置以下Oozie Sqoop1 Action工作流变量 job.properties 文件如下:
oozie.use.system.libpath = true oozie.libpath = / user / oozie / libext
然而并无卵用,后国外社区 上有说driver传hdfs://usr/share/lib/sqoop下,试了下, SQOOP_CONF_DIR依然找不到,mysql drive no find 解决了但不能用sql user name 登录,找不到用户,而这一切在命令行下完全正常,报错如下:
Sqoop command arguments : list-databases --connect jdbc:mysql://172.16.12.44:3306/ --username bigdata_ro --password ******** Fetching child yarn jobs tag id : oozie-ed23d117051393fc0989abc9110ba08d 2018-07-31 18:58:46,734 [main] INFO org.apache.hadoop.yarn.client.RMProxy - Connecting to ResourceManager at master/172.16.60.151:8032 Child yarn jobs are found - ================================================================= >>> Invoking Sqoop command line now >>> 2018-07-31 18:58:46,957 [main] WARN org.apache.sqoop.tool.SqoopTool - $SQOOP_CONF_DIR has not been set in the environment. Cannot check for additional configuration. 2018-07-31 18:58:47,013 [main] INFO org.apache.sqoop.Sqoop - Running Sqoop version: 1.4.6-cdh5.15.0 2018-07-31 18:58:47,027 [main] WARN org.apache.sqoop.tool.BaseSqoopTool - Setting your password on the command-line is insecure. Consider using -P instead. 2018-07-31 18:58:47,039 [main] WARN org.apache.sqoop.ConnFactory - $SQOOP_CONF_DIR has not been set in the environment. Cannot check for additional configuration. 2018-07-31 18:58:47,124 [main] INFO org.apache.sqoop.manager.MySQLManager - Preparing to use a MySQL streaming resultset. 2018-07-31 18:58:47,467 [main] ERROR org.apache.sqoop.manager.CatalogQueryManager - Failed to list databases java.sql.SQLException: Access denied for user 'bigdata_ro'@'172.16.60.149' (using password: YES) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1078) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4187) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4119) .... <<< Invocation of Sqoop command completed <<< No child hadoop job is executed. Intercepting System.exit(1) <<< Invocation of Main class completed <<< Failing Oozie Launcher, Main class [org.apache.oozie.action.hadoop.SqoopMain], exit code [1] Oozie Launcher failed, finishing Hadoop job gracefully
至此检查所有相关配置文件发现,hue sqoop根本没走 sqooq脚本,所以所有设置无效,而是走oozie的一个类:org.apache.oozie.action.hadoop.SqoopMain,所以可能Hue里只支持sqoop2,帮暂时搁置,先导入数据 以后研究,,,,,,,
二、sqoop1.4.6 to hbase1.2 in shell:
# sqoop list-databases --connect jdbc:mysql://172.16.12.44:3306/che100 --username bigdata_ro --password *******
Please set $ACCUMULO_HOME to the root of your Accumulo installation.
18/07/31 19:15:15 INFO sqoop.Sqoop: Running Sqoop version: 1.4.6-cdh5.15.0
18/07/31 19:15:15 WARN tool.BaseSqoopTool: Setting your password on the command-line is insecure. Consider using -P instead.
18/07/31 19:15:15 INFO teradata.TeradataManagerFactory: Loaded connector factory for 'Cloudera Connector Powered by Teradata' on version 1.7c5
18/07/31 19:15:15 INFO manager.MySQLManager: Preparing to use a MySQL streaming resultset.
information_schema
admin
......
# sqoop import --connect jdbc:mysql://172.16.12.44:3306/che100 --username bigdata_ro --password ******* --table tc_district --hbase-table tc_district --column-family f1 --hbase-row-key id --check-column update_dt --incremental lastmodified --last-value 0 -m 1
# hbase shell
hbase(main):001:0> list
TABLE
tc_district
1 row(s) in 0.2410 seconds
hue hive建外表关联hbase表并刷新结构到impala:
CREATE EXTERNAL TABLE che100.tc_district(
id INT,
dname STRING,
pid INT,
update_dt TIMESTAMP)
ROW FORMAT SERDE 'org.apache.hadoop.hive.hbase.HBaseSerDe'
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key, f1:dname, f1:pid, f1:update_dt") //注意 这里key 是默认的不能用导入 的rwokey 字段 id,提示多一列,其它注意数据类型转化,INT ,TINYINT,BOOLEAN, TIMESTAMP,decimal(11,6)
TBLPROPERTIES("hbase.table.name" = "tc_district");
hue impala 刷新后找到相关表后查询测试:
INVALIDATE METADATA
SELECT * FROM `che100`.`tc_district` LIMIT 100
至此一切正常,但想从hbase browse里看hbase数据,表都刷不出来:文档得知为了安全,hbase thrift 不允许直接对外访问,因为这样所有人知道你的thrift 地址都可以直接链的hbase服务器了:https://www.cloudera.com/documentation/enterprise/latest/topics/cdh_sg_hbase_security.html翻译如下:
想学习如何自定义权限认证,请参考过往记忆的博文:HiveServer2(Spark ThriftServer)自定义权限认证
HBase身份验证
要配置HBase安全性,请完成以下任务:
- 配置HBase身份验证:您必须为HBase服务器和客户端建立一种机制,以便使用HDFS,ZooKeeper和彼此安全地识别自己。这可以确保主机是他们声称的主机。注意:
-
要使HBase能够使用Kerberos安全性,必须执行在CDH 5和ZooKeeper安全配置中配置Hadoop安全性中的安装和配置步骤。
-
虽然HBase Thrift服务器可以连接到安全的Hadoop集群,但是从客户端到HBase Thrift服务器的访问不受保护。要加密客户端与HBase Thrift服务器之间的通信,请参阅为HBase Thrift服务器配置TLS / SSL。
-
- 配置HBase授权:您必须为允许客户端访问的资源建立规则。有关更多信息,请参阅配置HBase授权。
使用Hue HBase App
Hue包含一个HBase应用程序,允许您通过Thrift代理服务器与HBase交互。因为Hue位于Thrift服务器和客户端之间,所以Thrift服务器假定所有HBase操作都来自色调用户而不是客户。确保只允许Hue中的用户执行分配给他们自己的凭据的HBase操作,而不是那些色调用户,必须启用HBase模拟。
Hue团队发布于2015年3月25日,HBase,Video
Hue附带了一个HBase应用程序,可以让您创建表格,搜索行,阅读单元格内容......只需点击几下。我们现在很高兴发布最后一个缺失的安全性(在即将到来的Hue 3.8中可用),以便让应用程序生产准备就绪!
HBase应用程序通过代理服务器(称为Thrift Server V1)与HBase通信,代理服务器将命令转发给HBase。因为Hue位于代理服务器和实际用户之间,所以代理服务器认为所有操作(例如创建表,扫描某些数据......)来自'hue'用户而不是实际的Web用户。这显然不是很安全!
为了确保HBase应用程序真正安全,我们需要:
- 确保Hue中的实际登录用户使用其权限执行操作。这是假冒的工作。
- 确保Hue服务器仅发送这些调用。这是Kerberos强身份验证的工作。
注意
我们假设您已在群集中安装了HBase Thrift Server。如果使用Cloudera Manager,请转到HBase服务实例列表,然后单击“添加角色实例”并选择“HBase Thrift Server”。
模拟
现在可以将HBase配置为提供模拟(使用或不使用Kerberos)。在我们的例子中,这意味着用户可以通过Hue向HBase发送命令,而不会失去他们将在自己的凭据(而不是'hue'用户)下运行的事实。
首先,确保在hbase-site.xml中有这个:
1 2 3 4 五 6 7 8 9 |
|
注意
如果使用Cloudera Manager,可以通过在HBase服务的配置搜索中键入“thrift”并检查前两个结果来完成。
然后在core-site.xml中检查HBase是否有权冒充某人:
1 2 3 4 五 6 7 8 9 |
|
最后检查Hue是否指向其hue.ini中指定的HBase的本地配置目录:
1 2 |
|
注意
如果您使用的是Cloudera Manager,则可能需要在Hue配置中选择HBase Thrift服务器,并在hue_safety_valve.ini的Hue服务高级配置代码段(安全阀)中输入类似的内容。
1 2 |
|
就是这样,启动HBase Thrift Server和Hue,你就准备好了!
Kerberos的安全性
现在Hue可以向HBase Thrift Server发送命令并告诉他以某个用户身份执行它们,我们需要确保只允许Hue执行此操作。我们使用Kerberos来强烈验证HBase服务的用户。在我们的例子中,HBase Thrift服务器只有在来自Hue用户时才会接受命令。
确保HBase配置了Kerberos,并且您在Hue指向的hbase-site.xml中具有此功能:
1 2 3 4 五 6 7 8 9 |
|
注意
如果在没有模拟的情况下使用Cloudera Manager或常规Thrift,请确保设置“HBase Thrift Authentication”hbase.thrift.security.qop必须设置为以下之一:
- auth-conf:身份验证,完整性和机密性检查
- auth-int:身份验证和完整性检查
- auth:仅限身份验证
如果使用Cloudera Manager,请转至“Hbase服务>配置>服务范围/安全:HBase Thrift身份验证”,然后选择以下三个选项之一。
与上面类似,请确保hue.ini指向带有hbase-site.xml的有效目录:
1 2 |
|
要么
1 2 |
|
注意
如果使用模拟,请确保HTTP / _HOST主体位于其HBase Thrift服务器的密钥表中。
重启HBase和Hue,它们现在应该全部安全!
结论
您现在可以确定Hue用户只能查看或修改HBase级别允许的内容。Hue保证如果用户不能在HBase shell中执行某个操作,它将通过Hue完全相同(Hue就像HBase顶部的'view')。
请注意,HBase选择通过HTTP Thrift支持模拟,因此在使用模拟时常规Thrift不起作用。之前的Kerberos支持现在也很有意义,因为所有操作都不再来自Hue用户了!只需点击一下即可完成所有这些配置步骤。
现在是时候玩表示例并打开HBase给所有用户了!
注意
此错误意味着上面的'hadoop.proxyuser.hbase.hosts'/'hadoop.proxyuser.hbase.groups'属性不正确:
1 2 3 |
|
注意
您现在可能会看到如下所示的权限错误。
1 |
|
这是因为:
- 您正在使用模拟,而您的用户'bob'没有足够的HBase权限
- 您没有使用模拟,而'hue'用户没有足够的HBase权限
解决此问题的一种快速方法是只提供所有权限。显然,这不建议用于真正的设置,而是阅读有关HBase访问控制的更多信息!
1 2 3 |
|
注意
如果你得到一个“Api错误:TSocket读取0字节”,这是因为Hue不知道Thrift服务器正在期待Thrift HTTP。仔细检查Hue是否指向包含hbase.regionserver.thrift.http属性设置为true的hbase-site.xml。
暂时的黑客将是在hue.ini中插入:
1 2 |
|
注意
“Api错误:超出最大递归深度”表示HBase Thrift服务器未作为HTTP Kerberos服务运行。
在最新的Hue 3.8中,您现在应该只得到401错误。
注意
使用模拟时未测试缓冲传输模式,但可能有效。
注意
如果您收到此错误:
1 |
|
您很可能会点击 https://issues.apache.org/jira/browse/HBASE-13069。还要确保HTTP / _HOST主体位于其HBase Thrift Server的keytab中。请注意,作为后续行动,您可能会获得https://issues.apache.org/jira/browse/HBASE-14471。
还有一个框架传输问题尚未得到支持。我们建议使用缓冲传输。
至此如果还有错误,请移步到hue登录用户侧点 hue administers,或访问http://master:8889/hue/about/会自动检查配置:
Checking current configuration
Configuration files located in /run/cloudera-scm-agent/process/332-hue-HUE_SERVER
Potential misconfiguration detected. Fix and restart Hue.
OOZIE_EMAIL_SERVER |
Email notifications is disabled for Workflows and Jobs as SMTP server is localhost. |
HBase Browser |
Failed to authenticate to HBase Thrift Server, check authentication configurations. |
在查相关文档解决:但看了最新版hue4.1之后,第一句话让你看到原来它是支持SQOOP1的,只是使用方式完全界面化了 ,且配置文件根本不在相关conf 下,而是每次启动会动态创建一个,omg --!:
发布者色相队在2017年8月24日,在顺化4.1,SQL,Sqoop
明年将在Hue 4.1和CDH 6中推出令人兴奋的新功能。其中之一是Hue的全新工具,使用Apache Sqoop 1将关系数据库中的数据导入HDFS文件或Hive表。它使我们能够通过交互式UI只需几次点击即可将大量数据带入集群。此Sqoop连接器已添加到Hue 的现有导入数据向导中。
过去,使用Sqoop命令行界面导入数据可能是一个麻烦且低效的过程。该任务期望用户对Sqoop有很好的了解。例如,他们需要将一系列必需的参数放在一起,这些参数具有特定的语法,这将导致容易出错。通常,正确地获取这些可能需要几个小时的工作。现在有了Hue的新功能,您可以在几分钟内完成Sqoop的工作。进口在YARN上运行,由Oozie安排。本教程提供了有关如何执行此操作的分步指南。
教程
你需要什么
首先,您需要在其中配置Apache Sqoop,Apache YARN,Apache Oozie和Hue的正在运行的集群。
接下来,您需要安装特定于数据库的JDBC jar。为此,请将它们放在HDFS上的某个目录中。
要获得MySQL自动完成功能,需要配置Lib RDBMS和笔记本:http://gethue.com/custom-sql-query-editors/
此外,您需要通过在Hue ini中的索引器部分下将enable_sqoop设置为true来打开该功能。
注意:
如果使用Cloudera Manager,请检查如何在hue.ini安全阀中添加属性并将上述参数值放在那里。
选择源表
现在让我们开始吧!
在本教程中,我们将从Teradata导入表到Apache Hive。单击左侧窗格中的汉堡菜单,然后选择屏幕左下角的选项以导航到Hue的索引器部分。从“类型”下拉列表中选择“外部数据库”。
选择数据库有两种模式:
- 预配置 - 允许您快速选择管理员已在Hue中配置的数据库。
- 自定义 - 允许您通过在真实自助服务模式下提供必要的凭据来访问所需的任何数据库。
注意:任一模式中的JDBC选项都允许我们使用JDBC特定凭据指向数据库。
我们现在将选择自定义模式,提供数据库凭据并启动测试连接。测试通过后,下拉列表将填充数据库名称列表。在数据库选择时,将填充表名列表。在桌面选择上,快速预览非常方便。您还可以选中“所有表”选项以一次性导入特定数据库的所有表。
选择目的地
完成源页面后,单击“下一步”以导航到目标页面。在这里,选择Destination类型,它可以是HDFS文件或Hive表。还要选择Sqoop运行导入作业所需的所有数据库特定jar。由于我们选择了Teradata,我们将选择所有teradata特有的罐子。
我们还可以为我们的导入作业添加额外的选项,如映射器编号,输出数据格式,分隔符,详细模式,拆分选项,压缩模式等。文档部分对此进行了详细说明。
我们甚至可以重命名列名称,并通过取消选中“保持”复选框来过滤掉不需要的列。
现在,让我们点击“提交”按钮。在这样做时,会生成一个Sqoop作业,可以在Hue的作业浏览器中进行跟踪。
完成工作后,我们可以通过对新导入的数据执行Hive / Impala查询,利用Hue的编辑器进行数据处理和查询分析。
文档
自己组装lib目录
我们需要执行Sqoop导入作业所需的所有库。该要求特定于正在使用的数据库。下面列出了一些流行数据库所需的罐子:
- Oracle:oracle-connector-java.jar
- MySQL:mysql-connector-java.jar
- Teradata:teradata-connector-java.jar,sqoop-connector-teradata-1.3c5.jar,tdgssconfig.jar,terajdbc4.jar
- PostgreSQL:postgresql-connector-java.jar
设置
属性提供了许多其他选项来进一步调整导入操作以适应您的特定工作负载。
- Libs:Sqoop 1所需的数据库特定库
- 映射器:使用n个映射任务并行导入
- 拆分方:用于拆分工作单位的表格列
- 详细模式:在工作时打印更多信息
- 压缩模式:启用压缩
- 格式:数据可以以3种不同的格式导入:文本,avro,序列
- 字段:设置字段分隔符(仅在格式为文本时启用)
- 行:设置行尾字符(仅在格式为文本时启用)
- (可选)封闭方式:设置包含字符的字段(仅在格式为文本时启用)
支持的数据库
Sqoop 1支持的任何数据库。
故障排除
在导入过程中,列的数据类型可以更改为HDFS / Hive兼容的数据类型。导入表时,主键用于为映射器创建拆分。如果没有主键,则需要明确选择拆分列; 如果不这样做会导致导入失败。在执行全表导入时,如果所有表都没有主键,则导入作业将失败。此外,如果由于某种原因作业失败,您可以从作业跟踪器中的日志中找出失败的原因。如需进一步帮助,请访问https://sqoop.apache.org/docs/1.4.6/
来源:oschina
链接:https://my.oschina.net/u/1998220/blog/1920466