集群搭建
本地模式
本地模式,也称为是单机版本。主要是为了测试使用的,基本不需要进行配置。
以下的安装、配置,都在1节点上完成!
1. 上传Hadoop的二进制文件安装包到/root/data/software中
2. 将二进制文件解压安装到/usr/local下
tar -zxvf hadoop-2.7.6.tar.gz -C /usr/local/
重命名这个文件夹,去掉版本号,为了方便后面的使用
mv /usr/local/hadoop-2.7.6 /usr/local/hadoop
3. 配置环境变量,将Hadoop下的bin和sbin都添加到环境变量中,使得可以在任意的位置使用这里的脚本命令
# 配置JDK的环境变量
export JAVA_HOME=/usr/local/jdk
# 配置Hadoop的环境变量
export HADOOP_HOME=/usr/local/hadoop
# 配置PATH
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
-- 配置完成后,需要 source /etc/profile 使得环境生效
4. Hadoop是用Java编写的,运行的时候,需要依赖JDK,Hadoop2.x对JDK是有版本要求的,要求1.7+。
在Hadoop的/etc/hadoop/hadoop-env.sh中,大概25行的位置,读取当前系统环境变量中的JAVA_HOME的路径,作为JDK的路径。
为了防止读取不到系统环境变量JAVA_HOME,会将其手动的修改为JDK的绝对路径。
Hadoop目录下各个文件夹的作用:
bin: Hadoop的脚本管理目录和使用目录,这个目录是sbin目录下脚本实现的基础。
sbin: Hadoop集群启动和停止时需要执行的命令。
etc: Hadoop的配置文件所在的目录。
这里四大核心配置文件: core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml
include: 对外提供的库文件(存储了一些C++的动态链接库,当使用C++程序访问HDFS的时候使用)。
lib: Hadoop环境需要的静态库和动态库。
libexec: 各个服务对应的shell的配置文件所在的目录。
share: Hadoop各个模块编译之后生成的jar包所在的路径。
Hadoop官方示例:
1. wordcount
词频统计,统计一个目录下指定文件或者所有文件中单词出现的频率
通过如下命令,可以执行这个程序,要注意最后的一个/root/output这个目录为输出目录,需要事先不存在
hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.6.jar wordcount /root/input /root/output
2. sudoku
数独案例,可以解数独
通过如下命令,可以执行这个程序,输入路径中需要提供待解的数独,用?做占位符
hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.6.jar sudoku /root/input/suduku.txt
3. pi
圆周率的计算,后两个参数数值越大,计算的越精准,消耗的时间和资源会更多
hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.6.jar pi 1000 1000000
伪分布式集群
其实伪分布式集群和完全分布式集群的思路是完全一样的,区别就在于伪分布式集群中,机器只有一台。搭建伪分布式集群的时候,完全是按照完全分布式来搭建的。
PS: 开发中的测试阶段,一般都是使用伪分布式来测试的(因为伪分布式也可以执行完全分布式的所有的任务)。设计部署到服务器一般是在高可用的完全分布式集群中(HA)。
一个集群中的几个角色
NameNode: 相当于一个人的大脑,是集群中对外提供服务的节点。
DataNode: 相当于一个人的身体,是集群中用来存储数据的节点。
SecondaryNameNode:
配置伪分布式集群
准备工作:
1. Java环境已经准备好。
2. 防火墙已经关闭。
3. hosts文件中需要做好映射关系。
1. 配置文件 core-site.xml
<configuration>
<property>
<!-- 指定谁是NameNode -->
<name>fs.defaultFS</name>
<value>hdfs://qianfeng01:8020</value>
</property>
</configuration>
2. 配置文件 hdfs-site.xml
<configuration>
<!-- 配置HDFS集群中文件副本的数量 -->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
3. 配置slaves[这里要写出所有的DataNode节点是谁]
PS: 在完全分布式集群中,如果这里写主机名,一定要保证hosts文件中的映射关系已经做好,否则就写IP地址
4. 修改集群文件保存的路径,配置 core-site.xml
<property>
<!-- 指定集群上的文件保存的路径 -->
<name>hadoop.tmp.dir</name>
<!-- 这个文件夹如果不存在,会自动的创建 -->
<value>/usr/local/hadoop/data</value>
</property>
5. 配置SecondaryNameNode的节点位置,配置 hdfs-site.xml
<!-- 配置SecondaryNameNode节点 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>qianfeng01:50090</value>
</property>
6. 格式化namenode
hadoop namenode -format
7. 开启服务
start-dfs.sh # 开启HDFS集群
stop-dfs.sh # 关闭HDFS集群
hadoop-daemon [namenode|datanode|secondarynamenode] [start|stop] #开启指定的服务
注意事项:
1. 如果配置文件有修改,那么就需要重新格式化集群
2. 如果要重新格式化集群,就需要将原来的 hadoop.tmp.dir 目录删除掉
完全分布式集群
HDFS
可以运行在大量的廉价的机器上,提供容错机制,可以为用户提供高性能的数据的存取服务。