HADOOP总结
Hadoop(Hadoop的特点:
(1) 高可靠性 : Hadoop底层将数据以多个副本的形式存储在不同的机器上,保证数据的安全可靠。
(2) 高扩展性 :当存储hdp集群的存储能力和运算资源不足时,可以横向的扩展机器节点来达到扩容和增强运算能力 。
(3) 高效性 :在MapReduce的思想下能够在节点之间动态地移动运算,且是分布式并行工作的,所以运海量数据非常高效。
(4) 高容错性 : Hadoop能够自动保存数据的多个副本,当有存储数据的节点宕机以后, 会自动的复制副本维持集群中副本的个数 ,并且能够自动将失败的任务重新分配。
(5) 低成本 :hadoop可以运行在廉价的机器上并行工作,达到高效,安全,效率于一身目的。)
HDFS(hadoop distribute file system)
1.什么是hdfs(分布式文件系统,用来存储和管理海量数据,解决了海量数据无法单台机器存储的问题,将海量的数据存储在不同的机器中.)
2.特点
优点
1.高容错性,安全性(数据存储在不同的机器中,并且每个数据块默认存储3个副本(存储在不同的机器中),当集群中的某个数据块的副本由于某种原因(宕机,磁盘损坏等)丢失以后,HDFS会自动恢复!)
2.扩展性(HDFS的存储能力可以通过添加机器来横向扩容,整个集群中所有机器的存储能力就是HDFS的存储能力.)
3.可以存储海量数据
缺点
1.数据访问延迟比较高(数据底层存储在不同的机器中, 并且大文件会被切块存储在不同的机器中, 读取数据需要RPC远程网络请求获取数据 ,所以数据的访问时间比较长.)
2.不适合存储大量的小文件(每个数据文件在namenode中记录元数据信息,存储大量小文件增加namenode的压力,占用namenode的内存,影响集群的整体存储能力!)
3.不支持并发写和文件的随机修改(hdfs文件系统适合一次写入多次读取的数据操作,可以支持追加数据,继续写入会覆盖主要用于存储数据.)
3.架构(主从架构,主节点namenode,从节点datanode)
namenode
1.用于记录文件存储的元数据((namenode将这些数据的元数据信息记录在内存中,并且将这些元数据信息定期的序列化到本地磁盘上))
2.接收客户端的读写请求,给datanode分配存储任务 , 负责存储任务的计算和划分,给客户端返回请求数据的元信息
3.记录用户存储的文件的大小(128M)、切分的块数、每一块的副本数(3个副本)和存储在datanode上的位置
4.维护集群中的节点的数量,接收datanode的注册, 维护了一个统一的集群版本
5.定期的检查集群中数据的存储正确与否 ,副本的个数, 采取措施
6.接收datanode的心跳汇报(3秒一次),分发容错任务,适当的做负载均衡和副本复制
7.接收datanode的数据的汇报 , 更新元数据
8.对用户的操作行为记录日志
9.维护子节点的上下线感知
10.维护统一的访问虚拟目录
datanode
1.真正存储数据的节点
2.直接处理客户端的读写请求
3.定期(心跳机制,3秒一次)的汇报存储情况
4.接收namenode的分配的副本移动和复制的任务
5.整体数据的定时汇报 1小时
6.存储数据,将数据以物理切块的形式存储在本地指定的磁盘目录中
secondary namenode
帮助namenode管理元数据,定期的合并日志文件和镜像文件 序列化成新的镜像文件返回给namenode , 过期删除老的日志和镜像文件(checkpoint机制)
4.安装
上传
解压
内部配置(指定namenode的运行机器
指定namenode的name和datanode的data 的数据存储目录
配置Secondraynamenode工作的机器
vi hdfs-site.xml
dfs.namenode.rpc-address
linux01:9000
dfs.namenode.name.dir /opt/hdpdata/name/ dfs.datanode.data.dir /opt/hdpdata/data/ dfs.namenode.secondary.http-address linux02:50090 ) /opt/apps/hadoop-2.8.5/etc/hadoop vi hdfs-site.xml 环境变量配置(/opt/apps/hadoop-2.8.5/etc/hadoop 配置hadoop的JAVA_HOME的环境依赖 vi hadoop-env.sh /etc/profile hadoop-env.sh export JAVA_HOME=/opp/apps/jdk1.8.0_231 export HADOOP_HOME=/opt/apps/hadoop-2.8.5/ export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin) /opt/apps/hadoop-2.8.5/etc/hadoop 配置hadoop的JAVA_HOME的环境依赖 vi hadoop-env.sh 分发(linux01 linux01 linux03) /opt/apps/hadoop-2.8.5/etc/hadoop vi slaves 启动(bin/hadoop namenode -format ls /opt/hadoop name 在sbin目录下 ./hadoop-daemon.sh start namenode ./hadoop-daemon.sh start datanode 访问hadoop提供的web页面 http://linux01:50070 Hdfs://linux01:9000 一键启动 start-dfs.sh stop-dfs.sh) 第一启动namenode 格式化namenode 5.客户端 shell hdfs dfs -cat -put -get -ls -mkdir -rm-r -chmod hadoop dfs Java客户端 客户端对象(FileSystem fileSystem = FileSystem.newInstance(new URI("hdfs://linux01:9000"),new Configuration(),"root"); 副本个数 new Configuration().set("dfs.replication","2"); 块大小 new Configuration().set("dfs.blocksize","32M");) 配置详解 代码 > 项目中配置文件 > 默认的 fs . 方法 上传(fileSystem.copyFromLocalFile(new Path("F://http.log"),new Path("/")); 参数一 是否删除源文件 默认false不删除 参数二 是否覆盖HDFS中已存在的文件 默认不覆盖 参数三 本地源文件 参数四 HDFS的路径 copyFromLocalFile(arg1 , arg2 ,arg3 ,arg4)) 下载(fileSystem.copyToLocalFile(new Path("/abc"),new Path("F://")); 参数一 是否删除hdfs中的文件 默认不删除 *** 参数二 hdfs的路径 参数三 本地路径 参数四 是否本地校验 true 不会生成校验文件 ***** fs.copyToLocalFile(true, new Path("/word.txt"), new Path("F://a/word.txt"), true);) 删除(boolean abc = fileSystem.delete(new Path("/http.log"),true);) 查看列表(遍历指定目录下所有的内容 文件 文件夹 fil.exists(new Path("/2.java")); fil.isFile(new Path("2.java")); fil.isDirectory(new Path("2.java")); fil.setPermission(new Path("2.java"), permission); fil.setOwner(new Path("2.java"), username, groupname); FileStatus[] listStatus = fil.listStatus(new Path("/")); boolean ABC = fileStatus.isDirectory(); boolean abc = fileStatus.isFile