所用hadoop版本,2.8.0
(1)hadoop是用于处理(运算分析)海量数据的,且是采用分布式集群的方式;
(2)通俗来说,可以把hadoop理解为一个编程框架(比如springmvc、spring、hibernate/mybatis),有着自己特定的API封装和用户编程规范,用户可借助这些API来实现数据处理逻辑;
(3)从另一个角度,hadoop又可以理解为一个提供服务的软件(比如数据库服务oracle/mysql、索引服务solr,缓存服务redis等),用户程序的功能都是通过客户端向hadoop集群请求服务来实现;
可以在windows上操作远程的mysql服务器
我们也可以在windows上操作远程的hadoop集群
(4)具体来说,hadoop两个大的功能:海量数据的存储;海量数据的分析;
分布式文件系统:HDFS —— 实现将文件分布式存储在很多的服务器上(海量数据的存储服务)
分布式运算编程框架:MAPREDUCE —— 实现在很多机器上分布式并行运算(导jar包,写程序) 进行海量数据分析(替代品: spark等) 思想
分布式资源调度平台:YARN —— 帮用户调度大量的mapreduce程序,并合理分配运算资源
1、客户把一个文件存入hdfs,其实hdfs会把这个文件切块后,分散存储在N台linux机器系统中<准确来说:切块的行为是由客户端决定的>
负责存储文件块的角色:datanode
2、一旦文件被切块存储,那么,hdfs中就必须有一个机制,来记录用户的每一个文件的切块信息,及每一块的具体存储机器
负责记录块信息的角色是:name node
存储和读取文件的时候,都需要经过namenode
3、为了保证数据的安全性,hdfs可以将每一个文件块在集群中存放多个副本(到底存几个副本,是由当时存入该文件的客户端指定的)
副本:如果说3个副本,就是指这个文件有3份,而不是4份。
配置好后先给datanode节点发送hadoop目录,这是发送了四台机器的密令
for iin {2..5}; do scp -r /root/apps/hadoop-2.8.0 hdp-0$i:/root/apps/; done
hadoop-daemon.sh start datanode(datanode节点直接启动就好,会自动获取namenode节点)
for i in{2..5}; do ssh hdp-0$i hadoop-daemon.sh start datanode; done 启动其他节点datanode
如果配置了slaves,可直接使用start-dfs.sh和stop-dfs.sh启动和关闭整个系统
需要注意的问题:必须先格式化那么namenode节点再启动datanode,因为启动datanode节点时会根据core-site.xml自动获取namenode的id,同时namenode记录下datanode。如果顺序颠倒,datanode记录的是原namenode的id,关联不起来,同时新的datanode无法创建,启动失败,解决方案:格式化datanode或删除配置的datanode的目录,再启动一次datanode即可。每次格式化namenode都相当于新建了一个管理系统,旧的datanode虽然数据还在但失去了关联关系,数据组装不起来。