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 包 路径名字打错了。。请检查一遍