大数据简介
6V特点
- Volume:数据体量打。在中小型企业中,数据量一般在TB级别;大型企业中,数据量在PB级别
- Variety:数据的来源、种类和样式多
- 来源:数据库、爬虫、网页埋点、手动录入等
- 种类:文本、图片、音频、视频、流媒体等
- 样式:结构化数据、半结构化数据、非结构化数据
- Velocity:数据的增长速度越来越快。随着网络的发展,数据的产生、传播的增长速度逐渐变快。根据专家们的预测,全球的总数据量以后会以每3-5年翻一番的速度增长
- Value:数据的价值密度越来越低。价值密码指的是需要的数据在总数据量中的占比。数据的价值密度在变低,但是不意味着获取到的数据在变少,只是需要的数据的增长速度比不上样本总量的增长速度
- Veracity:数据的质量/真实性。随着网络的发展,信息流通变得越来越便利,导致网上数据的质量变得良莠不齐
- Valence:数据的连通性。随着大数据的发展,衍生出来越爱越多的产业,需要考虑大数据中不同产业之间的关联
- 其他:动态性(Vitality)、可视化(Visualization)、合法性(Validity - 过度索权,大数据杀熟等)
Hadoop简介
概述
- Hadoop是Yahoo!公司开发的后来贡献给了Apache的一套开源的、可靠的、可扩展的分布式框架
- Hadoop提供了简单的编程模型来对大量的数据进行分布式计算
- Hadoop能够轻松的从一台服务器扩展到上千台服务器,每一台服务器都能进行存储和计算
- Hadoop提供了探测和处理异常的机制来保证高可用
- Hadoop之父:Doug Cutting(道格.卡汀)
- Hadoop的版本非常混乱,导致依赖Hadoop的其他框架和组件之间也非常乱 - Hadoop2.x和Hadoop1.x不兼容,Hadoop3.x和Hadoop2.x部分兼容
模块
- Hadoop Commin:公共模块
- Hadoop Distributed File System(HDFS):分布式文件存储系统
- Hadoop YARN:任务调度和集群资源管理
- Hadoop MapReduce:基于YARN的分布式计算系统
搭建
-
安装JDK1.8
vim /etc/profile.d/javahome.sh export JAVA_HOME=/home/java1.8 export PATH=$JAVA_HOME/bin:$PATH source /etc/profile.d/javahome.sh
-
关闭防火墙
# 临时关闭 systemctl stop firewalld # 永久关闭 systemctl disable firewalld
-
在Hadoop集群中,不建议主机名中出现 - 或者 _,所以需要修改主机名
vim /etc/hostname # 修改对应的主机名,例如分别为 Hadoop01 Hadoop02 Hadoop03
-
将主机名和IP进行映射
vim /etc/hosts #添加 IP 主机名,例如 192.168.65.107 hadoop01 192.168.65.108 hadoop02 192.168.65.109 hadoop03
-
关闭SELINUX
vim /etc/sysconfig/selinux #修改SELINUX的值为disabled SELINUX=disabled
-
重启
reboot
-
免密登录
# 产生密钥 ssh-keygen # 拷贝公钥 ssh-copy-id root@hadoop01 # 回车之后,输入yes确定连接,然后回车输入密码 ssh hadoop01 # 回车之后如果不需要密码,说明已经免密登录成功,输入logout退出登录 ssh-copy-id root@hadoop02 ssh hadoop02 ssh-copy-id root@hadoop03 ssh hadoop03
-
进入安装目录,下载Hadoop安装包
cd /home/software # 下载 curl -O https://archive.apache.org/dist/hadoop/common/hadoop-3.1.3/hadoop-3.1.3.tar.gz # 解压 tar -xvf hadoop-3.1.3.tar.gz
-
进去Hadoop的配置目录
cd hadoop-3.1.3/etc/hadoop/
-
编辑文件
vim hadoop-env.sh # 在文件中添加 export JAVA_HOME=/home/software/jdk1.8 export HADOOP_CONF_DIR=/home/software/hadoop-3.1.3/etc/hadoop # 保存退出,重新生效 source hadoop-env.sh
-
编辑文件
vim core-site.xml
<--HDFS的服务地址--> <property> <name>fs.default.name</name> <value>hdfs://hadoop01:9000</value> </property> <--数据存储路径--> <property> <name>hadoop.tmp.dir</name> <value>/home/software/hadoop-3.1.3/tmp</value> </property> <--代理用户--> <property> <name>hadoop.http.staticuser.user</name> <value>root</value> </property> <--代理主机--> <property> <name>hadoop.proxyuser.root.hosts</name> <value>*</value> </property> <--代理用户组--> <property> <name>hadoop.proxyuser.root.groups</name> <value>*</value> </property>
-
编辑文件
vim hdfs-site.xml
在文件中添加:
<!--NameNode的访问地址--> <property> <name>dfs.namenode.http-address</name> <value>hadoop01:9870</value> </property> <!--SecondaryNameNode访问地址--> <property> <name>dfs.namenode.secondary.http-address</name> <value>hadoop02:9868</value> </property> <!--副本数量--> <property> <name>dfs.replication</name> <value>1</value> </property>
-
编辑文件
vim mapred-site.xml
在文件中添加
<!--MapReduce的调度框架--> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <!--yarn的运行环境--> <property> <name>yarn.app.mapreduce.am.env</name> <value>HADOOP_MAPRED_HOME=/home/software/hadoop-3.1.3</value> </property> <!--MapTask运行环境--> <property> <name>mapreduce.map.env</name> <value>HADOOP_MAPRED_HOME=/home/software/hadoop-3.1.3</value> </property> <!--ReduceTask运行环境--> <property> <name>mapreduce.reduce.env</name> <value>HADOOP_MAPRED_HOME=/home/software/hadoop-3.1.3</value> </property>
-
编辑文件
vim yarn-site.xml
在配置文件中添加:
<!--Shuffle--> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!--ResourceManager地址--> <property> <name>yarn.resourcemanager.hostname</name> <value>hadoop03</value> </property> <!--NodeManager环境变量白名单--> <property> <name>yarn.nodemanager.env-whitelist</name> <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_MAPRED_HOME,HADOOP_CONF_DIR,HADOOP_YARN_HOME,CLASSPATH_PREPEND_DISTCACHE</value> </property> <!--yarn容器分配的最小容量--> <property> <name>yarn.scheduler.minimum-allocation-mb</name> <value>512</value> </property> <!--yarn容器分配的最大容量--> <property> <name>yarn.scheduler.maximum-allocation-mb</name> <value>4096</value> </property> <!--物理内存大小--> <property> <name>yarn.nodemanager.resource.memory-mb</name> <value>4096</value> </property> <!--关闭物理内存检查--> <property> <name>yarn.nodemanager.pmem-check-enabled</name> <value>false</value> </property> <!--关闭虚拟内存检查--> <property> <name>yarn.nodemanager.vmem-check-enabled</name> <value>false</value> </property>
-
编辑文件
vim workers # 删除里面的localhost,将三台主机的主机名添加进去 hadoop01 hadoop02 hadoop03
-
进去扩展命令目录
cd /home/software/hadoop-3.1.3/sbin/
-
编辑文件
vim start-dfs.sh # 在文件头部添加 HDFS_NAMENODE_USER=root HDFS_SECONDARYNAMENODE_USER=root HDFS_DATANODE_USER=root HDFS_DATANODE_SECURE_USER=root
-
编辑文件
vim stop-dfs.sh # 在文件头部添加 HDFS_NAMENODE_USER=root HDFS_SECONDARYNAMENODE_USER=root HDFS_DATANODE_USER=root HDFS_DATANODE_SECURE_USER=root
-
编辑文件
vim start-yarn.sh # 在文件头部添加 YARN_RESOURCEMANAGER_USER=root YARN_NODEMANAGER_USER=root HDFS_DATANODE_SECURE_USER=root
-
编辑文件
vim stop-yarn.sh # 在文件头部添加 YARN_RESOURCEMANAGER_USER=root YARN_NODEMANAGER_USER=root HDFS_DATANODE_SECURE_USER=root
历史服务
-
编辑文件
cd /home/software/hadoop-3.1.3/etc/hadoop/ vim mapred-site.xml
-
在文件末尾添加
<!--历史服务器地址--> <property> <name>mapreduce.jobhistory.address</name> <value>hadoop02:10020</value> </property> <!--历史服务器的web访问地址--> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>hadoop02:19888</value> </property>
日志汇聚
-
编辑文件
vim yarn-site.xml
-
在文件中添加
<!--开启日志汇聚--> <property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property> <!--历史服务器地址--> <property> <name>yarn.log.server.url</name> <value>http://hadoop02:19888/jobhistory/logs</value> </property> <!--日志保留时间--> <property> <name>yarn.log-aggregation.retain-seconds</name> <value>604800</value> </property>
分发和启动
-
远程分发
cd /home/software/ scp -r hadoop-3.1.3 root@hadoop02:$PWD scp -r hadoop-3.1.3 root@hadoop03:$PWD
-
配置环境变量
vim /etc/profile.d/hadoophome.sh # 在文件中添加 export HADOOP_HOME=/home/software/hadoop-3.1.3 export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin # 保存退出,重新生效 source /etc/profile.d/hadoophome.sh
-
校验环境变量是否配置正确
hadoop version
-
第一次启动Hadoop之前,需要先进行格式化
hdfs namenode -format
如果出现Storage directory /home/software/hadoop-3.1.3/tmp/dfs/name has been successfully formatted则表示格式化成功
-
在第一个节点上启动HDFS
start-dfs.sh
-
在第三个节点上启动YARN
start-yarn.sh
-
在第二个节点上启动历史服务器
mapred --daemon start historyserver
-
通过
jps
命令查看# 第一个节点上 Jps NodeManager DataNode NameNode # 在第二个节点上 SecondaryNameNode Jps NodeManager DataNode JobHistoryServer # 在第三个节点上 Jps DataNode ResourceManager NodeManager
注意问题
-
如果
Command not found
,那么说明环境变量配置错误,或者配置之后没有进行source -
如果启动之后,发现缺少了进行,那么可以通过对应的命令来试着单独启动
hdfs --daemon start namenode hdfs --daemon start datanode hdfs --daemon start secondarynamenode yarn --daemon start resourcemanager yarn --daemon start nodemanager mapred --daemon start historyserver
-
如果单独启动依然失败,那么查看/home/software/hadoop-3.1.3/logs/hadoop-root-xxx-xxx.log,在这个日志文件中来查看启动失败的原因
搭建方式
- 单机模式:在一台服务器上安装,只能启动MapReduce模块
- 伪分布式:在一台服务器上安装,通过多个进程来模拟集群环境,启动Hadoop的大部分服务
- 完全分布式(非高可用):在集群上安装,能够启动Hadoop的所有模块
- 完全分布式(高可用):在上诉方式的基础上保证集群的运行