工作总结记录

18年工作总结

  1. 运行hfile入hbase库的时候,包Hconfig类找不到 classnotfoundException,问题出在亚马逊新搭建的环境需要配置$HBASE_HOME/*配置hbase的环境,然后在我们执行的load.sh的时候,加上这个环境变量就好了。
  2. .如果在发现环境问题,可以看看echo ,有时候,自己加的环境变量会失效,需要 source /etc/profile 生效一下
  3. hive默认的是UTF8的编码格式,要是我们把windows上的txt文件导入hive的时候,记得设置文件格式utf8,(曾经修改hive编码为GBK,然后再修改回来,重新覆盖导入UTF8的文件,生成Hfile乱码)
  4. hdfs distcp的时候会丢包 ,检查集群使用的资源是否被占用完了, 是否是同时分发到其他的集群,总之分发完后需要查看是否包名和大小都匹配。
  5. 部分功能升级后可能会导致其他的问题,需要运行调试,(曾经把Hbase过时的方法替换掉,导致在hdfs上发生IOException)
  6. Task failed while writing rows 就是使用concat函数的时候,从hive表中获取的字段不能为空,否则就会包这个异常,case by NullPointException,所以我加了 nvl(a,"NON")转换
  7. 使用hadoop的distcp的时候,第一次发送的时候,如果是没有创建包,发送的就是包里的内容,需要先创建,尽量别再同一个文件夹里同时分发多个文件
  8. 当使用多个线程创建过多的hbase链接的时候,就需要设置链接为单例模式。
  9. hadoop 使用分布式分发distcp的时候,报错copy异常,1.查看hadoop是否正常,进程是否完整xcall.sh jps;2.查看磁盘使用情况hadoop dfsadmin -report
  10. 多线程调用某个服务接口的时候,要是出现一段时间后链接异常,那说名我们的线程池可能使用的有问题,所以我们是使用了newCachedThreadPool
  11. 如果IDEA的package 打包后没有生成对应的class文件,还可以在setting里的compiler里的build project automatically 选项勾上,然后先clearn在complie编译,要是没有手动编译生成class文件的话,打包也没有class文件,然后package既可,也可以使用12
  12. idea的maven打包有的时候不会生成class文件,这个时候需要build一下,然后从新package 就可以了,(得需有target 文件的时候,build 不然有时候不会生成class)
  13. 13.hive表的查询的时候,我们需要导出到一个文件里面查,(hive -e 或者 spark -sql ... -e "")不然在shell脚本中查的部分数据是不完整的。
  14. 在spark的任务处理的时候,地理栅格需要对每个地理格子在订单表里查询,必然涉及到笛卡尔积,在跑任务的时候,直接报错,笛卡尔积太大12W *6000W数据,然后地理经纬度也是String类型,在sql比较的时候,把string使用cast方式转成double 这个函数每次需要执行,消耗资源,将string转double后可以正常执行。
  15. spark sql 执行过慢的时候,因为集群多核545 内存952 所以可以多给几个核,每个核内存降低 ,出现memoryOutOfhead ,也可以在程序conf 设置spark.sql.shuffle.partitions 大一点,默认200.
  16. mysql 里面是没有full join 的,如果用到 需要使用left join 和right join 后使用union 合并。
  17. 地里栅格 1.将csv文件生成hive表,然后取出最大的经纬度和最小的经纬度,在地址经纬度库里 查询出上海的数据;2.将上海的经纬度和csv生成的经纬度做关联 查询出具体的每个栅格里包含的地址(这里做两步是因为做笛卡尔积 ,所以尽量使表小一点)生成具体的地理栅格经纬度表;3.查询出每个栅格里存在的中文地址,然后去订单大表里通过地址关联查询出所有订单;4.通过row_number() over() 查询每个类型、品牌、商品的前5类的金额和订单数;5.然后全表关联整合在一张表里。
  18. 线程的资源最好是通过线程池提供,所以我们最好是不要在应用中显示创建线程;然后呢,阿里也是建议我们在创建线程的时候,不建议使用Executors,建议使用ThreadPoolExecutor的方式创建。
  19. Java中使用Arrays.asList将一个数组转成list后,他是没有add和remove属性的, 他只是Arrays中的一个静态内部类。
  20. 创建hive的UDF函数:
  21. 1.写个类集成UDF,2.maven集成,并制定主类;3.打包后上传到Linux服务器;4.打开sql窗口执行加载和创建命令:add jar /home/hadoop/lib/hive-1.0.jar;

CREATE TEMPORARY FUNCTION sayHello AS 'com.ruozedata.bigdata.HelloUDF';

19年工作总结

  1. 虽然zookeeper是Java写的,我们可以使用jps查看进程,但是有的时候,要是我们不规则关机的话, jps没有QuarumPeermain但是运行启动命令时,总是报已经启动,解决方案:删除zoo.cfg配置中dataDir目录下的 zookeeper_server.pid
  2. 在装好Python ,anaconda,pycharm,配置好环境后,有些DDL无法加载的话, 可以在anaconda里面uninstall掉从新install就好了。
  3. hbase表的数据,如果是批量执行生成Hfile,然后load到表里的话,要是每次给tuncate的话,重新导入的数据会直接放到一个region里,然后集群会自动平衡,但是这个过程非常慢。我们一般建表的时候,会创建指定个region,然后就会按照规则导入到不同的region。
  4. hbase集群的压力测试,有时候调用量大的时候,会导致放回数据慢,这时候,查看16010的hbase的UI的table的region分布情况,和每个节点上的访问情况,要是region分布不均匀也会导致数据都压到一个节点,压测底。然后看磁盘和集群的资源情况, 我们是加了5个节点后,访问慢的情况消失。
  5. MySQL中的索引就是使用的B+Tree数据结构
  6. elasticsearch比MySQL快点原因就是:MySQL只是使用了term dictionary字典来存储数据,使用B-tree的方式存储在磁盘上的,检索一次term需要若干次的random access 的磁盘操作。而Lucene在term dictionary的基础上又加了term index来快速索引。term index是使用B-tree的方式存储在内存中的,从term index中找到对应的term dictionary的block后,再去磁盘上查询term ,大大的减少了random access的数量。额外值得一提的两点是:term index 在内存中是以 FST(finite state transducers)的形式保存的,其特点是非常节省内存。Term dictionary 在磁盘上是以分 block 的方式保存的,一个 block 内部利用公共前缀压缩,比如都是 Ab 开头的单词就可以把 Ab 省去。这样 term dictionary 可以比 b-tree 更节约磁盘空间。
  7. MR任务生成Hfiles的时候,某个节点会usercatch太大2.8T导致节点磁盘到达90%以上,磁盘自我保护,变为unhealthy状态,这时候,节点挂掉导致job重启,reduce阶段的任务重新执行。可以进去到子节点上,到/mnt/yarn目录下,使用sudo du -h --max-depth=1查看usercache的大小。
  8. 虽然zookeeper是Java写的,我们可以使用jps查看进程,但是有的时候,要是我们不规则关机的话, jps没有QuarumPeermain但是运行启动命令时,总是报已经启动,解决方案:删除zoo.cfg配置中dataDir目录下的 zookeeper_server.pid
  9. 在装好Python ,anaconda,pycharm,配置好环境后,有些DDL无法加载的话, 可以在anaconda里面uninstall掉从新install就好了。
  10. 已有权限,修改环境配置无法修改,可以看看是否是磁盘空间不足导致。
  11. 解决 groupby 数据倾斜问题:设置 hive.groupby.skewindata=true
  12. 在进行多个空值的count(distinct aa)的时候,可以改为count(distinct aa)+1 all_num where aa is not null and query <>''
  13. .-----read to point:Hive存储元数据的方式及特点
  14. 数组的下标为什么是从0开始的。刚开始在C语言中沿用了BCPL的写法,p+0表示的就是第一个,而BCPL是在IBM环境下使用的,所以1960以后的很长一段时间是这个写法,而那个时候,计算机资源很贵,下标0的编译相对1来说,效率更高。按偏移量来说的话,第一个位置就是表示偏移0 Python中的半开放是写法[0,n)表示前n个数也跟美观。否则[1,n+1)看起来不舒服。
  15. ES中的数据,我们大概比喻index和type对应MySQL中的数据库和表,但是并不是这样的。数据库中的表之间是相互独立的,但是在一个Elasticsearch的索引中,有相同名称字段的不同映射类型在Lucene内部是由同一个字段支持的.这会导致一些问题,比如,当你希望在一个索引中的两个映射类型,一个映射类型中的 deleted 字段映射为一个日期数据类型的字段,而在另一个映射类型中的deleted字段映射为一个布尔数据类型的字段,这就会失败。最重要的是,在一个索引中存储那些有很少或没有相同字段的实体会导致稀疏数据,并且干扰Lucene有效压缩文档的能力。基于这些原因,我们决定从Elasticsearch中删除映射类型的概念。
  16. ES7.x以后索引文档就不需要type了,到ES8.X以后就不支持type了。
  17. 在spakSQL中,大的hive表做笛卡尔积然后分组的时候,一直报错,最后使用hiveSQL搞定。
  18. ES安装kibana的时候,版本必须要一直。默认的查询结果1万条,超出集群直接报OOM,每次查询的数据量大小最好是集群内存的一半,另一半用来缓存数据。
  19. 大数据使用sparksql后台调用代码执行生成数据。spark如果传入的参数太长的话需要修改配置文件。否则会报错。
  20. 做大数据的复杂业务逻辑处理的时候,可以先拿一部分测试数据开始开发,是不是自己想要的逻辑结果。不然跑太多数据浪费时间最后还不是自己想要的结果。
  21. hadoop distcp hdfs://10.0.1.138/test/test1 hdfs://test/ 有的时候,分发会报错,physical物理内存不足,但是application页面显示的
    内存足够,这其实实际上也是内存不够引起的,查看当前138服务器的内存,因为要先拷贝后发,所以需要剩余空间得大一点。
  22. BIO和NIO,BIO是单次回话单个线程,服务器会产生两次阻塞,第一次等待客户端的连接,第二次等待客户发送数据。如果没有的话就会一直等待,如果客户端太多连接着不发数据,会对服务器造成压力,引入NIO。其实NIO解决的两个基本问题就是存在于BIO中的连个阻塞,分别是等待链接是的阻塞和等待发送数据是的阻塞。第一种方案:如果
    不设置阻塞,连接切换的时候丢失当前客户请求;第二种方案:缓存socket,轮询数据是否准备好,就是把socketChannal放到一个list,然后不停遍历输出。但是如果真实情况下100万连接只有1万有消息的话,其他99万也需要轮询,不合适。在真实的NIO中,并不是在Java层面去解决这个问题,他将轮询代码调整为操作系统级别的调用,操作系统
    主动去感知有数据的socket。
  23. windows查看端口号 netstat -aon|findstr 80   然后杀掉 taskkill /pid 2036 -t -f 
  24. hbase在读取hive数据生成hfiles的时候,要是为空的字段赋值成‘’ 或者‘ ’,再拼接字段生成text文件的时候,有时候会直接跳过空值。
  25. 使用开源的Hutool里面有我们使用的大多数的工具类。
  26. 我们一般web开发可以去NPM(Node Package Manager:提供了各种代码包)上下载一些脚手架,帮助我们开发。
  27. 在Hadoop里加入快捷键操作,进入/home/hadoop 然后使用ls -al查看隐藏文件,vim .bashrc 然后加入自定义的密令,不能常见的,例如:alias boon='sudo -u hbase hbase shell' 也可以alias查看已有的指令。
  28. a

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

꧁꫞ND꫞꧂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值