每日知识点

一、Hadoop

1、组成:MapReduce(数据分析)、HDFS(分布文件管理)、Yarn(资源管理器)

2、HDFS:文件读写、存储

3、MapReduce:不同语言编写mr函数,通过JobTracker调度,通过TaskTracker执行,应用:单词计数、数据去重、单表关联、多表关联。(可以通过命令行执行Hadoop Streaming流,通常用于简单的任务)

4、Yarn:由全局的Resource Manager、Node Manager、Application Master和Container等组件构成,它是一个master/slave结构

二、Zookeeper

1、概念:分布式系统/软件的协调者,其设计保证分布式程序的健壮性,用于集群的管理。使开发人员关注逻辑,而不用关注协调。

2、功能:数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master 选举、配置维护,名字服务、分布式同步、分布式锁和分布式队列等功能。

3、应用:Hadoop中使用Zookeeper的事件处理确保整个集群只有一个NameNode,存储配置信息等;HBase使用Zookeeper的事件处理确保整个集群只有一个HMaster,察觉HRegionServer联机和宕机,存储访问控制列表等;Kafka使用ZK监控节点状态、存储偏移量,并选择主broker

4、组成:zookeeper=文件系统+通知机制。

 5、文件系统

每个子目录项NameService称为一个znode,四种类型:持久化节点、临时节点、~顺序编号目录节点(根据节点名称按顺序编号)

 6、配置

通过zoo.cfg文件进行配置,复制重命名得到,即cp zoo_smaple.cfg zoo.cfg

https://www.cnblogs.com/dragon-L/p/8532287.html

7、zkcli/zkclient的使用(增删改查)

建立会话连接:./zkCli.sh  -timeout 0  -r  -server  ip:port

获取节点的状态,使用方法:stat path

 

 获取节点的子节点列表及stat该节点,使用方法:ls path或ls2 path

获取节点的数据,其结果是当前节点的值和stat该路径的值放在一起。使用方法:get path

使用delete path删除无子节点的node,删除含有子节点的节点:rmr path;

8、ACL权限控制

client在ZK文件系统上的5种操作权限为:CREATE、READ、WRITE、DELETE、ADMIN ,即增、删、改、查、管理权限,这5种权限简写为crwda(每个单词的首字符缩写);

权限分为三个维度:scheme、id、permission,通常表示为scheme:id:permission,schema代表授权策略,id表用户,permission表权限。

 权限

 三、Hive

1、概念:Haddop的数据仓库工具,将结构化数据文件映射为一张表,并可以通过类SQL查询

2、特点:无需编写mapreduce、延迟高,用于数据分析和对实时性要求不高的场景,适用于处理大数据,可以根据需求自定义实现函数;效率低,HQL表达能力有限,无法毫秒级返回

3、与MySQL比较

4、不支持:索引、非等值连接(支持等值)、or多条件过滤(支持and)、update和delete

5、底层原理:通过Hive将HQL转换为MapReduce程序在集群上执行

 底层执行举例:join、group by、distinct

 

 

 

 

 6、开窗函数:同时显示聚集前后的数据

 

 

 Rank、聚合、行转列CONCAT(string A, string B)、列转行EXPLODE(col)

7、调优:MapJoin(通过map在内存端进行join)、行列过滤、合理设置Map数跟Reduce数、严格模式(Limit,限制笛卡尔积,不允许扫描分区表的所有分区)、开启map端combiner(set hive.map.aggr=true;)、压缩、小文件合并

8、其他考点:数据倾斜、分区表和分桶表(更细粒度)、视图和索引、Sort By、Order By、Distrbute By、Cluster By、内外部表、HQL 如何转变为MapReduce

四、Mybatis

1、课程介绍

  • 概念、环境搭建、入门案例
  • 单表CRUD、参数返回值及dao编写、配置细节
  • 连接池、事务、多表
  • 缓存和注解开发

(一)Day01

1、框架概念

  • 概念:封装细节的解决方案,极简方式开发,提高开发效率
  • 三层架构(表示层、业务层、持久层)和框架

  •  持久层解决方案:
    • JDBC的三个对象,是规范
    • Spring的JDBCTemplate(对JDBC的简单封装)
    • Apache的DBUtils(对JDBC的简单封装)
    • JDBCTemplate和DBUtils是工具类
  • JDBC缺点:资源浪费、代码难以维护、prepareStatement的参数硬编码(数量固定),查询列名的硬编码
  • Mybatis:内部封装了JDBC的持久层框架
    • 通过xml或注解对statement进行配置
    • 通过ORM(表和实体联系,通过操作实体类实现操作数据库表)解决了实体和数据库的映射

