Spark-submit问题、Hive表load空值问题、jar Classnotfount和自定义UDF的使用以及常见的问题

一、Hive

hive是数据仓库,建立在hdfs生态圈的上层架构,hive的数据可以与mysql hbase 进行转换

1.使用mysql导入数据到hive load 表发现值为null的问题

(1)先检查sqoop 导入时候有没有指定分隔符 

 --fields-terminated-by '#'这一句是不是添加了。默认是逗号是分隔符

切记指定分隔符只能为单字符,推荐\t 和hive默认的\001 前提是数据里面不可能包含此字符

(2)如果hive中的表与sqoop导入指定的分隔符一致 仍发现一大堆null值 这时候 就要注意了。

很有可能是导入的数据中有此分隔符 导致数据错位直接报null

(3)以上如果还没有发现问题,请先sqoop上去一点数据进行测试 上50070 下载这个blk

打开nodepad++查看导出的数据是不是你要的格式 不要用那些乱七八糟的符号 比如⭐。

这一步缺认后数据没有问题,那么只能是你所导入的数据中包含你所用的分隔符 这个可能了。。。

比较笨的解决办法 :1先不用包含的分隔符进行操作2自定义UDF 对其进行操作split不需要的字符或者字节

import org.apache.hadoop.hive.ql.exec.UDF;

public class  evaluat(String str){

val s1="";

if(str !=null && str!=“”)

   if( str.split("字符").lenth>1){

    for(int a=0 ;a<str.split("字符").lenth;a++){

    s1+=str.split("字符").get(a)}

    return s1;

}}这里大概的逻辑是这样就不做优化了根据自己的业务来

return str;

切记 打好jar包 用zip工具删除MIN文件里面的 *.DSA 和 *.SF文件 要不jar包无法运行的

hive-shell

add jar 你的jar包目录 (本地)

create temporary function <函数名> '你的那个UDF类的路径' 举例com.hive.udf

使用的话就在select 语句中 函数名(值)就可以了

一切的报错请仔细检查错误信息 和字段对应的问题 大多都是不细心字段对不上而产生的错误

千万不要把存数据的mysql 和hive的mysql用同一台机器你会后悔的

 二、spark jar包 classnotfound

常见问题 1.我用eclipse打jar包 就可以正常运行,到idea 里面写打jar包怎么就不行(麻烦删除jar 文件里的所有DSA 和SF文件 )这些是记录类的加载信息的  我们不需要 --class 参数可以指定 有了这个反而找不到

2.jar包的存放地址 请放在本地 丢到集群也可以 但记得路径要写对 复制粘贴代码的时候记得吧packect 换成正确的,有一次我就忘了删  然后copyname 怎么都不对。后来发现 这个packect 会影响到classname的

3.请核对scala版本和java的版本 对不上号 的会有冲突 。

4.比较常见也是最愚蠢的问题。。class  包 路径名字打错了。。请检查一遍

阅读更多
个人分类: hive
上一篇Hive搭建和使用遇到的坑--基本配置
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