一、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;
hive-shell
add jar 你的jar包目录 (本地)
create temporary function <函数名> '你的那个UDF类的路径' 举例com.hive.udf
使用的话就在select 语句中 函数名(值)就可以了
一切的报错请仔细检查错误信息 和字段对应的问题 大多都是不细心字段对不上而产生的错误
不要把存数据的mysql 和hive的mysql用同一台机器
二、spark jar包 classnotfound
常见问题 1.我用eclipse打jar包 就可以正常运行,到idea 里面写打jar包怎么就不行(如果非要用idea打包还运行不了麻烦删除jar 文件里的所有DSA 和SF文件 )这些是记录类的加载信息的 ,最好还是用maven打
2.jar包的存放地址 请放在本地 丢到集群也可以 但记得路径要写对 复制粘贴代码的时候记得吧packect 换成正确的,有一次我就忘了删 然后copyname 怎么都不对。后来发现 这个packect 会影响到classname的
3.请核对scala版本和java的版本 对不上号 的会有冲突 。
4.比较常见也是最愚蠢的问题。。class 包 路径名字打错了。。请检查一遍