2、入门使用:

  • 步骤:导入依赖、创建实体类和dao接口、创建主配置文件SqlMapConfig、创建映射配置文件IUserDao/IUserMapper
  • 注意:
    • 映射配置文件路径需要和dao接口的包结构相同
    • 主配置文件中mapper标签的namespace属性需要为dao接口的全限定类名(主配置文件指定接口位置)
    • 映射配置文件中select的id需要为dao接口的方法名。
  • 使用步骤:
public static void main(String[] args) throws IOException {
        //1.读取配置文件
        InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
        //2.创建SqlSessionFactory工厂
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        SqlSessionFactory factory = builder.build(in);
        //3.使用工厂生产SqlSession对象
        SqlSession session = factory.openSession();
        //4.使用SqlSession创建Dao接口的代理对象
        IUserDao userDao = session.getMapper(IUserDao.class);
        //5.使用代理对象执行方法
        List<User> users = userDao.findAll();
        for (User user : users) {
            System.out.println(user);
        }
        //6.释放资源
        session.close();
        in.close();
    }
  • 基于注解的方式:
    • 移除映射配置文件,在dao接口上添加@Select注解,并指定sql语句
    • 主配置文件仍需要配置dao接口的全限定类名
  • 注意:除了映射配置文件、注解,也支持实现类的方式  

3、设计模式分析

  • 构建者模式(build方法)
  • 工厂模式(factory对象实现)
  • 代理模式(加载配置文件),无需修改源码即可对原有功能增强---使用dom4j解析xml

 (二)Day02

1、单表的CRUD操作

  • 保存:saveUser
  • 查询所有:findAll
  • 模糊查询:like '%${value}%';  userDao.findByName("王");
  • 获取插入操作的id
