使用目的:通过访问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节点
华青莲日常点滴,方便自己成长他人!