编程经验--持续更新



1.kafka+storm在windows下运行的问题:不管是本地运行还是集群运行,都需要修改host文件,添加,kafka集群的机器名(windows+linux)


2.mysql通过sqoop向hive导入数据,hive的数据会多出一些 : 需要忽略行记录中的/n分隔符。:--hive-drop-import-delims


3.hive执行语句多表join时where中一定要指定哪张表的哪些字段:否则会出现太多reduce导致资源全部占用。(本次出现了48个)


4.sqoop导入数据(从mysql到hive) mysql中tinyint有时候解析不了,到hive中编程boolean类型,需要手动更改。


5.hive中的分区,例如:partition(l_date,org_code,brand_code),其中这三个分区为层级关系,假如这样覆盖插入,这样只能封盖最小文件夹中的数据


8.hive和mysql中生成时间戳的方法:unix_timestamp(LAST_UPD),其中:不传参数为当前时间生成时间戳;传递参数,将传递的时间转化为时间戳。


9.sql语句:列值不一定是from从表中查出的,可以随便搞个字符串(加上单引号)。


10.做项目的规则:成本上:不可能全部了解客户的业务规则,技术上:不可能一点也不需要了解客户的业务规则


11.为了程序的健壮性,sql的准确性,需要时常(常常在数据输入,输出的时候)判断字符串的空,null等


12.大量数据的处理:




现有13亿条数据需要去重:


单机:


程序来解决:写道map,数据存在于map内存(也就存放十几万),由于内存不能全部加载只能分段处理:写道文件中


分布式:


hive:group by ,sort ,distinct一般不用


hdfs中默认块为128M,map中可以加载,多个map的输入,使用group by、sort:一个reduce的输出到不同的数据块中






13.linux下执行jar命令:java -jar /fanghj/ftp_hive.jar com.gome.test.FTPM


14.map.put(outFile, set.add(absolutePathName));这样写不行,需要移出来(value会变成boolean类型的)


15.当前变量传值解决不了问题时候,要时常想着借助第三变量


16.当循环遍历数据的时候,假如操作受遍历顺序的影响,可以借助set集合,将不想要的数据清除,保留想要的数据


17.遍历set的时候 不能移除元素,需要借助另一个set中:两个set,一个遍历,遍历中删除另一个set中的元素。另一个set即为要保留的结果


18.hive中把制表符当成空格使用会报错


19.不关闭写出流,表明文件被占用:比如不能删除文件


20. : ./xml_hive.sh >/fanghj/test 2>&1 &  :将脚本输出日志(所有,其中:1或不写代表所有日志,2代表错误日志,&代表放到后台执行:即使windows下断网也不影响)到指定文件


21.国美电器核心系统数据库不想被外界访问:将数据写到ftp,跟http+xml的方式提供数据。


22.hive 中 对空值的处理:if(vu.company is null,"",trim(vu.company)) as company 


23.linux下实时查看日志:tail -f 日志名称


24.linux下拷贝文件夹:cp -R 旧文件夹  新文件夹


25.java中假如用到时间变量:不要定义为静态变量(类变量),因为类变量只初始化一次:在类被加载的时候加载。说白了要创建对象


27.orcale中要求比较严格:group by 了,在select中必须要有聚合函数(例如max()),hive,mysql中语法没有这么严格;
只group by 则取的为字典排序第一条数据,select中添加max()取最大值。


28.注意,hbase,es自身没有事物控制,只能通过代码来控制,并且,一般应用于查询,所以忽略事物。


29.mysql中where后跟  除法/  并且判断字符串不为空;hive中语法不支持,只能嵌套一层


30.distinct 必须要写在第一个字段上。


31.mysql中 distinct,group by一个字段可以一起使用,orcale,hive中不可。


33. ConcurrentHashMap:线程安全,使用的分段锁机制


34.list集合判断是否包含某个元素:集合.contains(元素);获取该元素在此集合的位置关系:int index = 集合.indexOf(元素);根据位置关系获取元素:day5 = (String) strH.get(index - 1)


35.为对象赋值,要时刻注意是否为同一个对象,需不需要重新创建对象


36.当使用可靠的bolt时,发射后需要删除跟发射数据直接相关或间接相关时:为保证框架本身的可靠性,可在下游(下个bolt)删除。


37.storm中每个bolt只被每个线程加载一次,所以每个bolt中的成员变量,静态变量也只被加载一次:时间相应的变量不要定义在类中,storm中的类变量不可实例化(不能创建对象)。


38.触发器推送过来的数据是并发的吗?:无所谓,反正推到kafka,kafka用于高并发,FIFO:先进先出。


39.Storm初始化报错java.io.NotSerializableException:只能声明初始化,否则storm不能将其序列化。


40.写程序很多时候业务并非多么的复杂,而是考虑各种万分之一,需要考虑程序的健壮性,经常的需要try


41.数组某个元素未赋值的情况下,使用equal方法会报空指针异常。


42.多线程调用同一个方法时候,变量最好不要用 静态变量,每个线程会共用一个静态变量。要用类变量或局部变量


43.对于高并发编程:storm:只要能保证每个spout/bolt对数据库的操作只有只读,那就可以用随机分组等。假如不能保证,就要按字段分组。


44.将字符串数组转为int类型:int[] iCard = converCharToInt(cArr);


45.maven项目,命令行:storm的jar需要指定程序入口,普通的jar不要指定程序入口


46.获取json数组:JSONArray transportation = i.getJSONArray("transportation");,json数组的长度用.size()表示


47.select *,row_number() OVER (partition by deptid ORDER BY salary desc) rank FROM employee


48.当表中数据不同列合并到同一列的时候:1.根据主键做join操作。2.使用sum,group by 。其中优先选择方法2


49.本例中金额对不上,并且偏大,并且差距很小,经排查逻辑没有错。本例中使用的为left join,正常情况数量不会变化。经过count操作,发现某个join 的字段不是唯一标识,维表出问题了,导致数据偏差。


50.hive动态分区过多导致任务失败或reduce回滚的解决方案:
  1).尽量避免使用动态分区
  or
  2).参数化设置: 
               (1) set hive.auto.convert.join=false; 避免使用mapjoin,默认为TRUE。所以默认会抢占资源,服务器资源不够时会挂掉。
  or
               (2)(假设hdfs-size.xml中配置最大值则参数化设置无效)
                   set hive.exec.max.dynamic.partitions=100000;
                   set hive.exec.max.dynamic.partitions.pernode=100000;


51.使不相干的子任务并行。参数化设置:set hive.exec.parallel=true; 缺点:消耗资源


52.当服务器整体资源压力巨大时:某些极少的任务巨慢而导致其他依赖的任务不能再预期的时间点执行可以考虑上游或并行的小数据量任务减少资源分配,例如参数调节:set hive.auto.convert.join=false; 


53.hive drop表失败or卡住:查看日志为lock的问题。show locks 表名 (partition 分区名) extended


  尝试解锁 unlock 表名称 (分区名称) ,不OK也许是字符集的问题。


54.使用row_number()函数:排序字段有值的优先级别高,可利用length()函数,然后desc排序


55.发现bug不要着急改


56.美的这边所谓的依赖实质是线程锁。从而达到等待的目的


57.hive常用的时间函数:select from_unixtime(unix_timestamp('20160902000000','yyyyMMddHHmmss'),'yyyy-MM-dd HH:mm:ss')

58. hive : where trip_province like '%上海市% ,正常;where trip_province = '上海市'  不正常,显示为 ??? ; 解决方案 trim(trip_province)








































猜你喜欢

转载自blog.csdn.net/dream__sky_/article/details/79823143
今日推荐