kettle访问hdfs错误汇总-2

浏览: 2097

使用目的:通过访问hadoop数据(hive、hdfs),实现大数据访问及kettle可视化数据处理

上篇:https://ask.hellobi.com/blog/hql15/9713

1、hive分桶

分桶字段:依据是首先要分布均匀,也就是做hash的时候能够每个桶的数据量差不多,然后做关联的时候经常使用到的字段。 (注分桶字段不可以更新)

2、kettle访问hive数据

表输入出现包含中文的查询出现等待卡死的情况,把hive夹包放到kettle lib下问题解决

3、hadoop file output

问题:Kettle hadoop file output 到hdfs日期列为空

解决办法:把字段选项所有长度去掉,并且日期改为string类型,后续用incepter 函数tdh_todate进行转换

4、查看hdfs文件行数:

Hdfs dfs -cat /dwbi/basicDw/drivinglicense/part-m* | wc -l

统计文件大小:

hadoop fs -count /dwbi/basicDw/drivinglicense/part-m*

5、sqoop导入

sqoop导入数据到hdfs出现数据条数变多的情况,解决办法为加上如下命令:

--hive-drop-import-delims \

--null-string '\\N' \

--null-non-string '\\N'

其中--hive-drop-import-delims来把导入数据中包含的hive默认的分隔符去掉

注意:sqoop导入数据时-- fields-terminated-by "\\01"  为列分隔符(默认为,),要与hive表创建时的列分隔符row format delimited fields terminated by ,对应。

6、字符问题

问题:Kettle表输出数据到hive出现错误could not create result set required field type ...

原因:相关表子段类型有问题

Hive中文赋值进去乱码

解决办法:修改xshell编码为utf-8

7、行数变多

问题:kettle通过hadoop file output 组件写数据进hdfs,查询数据条数比真实数据条数多,并出现字段值错乱的情况

分析:oracle相关表字段有hive表指定的列分割符或者换行符,使得行进行了拆分

解决:导入数据进hdfs之前对字段做特殊字符替换,如sql中translate(BZ,chr(13)chr(9)||||chr(10)||’|’,’’) 对子段中回车、换行或者’|’(hive字段分隔符)做替换,并与hadoop file output内容tab页的分隔符对应。注意内容里面把头部去掉。

8、语句(直接导数据到hive表不用事先创建表,下面导入后自动生成):

Sqoop import --hive-import \

--connect jdbc:oracle:thin:@//10.119.16.17:1521/orcl \

--username CDT_BI \

--password oracle \

--hive-database cdt_bi \

--table lu_day \

-m 1

错误:sqoop 到oracle数据到 hive,出现错误

unable to move source hdfs ://namesercece1/user/root/lu_day/part-m-00000 to destination hdfs://nameservice1/inceptorsql1/usr/hive/warhouse/cdt_bi.db/hive/lu_day/part-m-0000

分析:

查看/inceptorsql1/usr/hive/warhouse/查询permission denied 权限问题

解决:sudo -u hdfs hdfs dfs -chmod -R 777 /..../hive

9、问题:kettle中用inceptor数据浏览时出现数据不出来情况

分析:字段中有不定值

解决:生成一个固定值赋予,不要直接在sql中 ‘’ hphm

10、问题:4G(五千万)数据merge into时报错

分析:merge数据量加大时会出现这个问题,要合理分桶,建议分桶在数据压缩前的大小每个桶200m压缩后大概20m数据存储在表里一般压缩8倍左右

解决:在orc表创建是分桶数量由4变成25

11、问题:sqoop跑数据卡主

分析:可能资源耗尽的问题

解决:停掉inceptor,然后kill掉跑的sqoop程序(先找到app号,然后再kill掉),再次重新跑

yarn application -list
yarn application  -kill  appid(查出的)

12、问题:kettle表输入inceptor中数据出现错误:could not create resultSet: required field type is unset struct:tprimitive typeentry(type:null,typeQualifiers)

解决:查询字段为空引起,用nvl把空值替换

13、hive数据库备份

最基本的两个语句:show tables; show create tables XXX.

于是建立一个SH文件,来实现批量化处理。如下:

#!/bin/bash

 hive -e "use cdt_bi;show tables;" > tables.txt

Sleep 2

     cat tables.txt |while read eachline
     do
     hive -e "show create table $eachline" >>tablesDDL.txt
     done

通过这样的批处理软件,顺利搞定。(发现问题:orc表导出时会出现错误 internal error get instance which dont exists,但外表导出没有问题)

14、通过50070查看集群活动namenode节点

华青莲日常点滴,方便自己成长他人!


推荐 0
本文由 华青莲 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册