大数据介绍
随着计算机技术的发展,互联网的普及,信息的积累 已经到了一个非常庞大的地步,信息的增长也在不断的加快,随着互联网、物联网建设的加快,信息更是爆炸式增长,收集、检索、统计这些信息越发困难, 必须使用新的技术来解决这些问题
1)大数据定义
- 大数据指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产
- 是指从各种各样类型的数据中,快速获得有价值的信息
2)大数据能做什么
- 企业组织利用相关数据分析帮助他们降低成本、提高效率、开发新产品、做出更明智的业务决策等
- 把数据集合并后进行分析得出的信息和数据关系性, 用来察觉商业趋势、判定研究质量、避免疾病扩散、打击犯罪或测定即时交通路况等
- 大规模并行处理数据库,数据挖掘电网,分布式文件系统或数据库,云计算平和可扩展的存储系统等
3)大数据的5V特征
- (V)olume(大体量)
可从数百TB到数十数百PB、甚至EB的规模 - (V)ariety(多样性)
大数据包括各种格式和形态的数据 - (V)elocity(时效性)
很多大数据需要在一定的时间限度下得到及时处理 - (V)eracity(准确性)
处理的结果要保证一定的准确性 - (V)alue(大价值)
大数据包含很多深度的价值,大数据分析挖掘和利用将带来巨大的商业价值
4)大数据与Hadoop
Hadoop是什么
- Hadoop是一款开源软件,使用JAVA开发
- Hadoop可以提供一个分布式基础架构
- Hadoop是一种分析和处理海量数据的软件平台
- Hadoop特点
- 高可靠性、高扩展性、高效性、高容错性、低成本
Hadoop
1)Hadoop组件
- HDFS: Hadoop分布式文件系统(核心组件)
- MapReduce:分布式计算框架(核心组件)
- Yarn:集群资源管理系统(核心组件)
- Zookeeper:分布式协作服务
- Hbase:分布式列存数据库
- Hive:基于 Hadoop的数据仓库
- Sqoop:数据同步工具
- Pig:基于 Hadoop的数据流系统
- Mahout:数据挖掘算法库
- Flume:日志收集工具
2)HAdoop生态系统
3)HDFS结构
角色及概念:
Hadoop体系中数据存储管理的基础,是一个高度容错的系统,用于在低成本的通用硬件上运行
角色: Client / Namenode / Secondarynode / Datanode
- Namenode
- Master节点,管理HDFS的名称空间和数据块映射信 息,配置副本策略,处理所有客户端请求
- Secondary NameNode
- 定期合并 fsimage和 fsedits,推送给 NameNode
- 紧急情况下,可辅助恢复 NameNode 。但 Secondary NameNode并非 NameNode的热备
- DataNode
- 数据存储节点,存储实际的数据
- 汇报存储信息给 Namenode
- Client
- 按Block设置的大小切分文件
- 访问HDFS
- 与 Namenode交互,获取文件位置信息
- 与 DataNode交互,读取和写入数据
- Block
- 每块缺省128MB大小
- 每块可以多个副本
4)MapReduce结构
角色和概念:
源自于Google的MapReduce论文,JAVA实现的分布式计算框架
角色:JobTracker / Task Tracker / Map Task / Reducer Task
- JobTracker
- Master节点只有一个
- 管理所有作业/任务的监控、错误处理等
- 将任务分解成一系列任务,并分派给Task Tracker
- TaskTracker
- Slave节点,一般是多台
- 运行Map Task和Reduce Task
- 并与JobTracker交互,汇报任务状态
- Map Task
- 解析每条数据记录,传递给用户编写的 map()并执行,将输出结果写入本地磁盘( 如果为map-only作业,直接写入HDFS)
- Reducer Task
- 从 Map Task的执行结果中,远程读 取输入数据,对数据进行排序,将数据按照分组传递 给用户编写的 reduce函数执行
5)Yarn结构
角色和概念:
Yarn是 Hadoop的一个通用的资源管理系统
角色: Resourcemanager / Nodemanager / ApplicationMaster / Container / Client
- ResourceManager
- 处理客户端请求
- 启动/监控Application Master
- 监控NodeManager
- 资源分配与调度
- Nodemanager
- 单个节点上的资源管理
- 处理来自 ResourceManager的命令
- 处理来自 Application Master的命令
- Container
- 对任务运行行环境的抽象,封装了CPU、内存等
- 多维资源以及环境变量、启动命令等任务运行相关的信息资源分配与调度
- ApplicationMaster
- 数据切分
- 为应用程序申请资源,并分配给内部任务
- 任务监控与容错
- Client
- 用户与Yarn交互的客户端程序
- 提交应用程序、监控应用程序状态,杀死应用程序等
Yarn的核心思想:
将JobTracker和TaskTacker进行分离,它由下面几大构成组件
ResourceManager一个全局的资源管理器
NodeManager每个节点(RM)代理
ApplicationMaster表示每个应用
每一个ApplicationMaster有多个Container在NodeManager上运行
Hadoop安装
Hadoop的部署模式由三种:
- 单机
- 伪分布式
- 完全分布式
1)单机部署
主机配置要求2vCPU,2G内存
vim /etc/hosts #配置主机名解析
yum -y install java-1.8.0-openjdk java-1.8.0-openjdk-devel
tar -xf hadoop-2.7.7.tar.gz
mv hadoop-2.7.7 /usr/local/hadoop
[root@hadoop ~] rpm -ql java-1.8.0-openjdk #查看openjdk安装路径
[root@hadoop ~] cd /usr/local/hadoop/
[root@hadoop hadoop] vim etc/hadoop/hadoop-env.sh
25 export JAVA_HOME="/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.232.b09-0.el7_7.x86_64/jre" #openjdk安装路径
33 export HADOOP_CONF_DIR="/usr/local/hadoop/etc/hadoop" #hadoop配置文件路径
[root@hadoop hadoop] ./bin/hadoop version #查看版本信息
[root@hadoop hadoop] mkdir aa
[root@hadoop hadoop] cp *.txt aa/
[root@hadoop hadoop] ./bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount aa bb
# 使用统计词频功能统计aa目录下的文件中每个单词出现次数,将统计结果保存到bb目录下
[root@hadoop hadoop] cat bb/*
伪分布式:
- 伪分布式的安装和完全分布式类似,区别是所有角色安装在一台机器上,使用本地磁盘,一般生产环境都会使用完全分布式,伪分布式一般是用来学习和测试Hadoop的功能
- 伪分布式的配置和完全分布式配置类似
2)HDFS分布式
系统规划(配置要求:2vCPU/2G内存)
主机名 | 作用 | ip |
---|---|---|
nn1 | NameNode/Secondary NameNode | 192.168.1.60 |
node1 | DataNode1 | 192.168.1.61 |
node2 | DataNode2 | 192.168.1.62 |
node3 | DataNode3 | 192.168.1.63 |
- 禁用selinux
- 卸载firewalld
- 所有主机同步配置主机名解析
- 安装openjdk和openjdk-devel
- NameNode对所有主机做ssh密钥对登录,关闭check选项(防止询问yes/no)
- 练习用的playbook
1.部署HDFS
- 修改配置文件,保证所有主机配置相同
作用 | 文件名 |
---|---|
环境配置文件 | hadoop-env.sh |
核心配置文件 | core-site.xml |
HDFS配置文件 | hdfs-site.xml |
节点配置文件 | slaves |
编辑配置文件时可使用模板:
<property>
<name></name>
<value></value>
<description></description>
</property>
使用ansible同步配置文件:
] vim hadoop-env.sh
25 export JAVA_HOME="/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.232.b09-0.el7_7.x86_64/jre" #openjdk安装路径
33 export HADOOP_CONF_DIR="/usr/local/hadoop/etc/hadoop" #hadoop配置文件路径
] vim core-site.xml #可查看官方文档
<configuration>
<property>
<name>fs.defaultFS</name> #指定使用的文件系统
<value>hdfs://nn1:9000</value>
<description>use file system</description>
</property>
<property>
<name>hadoop.tmp.dir</name> #所有数据的根目录
<value>/var/hadoop</value>
<description>documentroot</description>
</property>
] vim hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.http-address</name> #NameNode的ip和端口
<value>nn1:50070</value>
<description>namenode_http</description>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name> #secNameNode的ip和端口
<value>nn1:50090</value>
<description>secondary_http</description>
</property>
<property>
<name>dfs.replication</name> #备份数量
<value>2</value>
<description>backup quantity</description>
</property>
</configuration>
] vim slaves #DataNode节点主机名,注意和/etc/hosts中对应
node1
node2
node3
] ansible-playbook hadoop.yml -t sync_conf
- 初始化集群并启动服务
[root@nn1 ~] mkdir /var/hadoop #创建目录
[root@nn1 ~] cd /usr/local/hadoop/
[root@nn1 hadoop] ./bin/hdfs namenode -format #初始化集群
[root@nn1 hadoop] ./sbin/start-dfs.sh #启动服务
[root@nn1 hadoop] ./sbin/stop-dfs.sh #停止服务
- 验证集群
] jps #角色验证,所有主机都执行
] /usr/local/hadoop/bin/hdfs dfsadmin -report #节点验证,只在NameNode上执行
2.部署mapreduce和yarn
] cp mapred-site.xml.template mapred-site.xml
] vim mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name> #分布式计算框架使用模式,只有local和yarn两种
<value>yarn</value>
</property>
</configuration>
] vim yarn-site.xml
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name> #resourcemanager地址
<value>nn1</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name> #nodemanager使用的计算框架
<value>mapreduce_shuffle</value>
</property>
</configuration>
] ansible-playbook hadoop.yml -t sync_conf #所有主机同步配置文件
3.启动yarn
[root@nn1 ~] cd /usr/local/hadoop
[root@nn1 hadoop] ls sbin/
start-dfs.sh start-yarn.sh start-all.sh
# 三个命令分别为启动hdfs集群,启动yarn,启动hdfs和yarn,有对应的stop命令
[root@nn1 hadoop] ./sbin/start-yarn.sh
- 验证:
jps #验证角色
./bin/yarn node -list #验证节点
4.通过浏览器访问
http://namenode:50070
http://secondarynamenode:50090
http://resourcemanager:8088
http://datanode:50075
http://nodemanager:8042
HDFS基本使用
- 绝大多数命令与shell相同
[root@nn1 hadoop] ./bin/hadoop fs - #查看帮助
[root@nn1 hadoop] ./bin/hadoop fs -mkdir /abc #创建文件夹
[root@nn1 hadoop] ./bin/hadoop fs -put *.txt /abc #将当前目录下的.txt文件上传到hadoop集群的/abc文件夹下
[root@nn1 hadoop] ./bin/hadoop fs -ls /abc #查看集群/abc目录
Found 3 items
-rw-r--r-- 2 root supergroup 86424 2020-02-26 10:39 /abc/LICENSE.txt
-rw-r--r-- 2 root supergroup 14978 2020-02-26 10:39 /abc/NOTICE.txt
-rw-r--r-- 2 root supergroup 1366 2020-02-26 10:39 /abc/README.txt
[root@nn1 hadoop] ./bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount /abc /cba #提交分析作业,与单机时命令相同
[root@nn1 hadoop] ./bin/hadoop fs -cat /cba/* #查看结果
[root@nn1 hadoop] ./bin/hadoop fs -touchz /file1 #在集群中创建文件file1,与shell命令不同
[root@nn1 hadoop] ./bin/hadoop fs -get /file1 #将集群中的/file1文件下载到本地