1、HDFS分布式存储hdfs架构图 namenode:统一管理文件的元数据信息 fsImage:存储了文件的基本信息，如文件路径，文件副本集个数，文件块的信息，文件所在的主机信息。 editslog：存了客户端对hdfs中各种写操作的日志（指令）； secondaryNamenode：协助namenode完成fsimage和editlog的合并（定期合并）。 合并周期：1、每隔1小时合并一次 2、当editlog文件大小超过64M,立刻合并 datanode：负责存储真实的数据。 block：存储数据的基本单位，默认128M。 2、yarn框架yarn的工作流程 当用户向YARN中提交一个应用程序后，YARN将分两个阶段运行该应用程序： 第一个阶段是启动ApplicationMaster； 第二个阶段是由ApplicationMaster创建应用程序，为它申请资源，并监控它的整个运行过程，直到运行完成。 具体流程如下： 步骤1 用户向YARN中提交应用程序，其中包括ApplicationMaster程序、启动ApplicationMaster的命令、用户程序等。 步骤2 ResourceManager为该应用程序分配第一个Container，并与对应的Node-Manager通信，要求它在这个Container中启动应用程序的ApplicationMaster。 步骤3 ApplicationMaster首先向ResourceManager注册，这样用户可以直接通过ResourceManager查看应用程序的运行状态，然后它将为各个任务申请资源，并监控它的运行状态，直到运行结束，即重复步骤4~7。 步骤4 ApplicationMaster采用轮询的方式通过RPC协议向ResourceManager申请和领取资源。 步骤5 一旦ApplicationMaster申请到资源后，便与对应的NodeManager通信，要求它启动任务。 步骤6 NodeManager为任务设置好运行环境（包括环境变量、JAR包、二进制程序等）后，将任务启动命令写到一个脚本中，并通过运行该脚本启动任务。 步骤7 各个任务通过某个RPC协议向ApplicationMaster汇报自己的状态和进度，以让ApplicationMaster随时掌握各个任务的运行状态，从而可以在任务失败时重新启动任务。 在应用程序运行过程中，用户可随时通过RPC向ApplicationMaster查询应用程序的当前运行状态。 步骤8 应用程序运行完成后，ApplicationMaster向ResourceManager注销并关闭自己。 3、mapreduce核心思想 步骤1 分布式的运算程序往往需要分成至少2个阶段。 步骤2 第一个阶段的maptask并发实例，完全并行运行，互不相干。 步骤3 第二个阶段的reduce task并发实例互不相干，但是他们的数据依赖于上一个阶段的所有maptask并发实例的输出。 步骤4 MapReduce编程模型只能包含一个map阶段和一个reduce阶段，如果用户的业务逻辑非常复杂，那就只能多个mapreduce程序，串行运行。
一、列表任意对象的有序集合 列表是一组任意类型的值，按照一定顺序组合而成的通过偏移读取组成列表的值叫做元素，每一个元素被标识一个索引，第一个索引是0，序列的功能都能实现可变长度，异构以及任意嵌套列表中的元素可以是任意类型，甚至是列表类型，也就是说列表可以嵌套可变的序列支持索引、切片、合并、删除等等操作，它们都是在原处进行修改列表对象引用数组列表可以当成普通的数组，每当用到引用时，Python总是会将这个引用指向一个对象，所以程序只需处理对象的操作。当把一个对象赋给一个数据结构元素或变量名时，Python总是会存储对象的引用，而不是对象的一个拷贝定义列表 list=[1,2,3] list=[ ] # 定义空列表 二、元组任意对象的有序集合与列表相同通过偏移存取与列表相同属于不可变序列类型类似于字符串，但元组是不可变的，不支持在列表中任何原处修改操作，不支持任何方法调用固定长度、异构、任意嵌套 固定长度即元组不可变，在不被拷贝的情况下长度固定，其他同列表对象引用的数组 2与阿基诺族与列表相似，元祖是对象引用的数组定义元组 t=(1,2,3) t=( ) # 定义空元组 和列表相比较 1.比列表操作速快 2.对数据“写保护“ 3.可用于字符串格式化中 4.可作为字典的key 三、字典通过键而不是偏移量来读取字典就是一个关联数组，是一个通过关键字索引的对象的集合，使用键-值（key-value）进行存储，查找速度快任意对象的无序集合字典中的项没有特定顺序，以“键”为象征可变长、异构、任意嵌套同列表，嵌套可以包含列表和其他的字典等属于可变映射类型因为是无序，故不能进行序列操作，但可以在远处修改，通过键映射到值。字典是唯一内置的映射类型（键映射到值的对象）对象引用表字典存储的是对象引用，不是拷贝，和列表一样。字典的key是不能变的，list不能作为key，字符串、元祖、整数等都可以定义字典 d={'user':['user1','user2']} d={} # 定义空字典和列表相比较，字典的特性：查找和插入的速度极快，不会随着key的增加而增加需要占用大量的内存，内存浪费多但是列表相反： 1.查找和插入的时间随着元素的增加而增加 2.占用空间小，浪费内存很少 所以，字典是用空间来换取时间的一种方法四、集合是一组key的集合，但不存储value，并且key不能重复重复元素在集合中自动被过滤集合可以看成数学意义上的无序和无重复元素的集合，因此，两个集合可以做数学意义上的交集、并集等操作定义集合 s={1,2,3,4} s=set([ ]) # 定义空集合和字典对比1.集合和字典的唯一区别仅在于没有存储对应的value 2.集合的原理和字典一样，同样不可以放入可变对象，因为无法判断两个可变对象是否相等，也就无法保证集合内部“不会有重复元素”
HFDS的Shell操作1．基本语法bin/hadoop fs 具体命令2．命令大全[atguigu@hadoop102 hadoop-2.7.2]$ bin/hadoop fs [-appendToFile <localsrc> ... <dst>] [-cat [-ignoreCrc] <src> ...] [-checksum <src> ...] [-chgrp [-R] GROUP PATH...] [-chmod [-R] <MODE[,MODE]... | OCTALMODE> PATH...] [-chown [-R] [OWNER][:[GROUP]] PATH...] [-copyFromLocal [-f] [-p] <localsrc> ... <dst>] [-copyToLocal [-p] [-ignoreCrc] [-crc] <src> ... <localdst>] [-count [-q] <path> ...] [-cp [-f] [-p] <src> ... <dst>] [-createSnapshot <snapshotDir> [<snapshotName>]] [-deleteSnapshot <snapshotDir> <snapshotName>] [-df [-h] [<path> ...]] [-du [-s] [-h] <path> ...] [-expunge] [-get [-p] [-ignoreCrc] [-crc] <src> ... <localdst>] [-getfacl [-R] <path>] [-getmerge [-nl] <src> <localdst>] [-help [cmd ...]] [-ls [-d] [-h] [-R] [<path> ...]] [-mkdir [-p] <path> ...] [-moveFromLocal <localsrc> ... <dst>] [-moveToLocal <src> <localdst>] [-mv <src> ... <dst>] [-put [-f] [-p] <localsrc> ... <dst>] [-renameSnapshot <snapshotDir> <oldName> <newName>] [-rm [-f] [-r|-R] [-skipTrash] <src> ...] [-rmdir [--ignore-fail-on-non-empty] ...] [-setfacl [-R] [{-b|-k} {-m|-x <acl_spec>} <path>]|[--set <acl_spec> <path>]] [-setrep [-R] [-w] <rep> <path> ...] [-stat [format] <path> ...] [-tail [-f] <file>] [-test -[defsz] <path>] [-text [-ignoreCrc] <src> ...] [-touchz <path> ...] [-usage [cmd ...]]3．常用命令实操（0）启动Hadoop集群（方便后续的测试） [atguigu@hadoop102 hadoop-2.7.2]$ sbin/start-dfs.sh [atguigu@hadoop103 hadoop-2.7.2]$ sbin/start-yarn.sh（1）-help：输出这个命令参数 [atguigu@hadoop102 hadoop-2.7.2]$ hadoop fs -help rm（2）-ls: 显示目录信息 [atguigu@hadoop102 hadoop-2.7.2]$ hadoop fs -ls /（3）-mkdir：在hdfs上创建目录 [atguigu@hadoop102 hadoop-2.7.2]$ hadoop fs -mkdir -p /sanguo/shuguo（4）-moveFromLocal从本地剪切粘贴到hdfs [atguigu@hadoop102 hadoop-2.7.2]$ touch kongming.txt [atguigu@hadoop102 hadoop-2.7.2]$ hadoop fs -moveFromLocal ./kongming.txt /sanguo/shuguo（5）-appendToFile ：追加一个文件到已经存在的文件末尾 [atguigu@hadoop102 hadoop-2.7.2]$ touch liubei.txt [atguigu@hadoop102 hadoop-2.7.2]$ vi liubei.txt输入san gu mao lu [atguigu@hadoop102 hadoop-2.7.2]$ hadoop fs -appendToFile liubei.txt /sanguo/shuguo/kongming.txt（6）-cat：显示文件内容 [atguigu@hadoop102 hadoop-2.7.2]$ hadoop fs -cat /sanguo/shuguo/kongming.txt（7）-tail：显示一个文件的末尾 [atguigu@hadoop102 hadoop-2.7.2]$ hadoop fs -tail /sanguo/shuguo/kongming.txt（8）-chgrp 、-chmod、-chown：linux文件系统中的用法一样，修改文件所属权限 [atguigu@hadoop102 hadoop-2.7.2]$ hadoop fs -chmod 666 /sanguo/shuguo/kongming.txt [atguigu@hadoop102 hadoop-2.7.2]$ hadoop fs -chown atguigu:atguigu /sanguo/shuguo/kongming.txt（9）-copyFromLocal：从本地文件系统中拷贝文件到hdfs路径去 [atguigu@hadoop102 hadoop-2.7.2]$ hadoop fs -copyFromLocal README.txt /（10）-copyToLocal：从hdfs拷贝到本地 [atguigu@hadoop102 hadoop-2.7.2]$ hadoop fs -copyToLocal /sanguo/shuguo/kongming.txt ./（11）-cp ：从hdfs的一个路径拷贝到hdfs的另一个路径 [atguigu@hadoop102 hadoop-2.7.2]$ hadoop fs -cp /sanguo/shuguo/kongming.txt /zhuge.txt（12）-mv：在hdfs目录中移动文件 [atguigu@hadoop102 hadoop-2.7.2]$ hadoop fs -mv /zhuge.txt /sanguo/shuguo/（13）-get：等同于copyToLocal，就是从hdfs下载文件到本地 [atguigu@hadoop102 hadoop-2.7.2]$ hadoop fs -get /sanguo/shuguo/kongming.txt ./（14）-getmerge ：合并下载多个文件，比如hdfs的目录 /aaa/下有多个文件:log.1, log.2,log.3,... [atguigu@hadoop102 hadoop-2.7.2]$ hadoop fs -getmerge /user/atguigu/test/* ./zaiyiqi.txt（15）-put：等同于copyFromLocal [atguigu@hadoop102 hadoop-2.7.2]$ hadoop fs -put ./zaiyiqi.txt /user/atguigu/test/（16）-rm：删除文件或文件夹 [atguigu@hadoop102 hadoop-2.7.2]$ hadoop fs -rm /user/atguigu/test/jinlian2.txt（17）-rmdir：删除空目录 [atguigu@hadoop102 hadoop-2.7.2]$ hadoop fs -mkdir /test [atguigu@hadoop102 hadoop-2.7.2]$ hadoop fs -rmdir /test（18）-du统计文件夹的大小信息 [atguigu@hadoop102 hadoop-2.7.2]$ hadoop fs -du -s -h /user/atguigu/test 2.7 K /user/atguigu/test [atguigu@hadoop102 hadoop-2.7.2]$ hadoop fs -du -h /user/atguigu/test 1.3 K /user/atguigu/test/README.txt 15 /user/atguigu/test/jinlian.txt 1.4 K /user/atguigu/test/zaiyiqi.txt
1.start-dfs.sh启动时出现Error: JAVA_HOME is not set and could not be found start-dfs.sh出现错误 解决：vim /home/hadoop/.bashrc 添加如下内容export JAVA_HOME=/opt/module/jdk1.7.0_65 export PATH=$PATH:$JAVA_HOME/bin export HADOOP_PREFIX=/home/hadoop/hadoop-2.7.1再次启动 # start-dfs.sh———————————————————————————————————————2.*datanode不被namenode识别问题Namenode在format初始化的时候会形成两个标识，blockPoolId和clusterId。新的datanode加入时，会获取这两个标识作为自己工作目录中的标识。一旦namenode重新format后，namenode的身份标识已变，而datanode如果依然持有原来的id，就不会被namenode识别。解决办法： 删除datanode节点中的数据后，再次重新格式化namenode。
系统有时候会默认使用OpenJDK版本，需要卸载后，重新安装自己需要的JDK版本1.切换到root用户2.查询OpenJDKrpm -qa|grep java3.删除openJDK版本rpm -e --nodeps java-1.7.0-openjdk-1.7.0.9-2.3.4.1.el6_3.i686 rpm -e --nodeps java-1.6.0-openjdk-1.6.0.0-1.50.1.11.5.el6_3.i6864.再次查询OpenJDK，查看openJDK是否已删除rpm -qa|grep java
《策略思维》又名战争的艺术，耶鲁大学教授奈尔伯夫和普林斯顿大学教授迪克西特的这本著作，用许多活生生的例子，向没有经济学基础的读者展示了当今比较流行的博弈学说。博弈是指在一定的游戏规则约束下，基于直接相互作用的环境条件，各参与⼈人依靠所掌握的信息，选择各自策略，以实现利益最大化和风险成本最小化的过程，简单说就是人与人之间为了谋取利益而竞争。从《策略思维》中我们从⼩小故事中细细品味到了博弈论的真谛，当我们处于优势的时候要先观察对手出牌情况，然后选择最稳妥最有效的策略将优势转化为胜势；当我们受制于人、处于被动地位之时，我们要解放思想，切不可畏手畏脚，运用最大胆、最强势的方式将对手一击致命，争取一举扭转乾坤。本书共分三部分。第一部分“策略概论”，阐述策略的本质和策略与战略战术之间的关系以及企业进行策略思考的意义；第二部分“策略思维”，着重阐述策略思维的基本⽅方法、特点、原则、来源和沟通。第三部分“策略构建”，从操作和运用的角度，阐述企业策略的产生和发展，指明企业策略的发展方向。