所用hadoop版本,2.8.0
什么是hadoop?
(1)hadoop是用于处理(运算分析)海量数据的,且是采用分布式集群的方式;
(2)通俗来说,可以把hadoop理解为一个编程框架(比如springmvc、spring、hibernate/mybatis),有着自己特定的API封装和用户编程规范,用户可借助这些API来实现数据处理逻辑;
(3)从另一个角度,hadoop又可以理解为一个提供服务的软件(比如数据库服务oracle/mysql、索引服务solr,缓存服务redis等),用户程序的功能都是通过客户端向hadoop集群请求服务来实现;
可以在windows上操作远程的mysql服务器
我们也可以在windows上操作远程的hadoop集群
(4)具体来说,hadoop两个大的功能:海量数据的存储;海量数据的分析;
hadoop中的核心组件
分布式文件系统:HDFS —— 实现将文件分布式存储在很多的服务器上(海量数据的存储服务)
分布式运算编程框架:MAPREDUCE —— 实现在很多机器上分布式并行运算(导jar包,写程序) 进行海量数据分析(替代品: spark等) 思想
分布式资源调度平台:YARN —— 帮用户调度大量的mapreduce程序,并合理分配运算资源
hdfs的工作机制:
1、客户把一个文件存入hdfs,其实hdfs会把这个文件切块后,分散存储在N台linux机器系统中<准确来说:切块的行为是由客户端决定的>
负责存储文件块的角色:datanode
2、一旦文件被切块存储,那么,hdfs中就必须有一个机制,来记录用户的每一个文件的切块信息,及每一块的具体存储机器
负责记录块信息的角色是:name node
存储和读取文件的时候,都需要经过namenode
3、为了保证数据的安全性,hdfs可以将每一个文件块在集群中存放多个副本(到底存几个副本,是由当时存入该文件的客户端指定的)
副本:如果说3个副本,就是指这个文件有3份,而不是4份。
linux搭建集群和免密登陆网上很多,可自行查找
hadoop文件夹说明
bin hadoop管理sbin 集群管理
etc 配置文件
share 说明文档,datanote上删除doc
hdfs配置文件(必须配置的四点)
1) 指定hadoop的默认文件系统为:hdfs2) 指定hdfs的namenode节点为哪台机器
3) 指定namenode软件存储元数据的本地目录
4) 指定datanode软件存放文件块的本地目录
hadoop-env.sh(运行环境)
export JAVA_HOME=/usr/local/jdk
core-site.xml(1)(2)
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://hdp-01:9000</value>
</property>
</configuration>
hdfs-site.xml(3)(4)
<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>/root/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/root/dfs/data</value
</property>
</configuration>
slaves 用于配置自动化启动集群(需要免密登陆,包括本机)
格式
节点名(ip)
节点名
注意datanode节点的路径要和namenode一样,默认是去相同的路径寻找hadoop-daemon.sh启动,不然要改脚本才能正常启动
配置好后就可以把目录发送给datanode的机器
配置好后先给datanode节点发送hadoop目录,这是发送了四台机器的密令
for iin {2..5}; do scp -r /root/apps/hadoop-2.8.0 hdp-0$i:/root/apps/; done
hdfs初始化
在namenode上执行hadoop的命令来初始化namenode的元数据存储目录,不能自己创建,这步是生成集群的关键,其它datanode节点根据clusterId记录下它,不要重复初始化,会失去 datanode节点,需要删除原datanode储存目录,会丢失数据hadoop namenode -format(格式化)
启动
hadoop-daemon.sh start namenodehadoop-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虽然数据还在但失去了关联关系,数据组装不起来。