• 2018年年终总结


    2018年年终总结

    一,概述

    2018年已经结束,2019已经到来,正所谓“一笔狗销,猪事顺利”,作为一个技术人员,这一年真是不平凡的一年,也是受益匪浅的一年。无论技术还是其他都有一些见识和认识 这使我很欣慰。然而今天只说工作,只说编码,只说技术,只说大数据。本是开发出身的我,有幸进入的某个央企的大数据实时计算项目。从开发到测试,从测试到运维,总运维到架构。有些像hadoop生态结构,多的眼花缭乱。死记硬背不是上策,消化不良就受内伤了。慢慢消化循序渐进脚踏实地才是王道,这也是我写这个年终总结的初衷。

    二,技术综述

    2018年技术大事记,按照时间排序:

    1,KAFKA的客户端producer 和 consumer 优化。

    2,HADOOP之HBASE的备份以及优化。

    3,KERBEROS的部署和使用。

    4,SQOOP,HIVE,presto,impala 测试和验证。

     下面详细介绍一些上述的功能和设计,在此过程,我尽量回忆使用正确的语言加以描述整个优化的过程,当然伴随一些业务需求的描述。

    三,KAFKA的客户端producer和consumer

           kafka我们已经使用2年了,目前只是使用到0.9.0版本。作为采集层这是一个很好的工具,正如所说:分布式、可划分的、冗余备份的持久性日志服务,他的特点:发布订阅模型、动态伸缩的高性能消息处理、持久化数据。这里我们着重讲解生产客户端和消费客户端以及 优化。

          生产发送过程图如下所示:

          在生产produce端,有些业务特点是:发送数据慢、一条数据量大、避免重复。在这个过程中需要注意单条消息大小的限制和batch队列的限制,不然一个队列装不下一条消息,配置参数参考:

          broker端:message.max.bytes  接收的一条消息大小限制。

          producer端:batch.size   RecordBatch的最大容量。默认值是16384(16KB)。如果一个消息体比较大,就要设置大一些。

          消费端consumer过程图如下所示:

        

    在业务数据消费过程中,遇到如下需求:消息进度跟不上,或者在消费一条数据阻塞卡主。这就需要跳跃式消费。目前所知这是消费者高阶API跳跃式消费的唯一方式,代码如下:

    Properties props = new Properties();
            
              props.put("bootstrap.servers",
                      "10.20.49.175:9092,10.20.49.176:9092,10.20.49.177:9092,10.20.49.178:9092,10.20.49.179:9092");
              props.put("group.id", "N3S1");
              props.put("enable.auto.commit", false);//true是自动提交 false是手动提交
              props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
              //反序列化程序类,用于实现Deserializer接口的值。
              props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
              KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props);
              
              TopicPartition partition0 = new TopicPartition("N3S",9);
              consumer.assign(Arrays.asList(partition0));
              consumer.seek(partition0, 16669);
              consumer.commitSync();
              TopicPartition partition1 = new TopicPartition("N3S",15);
              consumer.assign(Arrays.asList(partition1));
              consumer.seek(partition1, 16677);
              consumer.commitSync();

    四,HADOOP之HBASE的备份和优化

    hbase我们已经使用了2年了 。所以数据的重要性不言而喻,这就需要一个非常好的备份策略。我们最终选择了快照备份方法。这个方法备份方便,但是hdfs的数据不能受到不可恢复的破坏。备份脚本为:

    第一部分生成执行hbase脚本:

    #!/bin/bash
    #Name:hbase_snapshot
    #This is snapshot of hbase
    
    snapTime=`date +%Y%m%d`
    tableNameArr=`echo list|hbase shell|tail -n 1`
    
    tableStr=`echo "$tableNameArr" | sed 's/"//g' | sed 's/[//g' | sed 's/]//g'`
    echo "$tableStr"
    echo "">/zook/hbaseShell/hbase.out
    OLD_IFS="$IFS" 
    IFS="," 
    arr=($tableStr) 
    IFS="$OLD_IFS" 
    for s in ${arr[@]} 
    do 
        echo  "snapshot '$s','`date +%Y%m%d%H`_snapshot_$s'" >>/zook/hbaseShell/hbase.out
        #echo "snapshot '$s','`date +%Y%m%d%H`_snapshot_$s'" |hbase shell
        #echo "time is ::"`date "+%Y-%m-%d %H:%M:%S"`
        #echo "name is ::"`date +%Y%m%d%H`_snapshot_$s
        #echo "snapshot '$s','`date -d '-1 day' +%Y%m%d`_snapshot_$s'" |hbase shell
        #echo `date -d '-1 day' +%Y%m%d`
    done
    echo "exit" >>/zook/hbaseShell/hbase.out
    

      

    第二部分执行备份脚本进行备份:

    #!/bin/bash 
    hbase shell /zook/hbaseShell/hbase.out>>/zook/hbaseShell/snapshot.out
    echo "">/zook/hbaseShell/hbase.out
    

      

    备份之后的恢复过程:

    第一步:把备份的快照传输备份到log-hbase集群

    hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot $snapName -copy-to hdfs://10.20.49.171:8022/hbase

    第二步:初始化hbase集群

    停止hbase

    删除zookeeper 目录 重启

    rmr /hbase

    删除 hadoop 目录,并清空回收站数据

    举例:hadoop fs -rmr /hbase/data/hbase/meta

    启动hbase

    第三步:把log-hbase的快照在传输到hbase集群中

    第四步:创建表

    第五步:恢复数据

    Disable ‘tablename’

    Restore_snapshot ‘snapshotname’

    Enable ‘tablename’

    五,KERBEROS的部署和使用

    在大数据中安全中,kerberos算是比较突出的一个安全插件了。因为大部分大数据组件都是分布式网络请求为主,所以像kerberos这种网络认证就显得很重要了。kerberos的设计目标就是通过密钥系统统称为客户机/服务器应用程序提供强大的认证服务。该认证过程的实现不依赖于主机操作系统的认证,无需基于主机地址的信任,不要求网络上所有主机的物理安全,并且假定网络上传送的数据包可以被任意的读取、修改和插入数据。在以上情况下,kerberos作为一种可信任的第三方认证服务,是通过传统的密码技术执行认证服务的。认证过程可以参考:

    kinit命令使用规范

    kinit [ -l lifetime ] [ -r renewable_life ] [ -f ] [ -p ] [ -A ] [ -s start_time ] [ -S target_service ] [ -k [ -t keytab_file ] ] [ -R ] [ -v ] [ -u ] [ -c cachename ] [ principal

     klist命令使用规范

    klist [[ -c] [ -f] [ -e] [ -s] [ -a] [ -n]] [ -k [ -t] [ -K]] [ name]

     

    六,SQOOP,HIVE,presto,impala 测试和验证

    这部分主要是测试和验证sqoop,hive,presto和impala的使用。简单部署图:

    sqoop命令使用:

    sqoop import -D mapreduce.job.name=mio_log_txt_test --connect "jdbc:sqlserver://127.0.0.1:1433;database=incrv8_core" --username sa --password Sql2014 --table=mio_log --target-dir /user/hive/mio_log3/000005/ --split-by mio_log_id --hive-import -m 20 --hive-database rtcp --hive-table mio_log_txt_test
    sqoop import -D mapreduce.job.name=std_contract_txt_test --connect "jdbc:sqlserver://127.0.0.1:1433;database=incrv8_core" --username sa --password Sql2014 --table=std_contract --target-dir /user/hive/std_contract/000003/ --split-by cntr_id --hive-import -m 5 --hive-database rtcp --hive-table std_contract_txt_test
    sqoop import -D mapreduce.job.name=customer_txt_test --connect "jdbc:sqlserver://127.0.0.1:1433;database=incrv8_core" --username sa --password Sql2014 --table=customer --target-dir /user/hive/customer/000003/ --split-by id_num --hive-import -m 5 --hive-database rtcp --hive-table customer_txt_test
    sqoop import -D mapreduce.job.name=psn_customer_txt_test --connect "jdbc:sqlserver://127.0.0.1:1433;database=incrv8_core" --username sa --password Sql2014 --table=psn_customer --target-dir /user/hive/psn_customer/000003/ --split-by id_num --hive-import -m 5 --hive-database rtcp --hive-table psn_customer_txt_test
    sqoop import -D mapreduce.job.name=mio_log_parquet_test --connect "jdbc:sqlserver://127.0.0.1:1433;database=incrv8_core" --username sa --password Sql2014 --table=mio_log --target-dir /user/hive/mio_log/000001/  --split-by mio_log_id --hive-import   --hive-database rtcp --hive-table mio_log_parquet_test -m 40 --delete-target-dir --as-parquetfile
    sqoop import -D mapreduce.job.name=std_contract_parquet_test  --connect "jdbc:sqlserver://127.0.0.1:1433;database=incrv8_core" --username sa --password Sql2014 --table=std_contract --target-dir /user/hive/std_contract/000001/  --split-by cntr_id --hive-import   --hive-database rtcp --hive-table std_contract_parquet_test -m 10 --delete-target-dir --as-parquetfile
    sqoop import -D mapreduce.job.name=customer_parquet_test --connect "jdbc:sqlserver://127.0.0.1:1433;database=incrv8_core" --username sa --password Sql2014 --table=customer --target-dir /user/hive/customer/000001/  --split-by id_num --hive-import   --hive-database rtcp --hive-table customer_parquet_test -m 5 --delete-target-dir --as-parquetfile
    sqoop import -D mapreduce.job.name=psn_customer_parquet_test  --connect "jdbc:sqlserver://127.0.0.1:1433;database=incrv8_core" --username sa --password Sql2014 --table=psn_customer --target-dir /user/hive/customer/000001/  --split-by id_num --hive-import   --hive-database rtcp --hive-table psn_customer_parquet_test -m 5 --delete-target-dir --as-parquetfile
    sqoop import -D mapreduce.job.name=mio_log_orc_test --connect 'jdbc:sqlserver://127.0.0.1:1433;database=incrv8_core' --username sa --password Sql2014 --table=mio_log  --split-by mio_log_id --hcatalog-database rtcp --hcatalog-table mio_log_orc_test --create-hcatalog-table --hcatalog-storage-stanza "stored as orcfile" -m 20
    sqoop import -D mapreduce.job.name=std_contract_orc_test --connect 'jdbc:sqlserver://127.0.0.1:1433;database=incrv8_core' --username sa --password Sql2014 --table=std_contract  --split-by cntr_id --hcatalog-database rtcp --hcatalog-table std_contract_orc_test --create-hcatalog-table --hcatalog-storage-stanza "stored as orcfile" -m 20
    sqoop import -D mapreduce.job.name=customer_orc_test  --connect "jdbc:sqlserver://127.0.0.1:1433;database=incrv8_core" --username sa --password Sql2014 --table=customer  --split-by id_num  --hcatalog-database rtcp --create-hcatalog-table  --hcatalog-table customer_orc_test  -m 5 --hive-database rtcp --hcatalog-storage-stanza "stored as orcfile"
    sqoop import  -D mapreduce.job.name=psn_customer_orc_test --connect "jdbc:sqlserver://127.0.0.1:1433;database=incrv8_core" --username sa --password Sql2014 --table=psn_customer  --split-by id_num --create-hcatalog-table --hcatalog-database rtcp --hcatalog-table psn_customer_orc_test  -m 5 --hive-database rtcp  --hcatalog-storage-stanza "stored as orcfile"
    

      

     

  • 相关阅读:
    java中的abstract、接口、final和Object
    java中的多态性
    java中的继承和覆盖
    面向对象编程
    java中的this
    java中的类与对象(2)
    java中的类与对象(1)
    Java中的运算及优先级
    Selenium Python
    Python学习①. 基础语法
  • 原文地址:https://www.cnblogs.com/boanxin/p/10345177.html
Copyright © 2020-2023  润新知