您的位置:首页 > 产品设计 > UI/UE

sqoop1.4.6 to hbase1.2 in hue4.1躺坑总结

2018-07-31 19:53 295 查看
一、sqoop1.4.6tohbase1.2inhue4.1

CM安装cdh5.15.x,因想用简单的sqoop1所以parce装的sqoop1client,经测试报:SQOOP_CONF_DIR找不到,mysqldrivenofind,检查发现安装目录和classpath都有,依然如此,后找文档说是cdh只支持sqoop2,sqoop1需要手配置oozie/libext并上传到hdfs下,链接https://www.cloudera.com/documentation/enterprise/latest/topics/cdh_oozie_sqoop_jdbc.html,翻译如下:

在Oozie中使用Sqoop动作

Sqoop1不附带第三方JDBC驱动程序。您必须单独下载它们并将它们保存到在/var/lib中/sqoop/Oozie服务器上的目录。有关更多信息,请参阅使用命令行设置ApacheSqoop。

建议

Cloudera建议您不要将SqoopCLI命令与OozieShellAction一起使用。此类部署不可靠,并且在升级和配置更改期间容易中断。

要将数据导入Hive,请使用SqoopAction和Hive2Action的组合。

SQoopAction简单地将数据摄入HDFS。

Hive2Action将数据从HDFS加载到Hive中。

部署和配置OozieSqoop1操作JDBC驱动程序

在开始此过程之前,请确认您的Sqoop1JDBC驱动程序是否存在在/var/lib中/sqoop。

SSH到Oozie服务器主机并执行以下命令在HDFS上部署和配置驱动程序:

