资源规划
组件 | bigdata-node1 | bigdata-node2 | bigdata-node3 |
---|---|---|---|
OS | centos7.6 | centos7.6 | centos7.6 |
JDK | jvm | jvm | jvm |
HDFS | NameNode/SecondaryNameNode/DataNode/JobHistoryServer/ApplicationHistoryServer | DataNode | DataNode |
YARN | ResourceManager/NodeManager | NodeManager | NodeManager |
安装介质
版本:hadoop-2.7.2.tar.gz
下载:http://archive.apache.org/dist/hadoop/core
环境准备
安装CentOS
参考:《基于Vagrant的CentOS7.6》
安装JDK
SSH免密
参考:《CentOS7.6-SSH免密》
集群配置
# 设置主机名(集群所有节点)
sudo vi /etc/hosts
配置如下:
# 127.0.0.1 localhost
# 注意:务必注释# 127.0.1.1 ${HOST_NAME}
# 本机内网IP建议配置与第一行(多个域名情况下)
192.168.0.101 bigdata-node1
192.168.0.102 bigdata-node2
192.168.0.103 bigdata-node3
安装Hadoop
先在节点bigdata-node1上安装,之后分发到bigdata-node2、bigdata-node3。
cd /share
tar -zxvf hadoop-2.7.2.tar.gz -C ~/modules/
# 清理安装介质
rm -rf ~/modules/hadoop-2.7.2/share/doc
rm -rf ~/modules/hadoop-2.7.2/*/*.cmd
rm -rf ~/modules/hadoop-2.7.2/*/*/*.cmd
(1).HDFS单机部署
创建相关目录
mkdir ~/modules/hadoop-2.7.2/tmp ## hadoop临时目录,core-site.xml的hadoop.tmp.dir属性相关
sudo chmod -R a+w ~/modules/hadoop-2.7.2/tmp
hdfs配置
1.配置hadoop-env.sh。
export HADOOP_HOME=/home/vagrant/modules/hadoop-2.7.2
vi ${HADOOP_HOME}/etc/hadoop/hadoop-env.sh
配置如下:
export JAVA_HOME=/home/vagrant/modules/jdk1.8.0_221
2.配置core-site.xml。
export HADOOP_HOME=/home/vagrant/modules/hadoop-2.7.2
vi ${HADOOP_HOME}/etc/hadoop/core-site.xml
配置如下:
<!--默认文件系统的名称(uri's的authority部分用来指定host, port等。默认是本地文件系统。)-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://bigdata-node1:9000</value>
</property>
<!--WEB UI访问数据使用的用户名 -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>vagrant</value>
</property>
<!-- Hadoop的临时目录,服务端参数,修改需重启。NameNode的Image/Edit目录依赖此配置 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/vagrant/modules/hadoop-2.7.2/tmp</value>
</property>
3.配置hdfs-site.xml。
export HADOOP_HOME=/home/vagrant/modules/hadoop-2.7.2
vi ${HADOOP_HOME}/etc/hadoop/hdfs-site.xml
配置如下:
<!--解决内部网络和外部网络访问的问题 -->
<property>
<name>dfs.http.address</name>
<value>0.0.0.0:50070</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>bigdata-node1:50090</value>
</property>
<!-- HDFS数据副本数,默认3副本:本节点+同机架节点+其他机架节点,一般不大于datanode的节点数,建议默认3副本-->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<!-- HDFS中启用权限检查配置-->
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>
格式化**NameNode**
格式化HDFS用于初始化NameNode管理的镜像和操作日志文件。
# 清理logs和tmp
rm -rf ~/modules/hadoop-2.7.2/logs/*
rm -rf ~/modules/hadoop-2.7.2/tmp/*
cd ~/modules/hadoop-2.7.2/
bin/hdfs namenode -format
出现下列提示表示格式化成功。
INFO common.Storage: Storage directory /*/*/tmp/dfs/name has been successfully formatted.
单机启动**hdfs**
core-site.xml,这里配哪一台(bigdata-node1),哪一台启动namenode。
cd ~/modules/hadoop-2.7.2/
# 启动NameNode
sbin/hadoop-daemon.sh start namenode
# 启动DataNode
sbin/hadoop-daemon.sh start datanode
启动完成后,输入jps查看进程,如果看到以下进程,表示NameNode节点基本ok了。
jps
**** DataNode
**** NameNode
Web UI验证:http://bigdata-node1:50070
单机停止**hdfs**
cd ~/modules/hadoop-2.7.2/
# 停止NameNode
sbin/hadoop-daemon.sh stop namenode
# 停止DataNode
sbin/hadoop-daemon.sh stop datanode
(2).YARN单机部署
yarn__配置
1.配置mapred-env.sh。
export HADOOP_HOME=/home/vagrant/modules/hadoop-2.7.2
vi ${HADOOP_HOME}/etc/hadoop/mapred-env.sh
配置如下:
export JAVA_HOME=/home/vagrant/modules/jdk1.8.0_221
2.配置mapred-site.xml。
export HADOOP_HOME=/home/vagrant/modules/hadoop-2.7.2
cp ${HADOOP_HOME}/etc/hadoop/mapred-site.xml.template ${HADOOP_HOME}/etc/hadoop/mapred-site.xml
vi ${HADOOP_HOME}/etc/hadoop/mapred-site.xml
配置如下:
<!-- 配置MapReduce运行环境 ,yarn/yarn-tez -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- 日志查看IPC及WEB UI配置-->
<property>
<name>mapreduce.jobhistory.address</name>
<value>bigdata-node1:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>bigdata-node1:19888</value>
</property>
3.配置yarn-env.sh。
export HADOOP_HOME=/home/vagrant/modules/hadoop-2.7.2
vi ${HADOOP_HOME}/etc/hadoop/yarn-env.sh
配置如下:
export JAVA_HOME=/home/vagrant/modules/jdk1.8.0_221
4.配置yarn-site.xml。
export HADOOP_HOME=/home/vagrant/modules/hadoop-2.7.2
vi ${HADOOP_HOME}/etc/hadoop/yarn-site.xml
配置如下:
<!-- ResourceManager节点 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>bigdata-node1</value>
</property>
<!--解决内部网络和外部网络访问的问题 -->
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>0.0.0.0:8088</value>
</property>
<!--日志聚合到HDFS提供给WEB UI查看 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>10000</value>
</property>
<!-- NodeManager上运行的附属服务,用于提升Shuffle计算性能。mapreduce_shuffle/spark_shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 如果没配置ApplicationMaster入口无法使用 -->
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>bigdata-node1:8088</value>
</property>
单机启动__YARN
yarn-site.xml,这里配哪一台(bigdata-node1),哪一台启动ResourceManager。
cd ~/modules/hadoop-2.7.2/
## 启动resourcemanager
sbin/yarn-daemon.sh start resourcemanager
## 启动nodemanager
sbin/yarn-daemon.sh start nodemanager
## 启动log服务,默认日志路径:/tmp/hadoop-yarn/staging/history
sbin/mr-jobhistory-daemon.sh start historyserver
输入jps查看进程,如果看到以下进程,表示ResourceManager节点基本ok了。
jps
**** ResourceManager
**** NodeManager
**** JobHistoryServer
Web UI验证:http://bigdata-node1:8088
单机停止__YARN
cd ~/modules/hadoop-2.7.2/
sbin/yarn-daemon.sh stop resourcemanager
sbin/yarn-daemon.sh stop nodemanager
sbin/mr-jobhistory-daemon.sh stop historyserver
(3).HDFS集群部署
第一次启动前,清除各节点tmp目录,并重新格式化NameNode。
## 清理logs和tmp
rm -rf ~/modules/hadoop-2.7.2/logs/*
rm -rf ~/modules/hadoop-2.7.2/tmp/*
cd ~/modules/hadoop-2.7.2/
bin/hdfs namenode -format
配置__slaves
export HADOOP_HOME=/home/vagrant/modules/hadoop-2.7.2
vi ${HADOOP_HOME}/etc/hadoop/slaves
配置如下:
bigdata-node1
bigdata-node2
bigdata-node3
环境变量设置
vi ~/.bashrc # :$到达行尾添加
配置如下:
export HADOOP_HOME=/home/vagrant/modules/hadoop-2.7.2
export PATH=$HADOOP_HOME/sbin:$HADOOP_HOME/bin:$PATH
分发__Hadoop
scp -r ~/modules/hadoop-2.7.2 vagrant@bigdata-node2:~/modules/
scp -r ~/modules/hadoop-2.7.2 vagrant@bigdata-node3:~/modules/
scp ~/.bashrc vagrant@bigdata-node2:~/.bashrc
scp ~/.bashrc vagrant@bigdata-node3:~/.bashrc
注:如果Hadoop临时目录(tmp)不在Hadoop包中,slaves上仍然要先手动创建并赋权。
环境变量生效:source ~/.bashrc
集群启动__hdfs
core-site.xml,这里配哪一台(bigdata-node1),哪一台启动namenode。
cd ~/modules/hadoop-2.7.2/
sbin/start-dfs.sh
启动完成后,输入jps查看进程,如果看到以下进程,表示NameNode节点基本ok了。
jps
**** DataNode
**** NameNode
**** SecondaryNameNode
Web UI验证:http://bigdata-node1:50070
集群停止__hdfs
cd ~/modules/hadoop-2.7.2/
sbin/stop-dfs.sh
(4).YARN集群部署
集群启动__YARN
yarn-site.xml,这里配哪一台(bigdata-node1),哪一台启动ResourceManager。
cd ~/modules/hadoop-2.7.2/
sbin/start-yarn.sh
## 启动log服务,默认日志路径:/tmp/hadoop-yarn/staging/history
sbin/mr-jobhistory-daemon.sh start historyserver
输入jps查看进程,如果看到以下进程,表示ResourceManager节点基本ok了。
jps
**** ResourceManager
**** NodeManager
**** JobHistoryServer
Web UI验证:http://bigdata-node1:8088
集群停止__YARN
cd ~/modules/hadoop-2.7.2
## 停止log服务
sbin/mr-jobhistory-daemon.sh stop historyserver
sbin/stop-yarn.sh
MR__作业验证
cd ~/modules/hadoop-2.7.2
## 创建MR输入目录
bin/hdfs dfs -mkdir -p /tmp/input
## bin/hdfs dfs -rm -r /tmp/output # 删除MR输出目录
## 上传文件到input目录
bin/hdfs dfs -put ~/modules/hadoop-2.7.2/etc/hadoop/core-site.xml /tmp/input
bin/hdfs dfs -ls /tmp/input
bin/hdfs dfs -text /tmp/input/core-site.xml
## hadoop jar按mr1或mr2(yarn)运行job,决定是否配置yarn;yarn jar按yarn方式运行job。
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /tmp/input /tmp/output
bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /tmp/input /tmp/output
## 查看job结果
bin/hdfs dfs -cat /tmp/output/part*
注意:MR输出目录不要提前建立,如果存在则删除或者修改为别的输出路径。
WorldCount案例
插件安装(选做)
在eclipse上安装Hadoop-Eclipse-Plugin插件,则可以查看hdfs目录结构,上传数据文件。
版本:hadoop-eclipse-plugin-2.7.3.jar or hadoop-eclipse-plugin-2.6.4.jar
安装:https://blog.csdn.net/qq_38709565/article/details/82768659WorldCount原理
MapReduce采用分而治之的思想,把对大规模数据集的操作,分发给一个主节点管理下的各个分节点共同完成,然后通过整合各个节点的中间结果,得到最终结果。简单来说,MapReduce就是“任务的分解和结果的汇总”。
WordCount(单词计数)是最简单也是最能体现MapReduce思想的程序之一,可以称为MapReduce版“Hello world.”,其主要完成的功能是:统计一系列文本文件每个单词出现的次数。WordCount具体计算流程如下:(1).分割
将文件拆分成 splits,由于测试用的文件较小,所以每个文件为一个split,并将文件按行分割形成
对。这一步由MapReduce框架自动完成,其中偏移量(即key值)包括了回车所占的字符数(Windows和 Linux环境下会不同)。(本地计算) (2).Map
将分割好的
对交给用户定义的map方法进行处理,生成新的 对。(本地计算) (3).Combine
得到map方法输出的
对后,Mapper会将它们按照key值进行排序,并执行Combine过程,将key 值相同的value值累加,得到Mapper的最终输出结果。(本地计算) (4).Reduce
Reducer先对从Mapper接收的数据进行排序,再交由用户自定义的reduce方法进行处理,得到新的
对,并作为WordCount的输出结果。(网络计算) MR编程实现
参考1:https://blog.csdn.net/u010416101/article/details/89050203
参考2:https://blog.csdn.net/chunfenxiaotaohua/article/details/100073912
代码:BigData_Demo_20200510.zip# windows打包编译,之后将jar包拷贝至vagrant共享目录share即可
mvn clean package -DskipTests -Dfast
运行MR程序:
cd ~/modules/hadoop-2.7.2
## 删除MR输出目录
bin/hdfs dfs -rm -r /tmp/output
bin/yarn jar /share/bigdata_demo.jar
## 查看job结果
bin/hdfs dfs -cat /tmp/output/part*
说明:代码有更新,可支持windows本地开发测试,入口类为:*DriverLocal.java。