一、什么是Hadoop
Hadoop适合海量数据分布式存储和分布式计算
1.1、Hadoop发行版本介绍
目前Hadoop已经演变成为大数据的代名词,形成了一套完善的大数据生态系统,所以针对Hadoop就出现了很多发行版
- Apache Hadoop:官方版本,开源
- Cloudera Hadoop(CDH),商业版本,对官方版本做了一些优化,提供收费技术支持,提供界面操作,方便集群运维管理
- HortonWorks(HDP)开源,提供界面操作,方便运维管理。(ps:目前HDP已经被CDH收购,都是属于一个公司的产品)
1.2、Hadoop版本演变历史
-
Hadoop 1.x
- MapReduce(分布式计算)
- HDFS(分布式存储)
-
Hadoop 2.x
- HDFS
- YARN(集群资源的管理和调度)
- MapReduce
- Others
-
Hadoop 3.x
- HDFS
- YARN
- MapReduce
- Others
Hadoop 3.x的细节优化。支持Java8以上;HDFS支持纠删码;支持多NameNode;MR任务本地优化;多重服务默认端口变更
纠删码:是一种比副本存储更节省存储空间的一个数据持久化方案。相同容错的情况下,可以比之前的副本机制节省一半左右的内存空间
二、Hadoop集群安装部署
-
Hadoop官网archive.apache.org/dist/hadoop…下载3.3.4版
-
需要实现ssh免密码登录。ssh是 Secure Shell 是安全的。通过ssh可以远程登录到其他机器上。启动的时候,我们只要启动一台机器,hadoop可以通过ssh远程登录到其他机器上,然后启动其机器。(不论伪分布、还是集群,都需要ssh)
-
生成ssh
ssh-keygen -t rsa
一路回车。最终在用户的~/.ssh目录下。/root/.ssh
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
-
然后登录 ssh bigdata01(机器名称)
2.1、伪分布式集群安装
使用一台Linux机器
-
解压hadoop
tar -zxvf hadoop-3.3.4.tar.gz
-
配置环境变量
export JAVA_HOME=/root/software/jdk1.8.0_341 export HADOOP_HOME=/root/software/hadoop-3.3.4 export PATH=.:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH -
修改hadoop配置文件在etc目录下
-
vi hadoop-env.sh
export JAVA_HOME=/root/software/jdk1.8.0_341 export HADOOP_LOG_DIR=/data/hadoop_repo/logs/hadoop -
vi core-site.xml
注意 fs.defaultFS 属性中的主机名需要和你配置的主机名保持一致
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://bigdata01:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/data/hadoop_repo</value> </property> </configuration> -
vi hdfs-site.xml
把hdfs中文件副本的数量设置为1,因为现在伪分布集群只有一个节点
<configuration> <property> <name>dfs.replication</name> <value>1</value> </property> </configuration> -
vi mapred-site.xml
设置mapreduce使用的资源调度框架
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration> -
vi yarn-site.xml
设置yarn上支持运行的服务和环境变量白名单
<configuration> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.nodemanager.env-whitelist</name> <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASS</value> </property> </configuration> -
修改workers,设置集群中从节点的主机名信息,在这里就一台集群,所以就填写bigdata01即可
-
-
格式化HDFS
配置文件到这就修改好了,但是还不能直接启动,因为Hadoop中的HDFS是一个分布式的文件系统,文
件系统在使用之前是需要先格式化的,就类似我们买一块新的磁盘,在安装系统之前需要先格式化才可以
使用。
cd /root/software/hadoop-3.3.4
bin/hdfs namenode -format
-
提示:
如果提示错误,一般都是因为配置文件的问题,当然需要根据具体的报错信息去分析问题。
注意:格式化操作只能执行一次,如果格式化的时候失败了,可以修改配置文件后再执行格式化,如果格式化成功了就不能再重复执行了,否则集群就会出现问题。
如果确实需要重复执行,那么需要把/data/hadoop_repo目录中的内容全部删除,再执行格式化。
-
启动伪分布式
sbin/start-all.sh
此时报很多error
-
解决办法
-
vi start-dfs.sh
HDFS_DATANODE_USER=root HDFS_DATANODE_SECURE_USER=hdfs HDFS_NAMENODE_USER=root HDFS_SECONDARYNAMENODE_USER=root -
vi stop-dfs.sh
HDFS_DATANODE_USER=root HDFS_DATANODE_SECURE_USER=hdfs HDFS_NAMENODE_USER=root HDFS_SECONDARYNAMENODE_USER=root -
vi start-yarn.sh
YARN_RESOURCEMANAGER_USER=root HADOOP_SECURE_DN_USER=yarn YARN_NODEMANAGER_USER=root -
vi stop-yarn.sh
YARN_RESOURCEMANAGER_USER=root HADOOP_SECURE_DN_USER=yarn YARN_NODEMANAGER_USER=root
-
-
重新启动
sbin/start-all.sh
-
伪分布集群架构
-
启动后的效果
通过jps命令查看
hadoop 3.x
hdfs的端口号:9870
或者浏览器验证:http://192.168.234.100:9870/dfshealth.html#tab-overview
yarn的端口号:8088
或者浏览器验证:http://192.168.234.100:8088/cluster
停止命令: sbin/stop-all.sh
2.2、分布式集群安装
使用三台Linux机器
这三台机器的ip、hostname、firewalld、ssh免密码登录、JDK这些基础环境已经配置ok。
-
配置/etc/hosts
因为需要在主节点远程连接两个从节点,所以需要让主节点能够识别从节点的主机名,使用主机名远程访问,默认情况下只能使用ip远程访问,想要使用主机名远程访问的话需要在节点的/etc/hosts文件中配置
对应机器的ip和主机名信息。
vi /etc/hosts
192.168.234.101 bigdata02 192.168.234.102 bigdata03 192.168.234.103 bigdata04 -
集群节点之间时间同步
集群只要涉及到多个节点的就需要对这些节点做时间同步,如果节点之间时间不同步相差太多,会应该集群的稳定性,甚至导致集群出问题。
使用ntpdate -u ntp.sjtu.edu.cn实现时间同步,但是执行的时候提示找不到ntpdata命令
yum install -y ntpdate
然后手动执行 ntpdate -u ntp.sjtu.edu.cn 确认是否可以正常执行
建议把这个同步时间的操作添加到linux的crontab定时器中,每分钟执行一次
vi /etc/crontab
查找ntpdate的位置 which ntpdate
* * * * * root /usr/sbin/ntpdate -u ntp.sjtu.edu.cn -
SSH免密码登录完善
注意:针对免密码登录,目前只实现了自己免密码登录自己,最终需要实现主机点可以免密码登录到所有节点,所以还需要完善免密码登录操作
scp
/.ssh/authorized_keys bigdata03:/scp
/.ssh/authorized_keys bigdata04:/然后分别在bigdata03、bigdata04这两个机器上把密钥追加到/authorized_keys
cat ~/authorized_keys >> ~/.ssh/authorized_keys
验证一下效果,在bigdata02节点上使用ssh远程连接两个从节点,如果不需要输入密码就表示是成功的,此时主机点可以免密码登录到所有节点。
ssh bigdata03
-
安装hadoop
-
上传hadoop到对应的服务器上
-
解压hadoop
tar -zxvf hadoop-3.3.4.tar.gz
-
修改hadoop相关配置
cd hadoop-3.3.4/etc/hadoop/
首先修改hadoop-env.sh文件,在文件末尾增加环境变量信息
-
vi hadoop-env.sh
export JAVA_HOME=/root/software/jdk1.8.0_341 export HADOOP_LOG_DIR=/data/hadoop_repo/logs/hadoop -
vi core-site.xml
这边配置的主节点的地址
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://bigdata02:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/data/hadoop_repo</value> </property> </configuration> -
vi hdfs-site.xml
把hdfs中文件副本的数量设置为2,最多为2,因为现在集群中有两个从节点。还有secondaryNamenode进程所在的节点信息
<configuration> <property> <name>dfs.replication</name> <value>2</value> </property> <property> <name>dfs.namenode.secondary.http-address</name> <value>bigdata02:50090</value> </property> </configuration> -
vi mapred-site.xml
设置mapreduce使用的资源调度框架
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration> -
vi yarn-site.xml
设置yarn上支持运行的服务和环境变量白名单
<configuration> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.nodemanager.env-whitelist</name> <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR, <property> <name>yarn.resourcemanager.hostname</name> <value>bigdata02</value> </property></value> </property> </configuration> -
vi workers(重点)
设置works,设置从节点信息
bigdata03 bigdata04
-
-
修改启动脚本
cd hadoop-3.3.4/sbin
-
vi start-dfs.sh
HDFS_DATANODE_USER=root HDFS_DATANODE_SECURE_USER=hdfs HDFS_NAMENODE_USER=root HDFS_SECONDARYNAMENODE_USER=root -
vi stop-dfs.sh
HDFS_DATANODE_USER=root HDFS_DATANODE_SECURE_USER=hdfs HDFS_NAMENODE_USER=root HDFS_SECONDARYNAMENODE_USER=root -
vi start-yarn.sh
YARN_RESOURCEMANAGER_USER=root HADOOP_SECURE_DN_USER=yarn YARN_NODEMANAGER_USER=root -
vi stop-dfs.sh
HDFS_DATANODE_USER=root HDFS_DATANODE_SECURE_USER=hdfs HDFS_NAMENODE_USER=root HDFS_SECONDARYNAMENODE_USER=root
-
-
把bigdata02节点上将修改好配置的安装包拷贝到其他两个从节点
cd /root/software
scp -rq hadoop-3.3.4 bigdata03:/root/software
scp -rq hadoop-3.3.4 bigdata04:/root/software
-
在bigdata02节点上格式化HDFS
cd /root/software/hadoop-3.3.4
bin/hdfs namenode -format
-
启动验证下
http://192.168.234.101:9870/dfshealth.html#tab-datanode
-