cd/var/lib/sqoop sudo-uhdfshdfsdfs-mkdir/user/oozie/libext sudo-uhdfshdfsdfs-chownoozie:oozie/user/oozie/libext sudo-uhdfshdfsdfs-put/opt/cloudera/parcels/SQOOP_NETEZZA_CONNECTOR/sqoop-nz-connector*.jar/user/oozie/libext/ sudo-uhdfshdfsdfs-put/opt/cloudera/parcels/SQOOP_TERADATA_CONNECTOR/lib/*.jar/user/oozie/libext/ sudo-uhdfshdfsdfs-put/opt/cloudera/parcels/SQOOP_TERADATA_CONNECTOR/sqoop-connector-teradata*.jar/user/oozie/libext/ sudo-uhdfshdfsdfs-put/var/lib/sqoop/*.jar/user/oozie/libext/ sudo-uhdfshdfsdfs-chownoozie:oozie/user/oozie/libext/*.jar sudo-uhdfshdfsdfs-chmod755/user/oozie/libext/*.jar sudo-uhdfshdfsdfs-ls/user/oozie/libext #[/user/oozie/libext的样本内容] -rwxr-xr-x3oozieoozie9599872016-05-2909:58/user/oozie/libext/mysql-connector-java.jar -rwxr-xr-x3oozieoozie3584372016-05-2909:58/user/oozie/libext/nzjdbc3.jar -rwxr-xr-x3oozieoozie27396702016-05-2909:58/user/oozie/libext/ojdbc6.jar -rwxr-xr-x3oozieoozie39731622016-05-2909:58/user/oozie/libext/sqoop-connector-teradata-1.5c5.jar -rwxr-xr-x3oozieoozie416912016-05-2909:58/user/oozie/libext/sqoop-nz-connector-1.3c5.jar -rwxr-xr-x3oozieoozie24052016-05-2909:58/user/oozie/libext/tdgssconfig.jar -rwxr-xr-x3oozieoozie8738602016-05-2909:58/user/oozie/libext/terajdbc4.jar

配置OozieSqoop1操作工作流JDBC驱动程序

使用以下步骤配置OozieSqoop1操作工作流:

确认HDFS中存在Sqoop1JDBC驱动程序。为此,请通过SSH连接到OozieServer主机并运行以下命令:sudo-uhdfshdfsdfs-ls/user/oozie/libext

在Oozie中配置以下OozieSqoop1Action工作流变量job.properties文件如下:oozie.use.system.libpath=true oozie.libpath=/user/oozie/libext

然而并无卵用,后国外社区上有说driver传hdfs://usr/share/lib/sqoop下,试了下,SQOOP_CONF_DIR依然找不到,mysqldrivenofind解决了但不能用sqlusername登录,找不到用户,而这一切在命令行下完全正常,报错如下:

Sqoopcommandarguments: list-databases --connect jdbc:mysql://172.16.12.44:3306/ --username bigdata_ro --password ******** Fetchingchildyarnjobs tagid:oozie-ed23d117051393fc0989abc9110ba08d 2018-07-3118:58:46,734[main]INFOorg.apache.hadoop.yarn.client.RMProxy-ConnectingtoResourceManageratmaster/172.16.60.151:8032 Childyarnjobsarefound- ================================================================= >>>InvokingSqoopcommandlinenow>>> 2018-07-3118:58:46,957[main]WARNorg.apache.sqoop.tool.SqoopTool-$SQOOP_CONF_DIRhasnotbeensetintheenvironment.Cannotcheckforadditionalconfiguration. 2018-07-3118:58:47,013[main]INFOorg.apache.sqoop.Sqoop-RunningSqoopversion:1.4.6-cdh5.15.0 2018-07-3118:58:47,027[main]WARNorg.apache.sqoop.tool.BaseSqoopTool-Settingyourpasswordonthecommand-lineisinsecure.Considerusing-Pinstead. 2018-07-3118:58:47,039[main]WARNorg.apache.sqoop.ConnFactory-$SQOOP_CONF_DIRhasnotbeensetintheenvironment.Cannotcheckforadditionalconfiguration. 2018-07-3118:58:47,124[main]INFOorg.apache.sqoop.manager.MySQLManager-PreparingtouseaMySQLstreamingresultset. 2018-07-3118:58:47,467[main]ERRORorg.apache.sqoop.manager.CatalogQueryManager-Failedtolistdatabases java.sql.SQLException:Accessdeniedforuser'bigdata_ro'@'172.16.60.149'(usingpassword:YES) atcom.mysql.jdbc.SQLError.createSQLException(SQLError.java:1078) atcom.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4187) atcom.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4119) .... <<<InvocationofSqoopcommandcompleted<<< Nochildhadoopjobisexecuted. InterceptingSystem.exit(1) <<<InvocationofMainclasscompleted<<< FailingOozieLauncher,Mainclass[org.apache.oozie.action.hadoop.SqoopMain],exitcode[1] OozieLauncherfailed,finishingHadoopjobgracefully

至此检查所有相关配置文件发现,huesqoop根本没走sqooq脚本,所以所有设置无效,而是走oozie的一个类:org.apache.oozie.action.hadoop.SqoopMain,所以可能Hue里只支持sqoop2,帮暂时搁置,先导入数据以后研究,,,,,,,

二、sqoop1.4.6tohbase1.2inshell:

#sqooplist-databases--connectjdbc:mysql://172.16.12.44:3306/che100--usernamebigdata_ro--password*******
Pleaseset$ACCUMULO_HOMEtotherootofyourAccumuloinstallation.
18/07/3119:15:15INFOsqoop.Sqoop:RunningSqoopversion:1.4.6-cdh5.15.0
18/07/3119:15:15WARNtool.BaseSqoopTool:Settingyourpasswordonthecommand-lineisinsecure.Considerusing-Pinstead.
18/07/3119:15:15INFOteradata.TeradataManagerFactory:Loadedconnectorfactoryfor'ClouderaConnectorPoweredbyTeradata'onversion1.7c5
18/07/3119:15:15INFOmanager.MySQLManager:PreparingtouseaMySQLstreamingresultset.
information_schema
admin
......

#sqoopimport--connectjdbc:mysql://172.16.12.44:3306/che100--usernamebigdata_ro--password*******--tabletc_district--hbase-tabletc_district--column-familyf1--hbase-row-keyid--check-columnupdate_dt--incrementallastmodified--last-value0-m1

#hbaseshell
hbase(main):001:0>list
TABLE
tc_district
1row(s)in0.2410seconds

huehive建外表关联hbase表并刷新结构到impala:

CREATEEXTERNALTABLEche100.tc_district(

idINT,

dnameSTRING,

pidINT,

update_dtTIMESTAMP)

ROWFORMATSERDE'org.apache.hadoop.hive.hbase.HBaseSerDe'

STOREDBY'org.apache.hadoop.hive.hbase.HBaseStorageHandler'

WITHSERDEPROPERTIES("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");

hueimpala刷新后找到相关表后查询测试:

INVALIDATEMETADATA

SELECT*FROM`che100`.`tc_district`LIMIT100

至此一切正常,但想从hbasebrowse里看hbase数据,表都刷不出来:文档得知为了安全,hbasethrift不允许直接对外访问,因为这样所有人知道你的thrift地址都可以直接链的hbase服务器了:https://www.cloudera.com/documentation/enterprise/latest/topics/cdh_sg_hbase_security.html翻译如下:

想学习如何自定义权限认证,请参考过往记忆的博文:HiveServer2(SparkThriftServer)自定义权限认证

HBase身份验证

要配置HBase安全性,请完成以下任务:

配置HBase身份验证:您必须为HBase服务器和客户端建立一种机制,以便使用HDFS,ZooKeeper和彼此安全地识别自己。这可以确保主机是他们声称的主机。注意:

要使HBase能够使用Kerberos安全性,必须执行在CDH5和ZooKeeper安全配置中配置Hadoop安全性中的安装和配置步骤。

虽然HBaseThrift服务器可以连接到安全的Hadoop集群,但是从客户端到HBaseThrift服务器的访问不受保护。要加密客户端与HBaseThrift服务器之间的通信,请参阅为HBaseThrift服务器配置TLS/SSL。

以下部分描述了如何将ApacheHBase和CDH5与Kerberos安全性一起使用:

为HBase配置Kerberos身份验证

配置安全HBase复制

配置HBase客户端TGT续订周期

配置HBase授权:您必须为允许客户端访问的资源建立规则。有关更多信息,请参阅配置HBase授权。

使用HueHBaseApp

Hue包含一个HBase应用程序,允许您通过Thrift代理服务器与HBase交互。因为Hue位于Thrift服务器和客户端之间,所以Thrift服务器假定所有HBase操作都来自色调用户而不是客户。确保只允许Hue中的用户执行分配给他们自己的凭据的HBase操作,而不是那些色调用户,必须启用HBase模拟。

Hue团队发布于2015年3月25日,HBase,Video

38评论

Hue附带了一个HBase应用程序,可以让您创建表格,搜索行,阅读单元格内容......只需点击几下。我们现在很高兴发布最后一个缺失的安全性(在即将到来的Hue3.8中可用),以便让应用程序生产准备就绪!

HBase应用程序通过代理服务器(称为ThriftServerV1)与HBase通信,代理服务器将命令转发给HBase。因为Hue位于代理服务器和实际用户之间,所以代理服务器认为所有操作(例如创建表,扫描某些数据......)来自'hue'用户而不是实际的Web用户。这显然不是很安全!

为了确保HBase应用程序真正安全,我们需要:

确保Hue中的实际登录用户使用其权限执行操作。这是假冒的工作。

确保Hue服务器仅发送这些调用。这是Kerberos强身份验证的工作。

注意

我们假设您已在群集中安装了HBaseThriftServer。如果使用ClouderaManager,请转到HBase服务实例列表,然后单击“添加角色实例”并选择“HBaseThriftServer”。

模拟

现在可以将HBase配置为提供模拟(使用或不使用Kerberos)。在我们的例子中,这意味着用户可以通过Hue向HBase发送命令,而不会失去他们将在自己的凭据(而不是'hue'用户)下运行的事实。

首先,确保在hbase-site.xml中有这个:

1
2
3
4

6
7
8
9
<property>
<name>hbase.thrift.support.proxyuser</name>
<value>true</value>
</property>

<property>
<name>hbase.regionserver.thrift.http</name>
<value>true</value>
</property>
注意

如果使用ClouderaManager,可以通过在HBase服务的配置搜索中键入“thrift”并检查前两个结果来完成。

然后在core-site.xml中检查HBase是否有权冒充某人:

1
2
3
4

6
7
8
9
<property>
<name>hadoop.proxyuser.hbase.hosts</name>
<value>*</value>
</property>

<property>
<name>hadoop.proxyuser.hbase.groups</name>
<value>*</value>
</property>
最后检查Hue是否指向其hue.ini中指定的HBase的本地配置目录:

1
2
[hbase]
hbase_conf_dir=/etc/hbase/conf
注意

如果您使用的是ClouderaManager,则可能需要在Hue配置中选择HBaseThrift服务器,并在hue_safety_valve.ini的Hue服务高级配置代码段(安全阀)中输入类似的内容。

1
2
[hbase]
hbase_conf_dir={{HBASE_CONF_DIR}}
就是这样,启动HBaseThriftServer和Hue,你就准备好了!

Kerberos的安全性

现在Hue可以向HBaseThriftServer发送命令并告诉他以某个用户身份执行它们,我们需要确保只允许Hue执行此操作。我们使用Kerberos来强烈验证HBase服务的用户。在我们的例子中,HBaseThrift服务器只有在来自Hue用户时才会接受命令。

确保HBase配置了Kerberos,并且您在Hue指向的hbase-site.xml中具有此功能:

1
2
3
4

6
7
8
9
<property>
<name>hbase.security.authentication</name>
<value>KERBEROS</value>
</property>

<property>
<name>hbase.thrift.kerberos.principal</name>
<value>hbase/_HOST@ENT.CLOUDERA.COM</value>
</property>
注意

如果在没有模拟的情况下使用ClouderaManager或常规Thrift,请确保设置“HBaseThriftAuthentication”hbase.thrift.security.qop必须设置为以下之一:

auth-conf:身份验证,完整性和机密性检查

auth-int:身份验证和完整性检查

auth:仅限身份验证

如果使用ClouderaManager,请转至“Hbase服务>配置>服务范围/安全:HBaseThrift身份验证”,然后选择以下三个选项之一。

与上面类似,请确保hue.ini指向带有hbase-site.xml的有效目录:

1
2
[hbase]
hbase_conf_dir=/etc/hbase/conf
要么

1
2
[hbase]
hbase_conf_dir={{HBASE_CONF_DIR}}
注意

如果使用模拟,请确保HTTP/_HOST主体位于其HBaseThrift服务器的密钥表中。

重启HBase和Hue,它们现在应该全部安全!

结论

您现在可以确定Hue用户只能查看或修改HBase级别允许的内容。Hue保证如果用户不能在HBaseshell中执行某个操作,它将通过Hue完全相同(Hue就像HBase顶部的'view')。

请注意,HBase选择通过HTTPThrift支持模拟,因此在使用模拟时常规Thrift不起作用。之前的Kerberos支持现在也很有意义,因为所有操作都不再来自Hue用户了!只需点击一下即可完成所有这些配置步骤。

现在是时候玩表示例并打开HBase给所有用户了!



像往常一样随意评论色调用户列表或@gethue!

注意

此错误意味着上面的'hadoop.proxyuser.hbase.hosts'/'hadoop.proxyuser.hbase.groups'属性不正确:

1
2
3
ApiError:Error500User:hbaseisnotallowedtoimpersonateromainHTTPERROR500Problemaccessing/.
Reason:User:hbaseisnotallowedtoimpersonatebobCausedby:javax.servlet.ServletException:
User:hbaseisnotallowedtoimpersonatebobatorg.apache.hadoop.hbase.thrift.ThriftHttpServlet.doPost(ThriftHttpServlet.java:117)at
注意

您现在可能会看到如下所示的权限错误。

1
ApiError:org.apache.hadoop.hbase.security.AccessDeniedException:Insufficientpermissions(user=admin,scope=default,action=CREATE)...
这是因为:

您正在使用模拟,而您的用户'bob'没有足够的HBase权限

您没有使用模拟,而'hue'用户没有足够的HBase权限

解决此问题的一种快速方法是只提供所有权限。显然,这不建议用于真正的设置,而是阅读有关HBase访问控制的更多信息!

1
2
3
sudo-uhbasehbaseshell

hbase(main):004:0>grant'bob','RWC'
注意

如果你得到一个“Api错误:TSocket读取0字节”,这是因为Hue不知道Thrift服务器正在期待ThriftHTTP。仔细检查Hue是否指向包含hbase.regionserver.thrift.http属性设置为true的hbase-site.xml。

暂时的黑客将是在hue.ini中插入:

1
2
[hbase]
use_doas=true
注意

“Api错误:超出最大递归深度”表示HBaseThrift服务器未作为HTTPKerberos服务运行。

在最新的Hue3.8中,您现在应该只得到401错误。

注意

使用模拟时未测试缓冲传输模式,但可能有效。

注意

如果您收到此错误:

1
Causedby:org.apache.hadoop.hbase.thrift.HttpAuthenticationException:Authorizationheaderreceivedfromtheclientisempty.
您很可能会点击https://issues.apache.org/jira/browse/HBASE-13069。还要确保HTTP/_HOST主体位于其HBaseThriftServer的keytab中。请注意,作为后续行动,您可能会获得https://issues.apache.org/jira/browse/HBASE-14471。

还有一个框架传输问题尚未得到支持。我们建议使用缓冲传输。

至此如果还有错误,请移步到hue登录用户侧点hueadministers,或访问http://master:8889/hue/about/会自动检查配置:

Configuration

Step2:Examples

Step3:Users

Step4:Go!

Checkingcurrentconfiguration

Configurationfileslocatedin/run/cloudera-scm-agent/process/332-hue-HUE_SERVER

Potentialmisconfigurationdetected.FixandrestartHue.

OOZIE_EMAIL_SERVEREmailnotificationsisdisabledforWorkflowsandJobsasSMTPserverislocalhost.
HBaseBrowserFailedtoauthenticatetoHBaseThriftServer,checkauthenticationconfigurations.
在查相关文档解决:但看了最新版hue4.1之后,第一句话让你看到原来它是支持SQOOP1的,只是使用方式完全界面化了,且配置文件根本不在相关conf下,而是每次启动会动态创建一个,omg--!:

发布者色相队在2017年8月24日,在顺化4.1,SQL,Sqoop

10评论

明年将在Hue4.1和CDH6中推出令人兴奋的新功能。其中之一是Hue的全新工具,使用ApacheSqoop1将关系数据库中的数据导入HDFS文件或Hive表。它使我们能够通过交互式UI只需几次点击即可将大量数据带入集群。此Sqoop连接器已添加到Hue的现有导入数据向导中。

过去,使用Sqoop命令行界面导入数据可能是一个麻烦且低效的过程。该任务期望用户对Sqoop有很好的了解。例如,他们需要将一系列必需的参数放在一起,这些参数具有特定的语法,这将导致容易出错。通常,正确地获取这些可能需要几个小时的工作。现在有了Hue的新功能,您可以在几分钟内完成Sqoop的工作。进口在YARN上运行,由Oozie安排。本教程提供了有关如何执行此操作的分步指南。

教程

你需要什么

首先,您需要在其中配置ApacheSqoop,ApacheYARN,ApacheOozie和Hue的正在运行的集群。

接下来,您需要安装特定于数据库的JDBCjar。为此,请将它们放在HDFS上的某个目录中。

要获得MySQL自动完成功能,需要配置LibRDBMS和笔记本:http://gethue.com/custom-sql-query-editors/

此外,您需要通过在Hueini中的索引器部分下将enable_sqoop设置为true来打开该功能。

注意:

如果使用ClouderaManager,请检查如何在hue.ini安全阀中添加属性并将上述参数值放在那里。

选择源表

现在让我们开始吧!

在本教程中,我们将从Teradata导入表到ApacheHive。单击左侧窗格中的汉堡菜单,然后选择屏幕左下角的选项以导航到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:Sqoop1所需的数据库特定库

映射器使用n个映射任务并行导入

拆分方:用于拆分工作单位的表格列

详细模式:在工作时打印更多信息

压缩模式:启用压缩

格式:数据可以以3种不同的格式导入:文本,avro,序列

字段:设置字段分隔符(仅在格式为文本时启用)

行:设置行尾字符(仅在格式为文本时启用)

(可选)封闭方式:设置包含字符的字段(仅在格式为文本时启用)

支持的数据库

Sqoop1支持的任何数据库。

故障排除

在导入过程中,列的数据类型可以更改为HDFS/Hive兼容的数据类型。导入表时,主键用于为映射器创建拆分。如果没有主键,则需要明确选择拆分列;如果不这样做会导致导入失败。在执行全表导入时,如果所有表都没有主键,则导入作业将失败。此外,如果由于某种原因作业失败,您可以从作业跟踪器中的日志中找出失败的原因。如需进一步帮助,请访问https://sqoop.apache.org/docs/1.4.6/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