<insert id="saveUser" parameterType="com.itcast.domain.User">
        <!-- 配置插入后,获取插入操作的id -->
        <selectKey keyProperty="id" keyColumn="id" resultType="int" order="AFTER">
            select last_insert_id();
        </selectKey>
        insert into user(username,address,sex,birthday) values(#{username},#{address},#{sex},#{birthday});
</insert>
  • 使用pojo实体类的包装对象作为查询条件
    • POJO(Plain Ordinary Java Object)简单的Java对象
    • OGNL表达式Object Graphic Navigation Language对象图导航语言
    • 作用:省略get实现数据的获取,如user.username
    • 在Mybatis中可以省略user,直接写列名,如select * from user where username like '#{username}';

2、名字不一致报错

  • 设置属性名与列名的对应关系/起别名
  • 通过resultMap单独配置列名和属性的对应关系
    <resultMap id="userMap" type="com.itcast.domain.User">
        <!--主键字段的对应-->
        <id property="id" column="id"></id>
        <!--非主键字段的对应-->
        <result property="username" column="username"></result>
        <!--等-->
    </resultMap>
    <select id="findAll" resultMap="userMap">
        select * from user;
    </select>

3、编写DAO实现类,不再使用代理dao的方式

  • 查询列表:session.selectList("com.itcast.dao.IUserDao.findAll");
  • 保存操作:session.insert("com.itcast.dao.IUserDao.saveUser",user);
  • 根据id查询:User user = session.selectOne("com.itcast.dao.IUserDao.findById", userId);
  • 聚合函数:Integer count = session.selectOne("com.itcast.dao.IUserDao.findTotal");

4、标签使用

  • properties:通过resource、url属性配置数据库连接信息
    •  URL:Uniform Resource Locator:统一资源定位符,可以唯一标识一个资源的位置
    • 写法:协议 主机 端口 URI,例如windows的file协议,file:///c:
    • URI:Uniform Resource Identifier 统一资源标识符,可以在应用中唯一定位一个资源
  • typeAliases标签,通过alias属性配置类名的别名  
  • package标签:指定dao接口所在的包,无需再通过mapper指定dao接口所在的包了

(三)Day03

1、连接池:

  • 线程安全的存储连接的容器、实现队列先进先出
  • SqlMapConfig的type配置:UNPOOLED(注册驱动,获取连接)、POOLED、JNDI(服务器提供的)

2、配置文件中的动态sql

  • if和where
  • foreach(相当于for循环)和sql抽取代码片段(include)      

3、多表操作中的resultMap配置

  • 主配置文件配置package就无须每个配置文件均配置
  • 需要在mapper内写select的sql语句
  • 一对一 
  • 一对多:collection
  • 多对多

4、JNDI:Java Naming and Directory Interface,Java命名和目录接口

  • 模仿注册表,MET-INF下的context.xml

(四)Day04

1、延迟加载和立即加载

  • 延迟加载:一对多,多对多(懒加载,设置lazyLoadEnabled)
  • 立即加载:多对一,一对一
  • 配置:association标签立即加载,collection标签懒加载

2、缓存:常查询不改变,正确与否对结果影响不大

  • 一级缓存:将SQLSession对象的查询结果存入map,可以通过clearCache(),或对SQLSession进行修改删除提交关闭时清空缓存
  • 二级缓存:SqlSessionFactory对象的缓存,select中配置useCache="true"

3、注解开发

  • 无需写IUserDao.xml配置文件,使用@Select @Insert @Update @Delete注解,#{id}表示函数参数,可以不重名
  • 模糊查询:'%${value}%' 或 #{username}(后者需要字符串拼接,%王%)
  • 建立属性和列的对应关系: @Results(id="userMap" value ={} ,使用@ResultMap(value="userMap")
  • 配置一对一:@Result(property = "user",column = "uid",one=@One(select="com.itheima.dao.IUserDao.findById",fetchType= FetchType.EAGER))
  • 配置一对多@Result(property = "accounts",column = "id",many=@Many(select = "com.itheima.dao.IAccountDao.findAccountByUid",fetchType = FetchType.LAZY))

五、全文检索技术

(一)Lucene--路森

1、概念

  • 结构化与非结构化数据(格式长度数据类型是否一致)及查询
  • 全文检索:创建索引(根据空格分割,键为字符串,值为对应的文件),查询索引(索引可以一次创建多次查询)

2、流程

  • 创建索引
    • 获得文档
    • 构建Document文档对象,包含多个域Field(name-content/filename,value原始文档数据)
    • 分析文档/分词:拆分、转小写、去标点和停用词
    • 根据关键词列表建索引(与文档对应),实际存储为倒排索引(根据词语找文档)
  • 查询索引
    • 查询接口
    • 关键词封装为查询对象
    • 执行查询:对应域上搜索
    • 渲染结果

3、入门

  • IndexWriter indexWriter = new IndexWriter(directory,new IndexWriterConfig());存document及多个field
  • 使用luke查询索引库的内容
  • 查询索引库:IndexSeacher传递TermQuery对象,返回TopDocs对象

4、分析器(Analyzer的子类,父类引用指向子类对象)

  • 默认标准分析器StandardAnalyzer,返回TokenStream对象包含分词结果
  • 中文分析器:IKAnalyzer

5、索引库的维护

  • 添加文档
  • 删除文档:indexWriter.deleteDocuments(new Term("name","apache"));
  • 修改文档:indexWriter.updateDocument(new Term("name","spring"),document);---先删除再添加
  • 查询索引库:
    • TermQuery根据关键词查
    • RangeQuery根据范围查--Query query = LongPoint.newRangeQuery("size", 0, 100);
    • QueryParser带分析 的查询--new QueryParser("name",new IKAnalyzer()).parse("lucene是一个java开发的全文检索工具包");

(二)ElasticSearch---Day01

1、概念

  • 核心lucene,使用restful api隐藏复杂性
  • 对比solr:实时性好,自带分布式协调管理功能,无需zk
  • 概念:索引、类型、字段、映射、文档、集群、节点、分片和复制

2、使用

  • 9200是用于管理的tcp端口,9300是restful形式的http端口
  • 界面插件:es-head-master、grunt
  • 操作:
    • 创建索引、设置mappding映射、删除索引,可以选择postman和head工具删除
    • POST添加文档、DELETE删除文档、修改文档
    • 查询:根据id、根据关键词、queryString、head插件查询
    • 分词:标准、IKAnalyzer中文分词器
  • 集群:节点、分片、复制

(三)ElasticSearch---Day02

1、java客户端管理

  • 操作:建索引库、设置mapping
  • 索引库操作:
    • 添加文档(.field("id",1l)、jackson)
    • 查询索引库(id、term关键词、querystring带分析的查询)
    • 分页查询,结果高亮highlightFields

2、Spring Data ES      

  • 配置:导包,创建配置文件,管理索引库加注解,创建ElasticsearchRepository子接口
  • 操作:创建索引及设置映射关系,添加文档(articleRepository.save(article);),删除文档、更新文档
  • 查询:查询文档、自定义查询的命名,设置分页(PageRequest.of(0,15);),NativeSearchQuery原生方式执行查询

 

posted @ 2021-07-14 11:34  哥们要飞  阅读(87)  评论(0编辑  收藏  举报