1.分布式系统三大组件:
1.1 海量数据的存储
分布式文件系统(HDFS)
a.具有分布式的集群结构 我们把这样实际存储数据的节点叫做datanode;
b.具有一个统一对外提供查询、存储、搜索的机器节点:
对外跟客户端统一打交道;
对内跟实际存储数据的节点打交道。
c.具有备份的机制,解决了机器挂掉时候数据丢失的问题;
d.具有统一的API对客户端来说不用操心集群内部的事情,只要调用API。就可以进行文件的读取、存储、搜索
甚至我们可以提供一个分布式文件系统的引用:
FileSystem fs = new FileSystem()
fs.add();fs.copy();fs.rm()...
1.2 解决分布式数据计算(处理)问题
分布式的编程模型(Mapreduce)
思想:分而治之:先局部,再总体
Map(映射) reduce(聚合) 整体上作为一个编程模型:需要给用户提供一个友好,便捷的使用规范。
比如:你要继承什么、配置什么、如何调用、如何执行...
a.继承我们的一个mapper,实现自己的业务逻辑;
b.继承我们的一个reduce,实现自己的业务逻辑;
c.最好可以提供可供用户进行相关配置的类,或者配置文件
作为一个分布式计算框架,最好我们还提供一个程序的总管(MrAppmater)用来 管理这种分布式计算框架的内部问题:
包括启动、衔接等。
1.3解决了分布式系统的资源管理问题
分布式资源管理(yarn)
为了更好的管理我们集群的资源,最好设计成分布式的架构
a.需要一个统一对外提供服务的节点(某一机器或者机器上的一个进程,一个服务)叫做资源管理者(ResourceManager)
b.需要在集群中的每台机器上有一个角色,用来进行每台机器资源的管理、汇报,叫做节点管理者(nodeManager)
2.集群搭建(三个节点:shizhan01,shizhan02,shizhan03)
2.1准备工作:
a.修改主机名:(三台)
vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=shizhan01
b.修改主机名和IP的映射关系:(三台)
vim /etc/hosts
192.168.48.129 shizhan01
192.168.48.130 shizhan02
192.168.48.131 shizhan03
c.关闭防火墙
#查看防火墙状态
service iptables status
#关闭防火墙
service iptables stop
#查看防火墙开机启动状态
chkconfig iptables --list
#关闭防火墙开机启动
chkconfig iptables off
d.安装JDK
上传alt+p 后出现sftp窗口,然后put d:\xxx\yy\ll\jdk-7u_65-i585.tar.gz
解压jdk
#创建文件夹
mkdir /home/hadoop/app
#解压
tar -zxvf jdk-7u55-linux-i586.tar.gz -C /home/hadoop/app
将java添加到环境变量中
vim /etc/profile
#在文件最后添加
export JAVA_HOME=/home/hadoop/app/jdk-7u_65-i585
export PATH=$PATH:$JAVA_HOME/bin
#刷新配置
source /etc/profile
2.2安装Hadoop集群:配置时候最好用要安装的Linux版本编译一下hadoop-2.5.2-src
先上传hadoop的安装包到服务器上去/home/hadoop/
注意:hadoop2.x的配置文件$HADOOP_HOME/etc/hadoop
需要修改5个配置文件
2.2.1配置hadoop
第一个:hadoop-env.sh 位置:/root/apps/hadoop/etc/hadoop
vim hadoop-env.sh
#第27行
export JAVA_HOME=/usr/java/jdk1.7.0_65
第二个:core-site.xml
<!-- 指定HADOOP所使用的文件系统schema(URI),HDFS的老大(NameNode)的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://weekend-1206-01:9000</value>
</property>
<!-- 指定hadoop运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/hadoop-2.4.1/tmp</value>
</property>
第三个:hdfs-site.xml
<!-- 指定HDFS副本的数量 -->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.secondary.http.address</name>
<value>192.168.1.152:50090</value>
</property>
第四个:mapred-site.xml (mv mapred-site.xml.template mapred-site.xml)
mv mapred-site.xml.template mapred-site.xml
vim mapred-site.xml
<!-- 指定mr运行在yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
第五个:yarn-site.xml
<!-- 指定YARN的老大(ResourceManager)的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>weekend-1206-01</value>
</property>
<!-- reducer获取数据的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
2.2.2将hadoop添加到环境变量
vim /etc/proflie
export JAVA_HOME=/usr/java/jdk1.7.0_65
export HADOOP_HOME=/itcast/hadoop-2.4.1
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
source /etc/profile
2.2.3格式化namenode(是对namenode进行初始化)
hdfs namenode -format (hadoop namenode -format)
2.2.4启动方式:
第一种:
hadoop-daemon.sh start namenode #启动namenode
hadoop-daemon.sh start datanode #启动datanode
登陆页面查看文件系统:http://192.168.48.129:50070
第二种:之前要在三台节点上配置ssh
启动前先配置slaves:位置:/root/apps/hadoop/etc/hadoop
[root@shizhan01 hadoop]# nano slaves
shizhan01
shizhan02
shizhan03
启动:
[root@shizhan01 sbin]# start-dfs.sh
报错:
解决:
在/etc/profile文件中添加:
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS=-Djava.library.path=$HADOOP_HOME/lib
再启动: start-dfs.sh start-yarn.sh 和关闭: stop-dfs.sh stop-yarn.sh
启动效果:
主节点:
从节点:
3.细节说明:
3.1hadoop的文件目录说明:
bin:自己的一些操作命令;
sbin:系统启动的一些管理命令;
etc:配置文件;
include:c语言的一些本地库;
lib:本地库;
share:jar包