0x01、Hadoop简介
Apach Hadoop是大数据开发所使用的一个核心框架,是一个允许使用简单编程模型跨计算机集群分布式处理大数据集的系统。
使用hadoop可以方便的管理分布式集群,将海量数据分布式的存储在集群中,并使用分布式并行程序来处理这些数据。
0x02、Hadoop生态系统架构
hadoop的核心主要包含一下模块:
- HDFS(hadoop distributed file system):可提供高吞入量的分布式文件系统
- YARN(yet another resource negotiator):用于任务调度和集群资源管理的框架
- MapReduce:基于yarn之上,用于大数据集并行处理系统
- Zookeeper:一个高性能的分布式应用程序协调服务
- Flume:一个日志手机系统
- Sqoop:用于在关系型数据库与hadoop平台之间进行数据导入和导出的工具
- Kafka:高吞吐量的消息队列系统
- HBase:分布式数据库,支持大型表的结构化数据存储。底层使用hdfs存储数据,依赖zk进行进群协调服务。
- Elasticsearch:基于lucene的分布式全文搜索引擎
- Hive:基于Hadoop的数据仓库工具
- Storm:分布式实时计算系统
- Spark:Hadoop数据计算引擎。
0x03、Yarn的基本架构和组件
Yarn是主从架构,主要由ResourceManage、Nodemanager、Applicationmaster、Container等组件组成。
- ResourceManage:以后台进程运行,负责集群资源的统一管理和任务调度,包含接受客户端请求、启动和管理各个应用程序的applicationMaster、接受来自applicationMaster的资源申请,并为其分配Container、管理nodeManager
- NodeManager:是每个节点上的资源管理器
- Task:应用程序的具体执行任务
- Container:是yarn中资源分配的基本单位
- ApplicationMaster:是应用程序的管理者
0x04、Hadoop集群搭建
一、集群节点配置无密钥登陆
1、在各个节点中生成密钥文件
$ cd ~/.ssh/ # 若没有该目录,执行ssh localhsot
$ ssh-keygen -t rsa # 生成密钥文件,提示输出加密信息,一直回车即可
2、分别在三个节点中心以下命令,将公钥信息复制并追加到对方节点的授权文件authorized.key中
$ ssh-copy-id centos01
$ ssh-copy-id centos02
$ ssh-copy-id centos03
3、修改授权文件权限
$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/authorized_keys
4、测试无密钥登陆
ssh centos02
二、搭建Hadoop3.x分布式集群
1、环境:
- 三台centos7虚拟机:centos01、centos02、centos03
- java1.8
- hadoop-3.2.1
2、搭建思路:
- 在centos01中安装Hadoop并修改配置,然后将配置好的Hadoop安装文件复制到其他节点,角色分配如下:
节点 | 角色
---| ---
centos01 | NameNode、SecondaryNameCode、DataNode、ResourceManager、NodeManager
centos02 | DataNode、NodeManager
centos03 | DataNode、NodeManager
3、上传Hadoop并解压
从hadoop官网中下载最新的稳定hadoop-x-y-z.tar.gz到centos01,解压到/opt/modules
tar -zxvf hadoop-3.2.1.tar.gz -C /opt/modules
4、配置系统环境变量
配置hadoop环境变量,命令sudo vi /etc/profile,添加以下内容
1、sudo vi /etc/profile 添加以下内容
# hadoop
export HADOOP_HOME=/opt/modules/hadoop-3.2.1
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
2、使配置生效:
$ soruce /etc/profile
3、执行hadoop命令校验是否配置成功
$ hadoop
5、配置Hadoop环境变量
hadoop所有配置文件都存在安装目录下的/etc/hadoop目录中,在该目录下的hadoop-env.sh、mapred-env.sh、yarn-env.sh中添加JAVA_HOME环境变量:
export JAVA_HOME=/home/app/soft/jdk/jdk1.8.0_211
6、配置HDFS
1、修改core-site.xml,添加以下内容
<property>
<name>hadoop.tmp.dir</name>
<value>file:/opt/modules/hadoop-3.2.1/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://192.168.145.11:9000</value>
</property>
参数说明:
- fs.defaultFS:默认文件系统,HDFS的客户端访问HDFS需要此参数
- hadoop.tmp.dir:指定Hadoop数据存储的临时目录,其它目录会基于此路径, 建议设置到一个足够空间的地方,而不是默认的/tmp下
2、修改hdfs-site.xml,添加以下内容
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.name.dir</name>
<value>/opt/modules/hadoop-3.2.1/tmp/dfs/name</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>/opt/modules/hadoop-3.2.1/tmp/dfs/data</value>
</property>
参数说明:
- dfs.replication:数据块副本数 - dfs.name.dir:指定namenode节点的文件存储目录
- dfs.data.dir:指定datanode节点的文件存储目录
3、修改workers,dataNode节点的主机名
centos02
centos03
7、配置YARN
1、修改mapred-site.xml,添加以下内容
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.application.classpath</name>
<value>$HADOOP_HOME/share/hadoop/mapreduce/*:$HADOOP_HOME/share/hadoop/mapreduce/lib/*</value>
</property>
2、修改yarn-site.xml,添加以下内容
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>centos01</value>
</property>
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_HOME</value>
</property>
参数说明:
- yarn.nodemanager.aux-services:NodeManager上运行的附属服务,需配置成mapreduce_shuffle才可以运行Mapreduce程序。yarn提供了该配置用于在nodemanager上扩展自定已服务,MapReduce的Shuffle功能正式一种扩展服务。
8、复制Hadoop安装文件到其他机器上
$ scp -r hadoop-3.2.1/ app@centos02:/opt/modules
$ scp -r hadoop-3.2.1/ app@centos03:/opt/modules
在其他节点机器上配置好java和hadoop环境变量
9、格式化NameNode
启动Hadoop之前需要格式化NameNode,格式化NameNode可以初始化HDFS文件系统的一些目录和文件,在centos01上执行:
# 必须在NameNode节点上进行format操作
$ hadoop namenode -format
10、启动hadoop
# 启动hadoop
$ start-all.sh
# 停止hadoop
$ stop-all.sh
# 查看节点角色
$ jps
11、验证hadoop集群
1、使用jps查看节点角色 2、访问hdfs web 和hadoop web
如果访问不了,请检查防火墙状态
centos01:9870
centos01:8088
3、Mapreduce 测试自带实例 wordcount
hadoop fs -ls / //查看hdfs上的目录
hadoop fs -mkdir /input //创建input目录
hadoop fs -rm -r /output //如果有output目录,删除
hadoop fs -put /home/hadoop/data/testiinput.txt /input //把测试文本上传到input目录上
hadoop jar /opt/modules/hadoop-3.2.1/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar wordcount /input /output
//执行程序,wordcount为程序的主类名, /input 输入目录 /output 输出目录(输出目录不能存在)
hadoop fs -ls /output //完成后查看输出目录
hadoop fs -cat /output/part-r-00000 //查看输出结果
0x04、参考链接
- Apach Hadoop官网
- Hadoop3.2.1版本的环境搭建
- 《Hadoop大数据技术开发实战》
到此Hadoop集群搭建完毕,下一篇将会HDFS的架构和操作,喜欢本文的话请给作者点赞~