Hadoop分布模式
Hadoop本地模式
特点
- 没有HDFS(文件系统)==》处理的数据来源于本地的Linux文件
- 没有Yarn(资源管理系统)
- 只能测试MapReduce程序,作为一个普通的Java程序
- 一般用于开发和测试
部署方式
1.修改hadoop-env.sh文件,这个文件是hadoop配置环境变量的脚本,包含了设置 Hadoop 运行所需环境变量的命令,比如 Java 的安装路径(JAVA_HOME)、Hadoop 的安装路径(HADOOP_HOME)等。
2.#The java implementation to use.是写当前Java环境变量的,在此处增加当前Java环境
测试Mapreduce程序
单词计数
1. 准备测试数据
路径:/root/temp/data.txt
2.测试用例
路径:/root/training/hadoop-2.7.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar
语句:hadoop jar hadoop-mapreduce-examples-2.7.3.jar wordcount /root/temp/ /root/output/wc
第一个路径为输入,表示此路径下所有的文件(只有以上建立的文件)
第二个为输出,表示内容输出到此路径
00000表示分区,一下为输出结果
Hadoop伪分布模式
特点
- 在单机上,模拟一个分布式环境
- 具备Hadoop所有的功能(HDFS,Yarn)
- 一般只用于测试和开发
部署方式
1. 完成本地模式安装(参上)
2. 配置文件总览 (以下内容均在/root/training/hadoop-2.7.3/etc/hadoop中)
参数文件 | 配置参数 | 参考值 |
---|---|---|
hadoop-env.sh | JAVA_HOME | /root/training/jdk1.8.0_181 |
hdfs-site.xml | dfs.replication | 1 |
dfs.permissions | false | |
core-site.xml | fs.defaultFS | hdfs://:9000 |
hadoop.tmp.dir | /root/training/hadoop-2.7.3/tmp | |
mapred-site.xml | mapreduce.framework.name | yarn |
yarn-site.xml | yarn.resourcemanager.hostname | |
yarn.nodemanager.aux-services | mapreduce_shuffle |
说明:
- hadoop-env.sh 属于本地模式的配置内容
- hdfs-site.xml和core-site.xml 用于配置HDFS
- mapred-site.xml 和yarn-site.xml用于配置Yarn
- 以下的配置代码请仔细检查,中间不要出现空格,否则容易出现格式化报警
3. hdfs-site.xml
dfs.replication
用于配置数据块的冗余度,默认为3
一般而言,数据块的冗余度和数据节点的数量一样,但冗余度最大不超过3
例:当保存某个数据时,系统默认保存3份
修改:当前是伪分布环境,只有1个节点,修改为1
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
dfs.permissions
用于配置HDFS权限检查,即系统对所有的目录或者文件进行权限验证。只有当请求者具有足够的权限时,请求才会被允许执行。true:执行;false:不执行
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
4. core-site.xml
fs.defaultFS
配置NameNode(HDFS的主节点)的地址
NameNode:HDFS主节点,当了解NameNode地址时==》了解HDFS的位置 ==》操作HDFS
9000时RPC通信的端口
<property>
<name>fs.defaultFS</name>
<value>hdfs://bigdata111:9000</value>
</property>
hadoop.tmp.dir
HDFS对应的操作系统目录
默认值为Linux的temp目录
<property>
<name>hadoop.tmp.dir</name>
<value>/root/training/hadoop-2.7.3/tmp</value>
</property>
5. mapred-site.xml
配置mapreduce运行的框架为Yarn
这个文件默认为空,因此需要创建
<property>
<name>mapreduce.framework.name </name>
<value>yarn</value>
</property>
6. yarn-site.xml
yarn.resourcemanager.hostname是整个ResourceManager的地址,即Yarn的主节点
<property>
<name> yarn.resourcemanager.hostname</name>
<value> bigdata111</value>
</property>
Mapreduce运行的方式
<property>
<name> yarn.nodemanager.aux-services</name>
<value> mapreduce_shuffle </value>
</property>
7. 对NameNode进行格式化
hdfs namenode -format
出现如下所示,表示成功被格式化(此处的tmp文件夹需要自行创建)
8. 启动
start-alll.sh
之后输入4次密码,4次yes,由于我这是第二次启动,没有yes提示输入。
9. 检查
jps查看进程
应该出现如下所示的6个进程
错误提示:此处nodemanager没有正常启动,因此关闭yarn,重新启动即可,若没有,则检查其他可能。
重新启动
测试:执行mapreduce任务
- 创建文件
在hdfs中创建文件夹 input,用于任务输入
类似于网盘中的文件夹
hdfs dfs -mkdir /input
将data.txt文件上传到input中
hdfs dfs -put temp/data.txt /input
- 命令
进行单词统计
hadoop jar hadoop-mapreduce-examples-2.7.3.jar wordcount /input /output/wc
监控hadoop状态
http://192.168.80.111:8088/cluster
Hadoop分布模式
特点:
- 分布式环境,用于生产
- 具备Hadoop完整的功能,如HDFS,Yarn等
- 至少需要3个节点()
部署方式
- 准备3台相同配置的虚拟机,此处命名为bigdata112 bigdata113 bigdata114
- 关闭防火墙,并使其永久失效(同时设置这三台机器)
systemctl stop firewalld.service
systemctl disable firewalld.service
- 配置IP映射
vi /etc/hosts
设置三台主机的IP地址,(此处我共设置了4台,不用管)
4. 配置公钥密钥
正常的hadoop运行需要输入4次密码,若集群节点越多,输入密码较为繁琐,因此配置免密登录
输入如下代码,生成每个机器的公钥和私钥
ssh-keygen -t rsa
ssh文件夹:
- 拷贝公钥私钥给每个机器
ssh-copy-id -i .ssh/id_rsa.pub root@bigdata112
ssh-copy-id -i .ssh/id_rsa.pub root@bigdata113
ssh-copy-id -i .ssh/id_rsa.pub root@bigdata114
每台机器均执行一次,使用以下进行验证
ssh bigdata112
ssh bigdata113
ssh bigdata114
-
检查JDK环境
三个机器jdk环境保持统一,具体请自行安装
-
统一时间
使用date进行时间设置
2024年08月08日19点34分45秒(第一个08是月,第二个08是日)
date 080819342024.45
8. 结构设置
如图,一般而言,不建议将NameNode和SecondaryNameNode部署在一起(虽然能节省资源,但出现bug,可能导致整个HDFS集群不可用)
9. 修改参数配置
slaves文件编辑
vi slaves
删除localhost,增加新的节点
- 执行namenode初始化
hdfs namenode -format
- 将主节点上的hadoop目录复制给从节点
scp -r hadoop-2.7.3/ root@bigdata113:/root/training
scp -r hadoop-2.7.3/ root@bigdata114:/root/training
- 启动
主节点上启动hadoop
效果
测试
和之前一样测试wordcount命令,效果如下