hadoop01———hadoop简介以及环境搭建

1.有一个超级大的文件,一台机器存储或计算无法完成的,里面存储都是ip,每行一个,计算大文件中每一个ip出现的次数以及出现次数最多的ip

这个超级大的文件如何存储?
1)分而治之的思想 分布式存储
将超级大的文件切分成多个小文件 每一个小文件存储在一个服务器上
无限的扩展服务器的个数
横向扩展:服务器的节点个数上扩充
优点:无上限 12000
2)纵向扩展:增加服务器的硬件配置
也可以在一台服务器上 加硬盘
有上限的
摩尔定律:
服务器的硬件性能 18-24月 提升一倍
硬件发展周期 18-24个月

怎么样计算:
1)每一个服务器中计算自己存储的小文件的每一个ip的出现次数
分而治之的思想 分布式计算
代码实现:
1)定义一个输入文件流 BufferedReader 进行文件读取
2)定义一个容器 存储读取的内容
map
3)进行读取 放在map中
判断ip是否已经存在
不存在 第一次放入
map.put(ip,1)
存在:
map.put(ip,上一次次数+1)

2)汇总统计所有服务器的计算结果  得到最终结果
4)在汇总统计的结果上  求出现次数最多  map的value的最大值
	作业    实现单个文件中ip的最大次数 

2.两个超级大的文件,每个文件存储的都是url,每行一个,求这两个文件中相同的url

两个文件如果都是小文件:
1)创建两个流 BufferedReader 进行读取两个小文件的
2)定义两个容器 分别存储两个文件的内容
set
3)循环遍历一个set集合 另一个set集合中 判断是否包含
包含 则返回

大文件:
分而治之+ 分区
分区:将一个大的数据集 切分成不同的小区域 每一个区域就叫做一个分区
每一个分区切分的原则 分区算法

最终解决思路:
1)去重   先将每一个大文件进行切分
	每一个文件切分  按照相同的分区算法
	两个文件的每一个文件  分区的数量  相同或者倍数关系
2)对比两个文件对应分区的

3.有一个超级大的文件,里面存储的都是url,每行一个,求:用户给定一个url,快速判断用户给定的url是否在文件中

小文件中:
1)定义一个输入文件流
2)定义一个容器 set
3)进行读取 放在 set集合中
4)判断
set.contains(用户给定的) true false
大文件:
快速查询
数组的查询速度快 索引 下标
访问下标的时候快 6
将url存储在数组的下标中
数组的下标 非负的
url 字符串 url.hash & Integer_Max 取绝对值
数组的真实值 存储的是否存在 boolean true false 1位 0 1
数组类型 bit位数组 bit[] 位图
用于判断的数组的真实元素中存储的就是元素是否存在 0 1

这种方式进行判断的时候 存在严重的  误判
解决误判  方案 多设计几种hash算法

无论设计多少中hash算法   误判问题是不可避免的  只能尽量降低

误判率:
	1)数组大小  m
	2)hash算法的个数  k
	3)数据量  n
	当  k== 0.7 m /n  误判率最低的
	数组大小  》  数据量
	数组大小  是 数据量的  10倍
	数据量  10000    数组  100000
	k= 0.7*10 =7 个  0.001%
	
	这个时候  进行判断一个元素是否存在  
	求7次hash   判断7次  有一次返回0   截止了
	7次都为1   存在
	
	布隆过滤器  hbase的底层原理
	

1111011011011   -

& 0111111111111

0111011011011

大数据介绍:

概念:
数据:数据就是数值,也就是我们通过观察、实验或计算得出的结果
数字 图片 视频 。。。。。
数据的分类:
按照结构分:
结构化数据:
mysql表中的数据
excel 表
严格的二维表数据
每一行都有相同的列 每一行对应的列的类型一致的
stu
1,zs,18
1,zs,18
非结构化数据:
没有任何结构的数据
视频 图片 音频 。。。。
二进制存储的
半结构化数据:
有结构 没有严格的二维表结构
html css xml json
标签 进行划分结构的
产生的时间分:
离线数据:
数据已经存在的 静态的
实时数据:
实时产生的数据 动态的
近实时数据:
大数据:
概念大而复杂的数据集 传统的手段无法处理(存储|计算)

数据单位:
	1 Byte =8 bit
	1 KB = 1,024 Bytes = 8192 bit
	1 MB = 1,024 KB = 1,048,576 Bytes(普通用户数据级别)  文本
	1 GB = 1,024 MB = 1,048,576 KB  
	1 TB = 1,024 GB = 1,048,576 MB
	1 PB = 1,024 TB = 1,048,576 GB(企业级数据级别)
	1 EB = 1,024 PB = 1,048,576 TB
	1 ZB = 1,024 EB = 1,048,576 PB(全球数据总量级别)
	1 YB = 1,024 ZB = 1,048,576 EB
	1 BB = 1,024 YB = 1,048,576 ZB
	1 NB = 1,024 BB = 1,048,576 YB
	1 DB = 1,024 NB = 1,048,576 BB
	
	注意:
		企业数据量   TB    PB 
		5G   VR   购物
特点:
	容量大
		数据量大    现在的数据产生快  数据类型复杂(视频)
	种类多
		结构   半结构   非结构化
	速度快
		随时随地都在产生数据
		互联网没有秘密的
	价值高:
		整体价值高  单条数据价值低
		价值密度低
	真实性
	
大数据的价值:
	用户画像   根据用户的所有的商业行为 给用户打的标签
		用户网络商业活动  消费习惯   搜索关注点   人际关系
		人物的标签图
		精准营销    千人千面

大数据中的几个核心概念:
	1.集群
		一个任务(存储|计算)需要多个服务器(节点  网络不同)共同完成,这个多个服务器组成的一个集体  叫做集群
		集群中的每一个服务器 就叫做一个节点
	2.分布式:
		一个任务需要多个节点共同完成  这个任务的执行方式就是分布式的
		分布式存储
			分布式文件系统
				一个大的文件  被切分成分多个小文件  每一个小文件被存储在一个节点上  最终这个大文件被存储在了多个节点上
			分布式数据库
				一个大表  被切分成多个小表  存储在多个节点上
		分布式计算
			一个计算任务很大  一个节点计算不了  将这个计算任务进行拆分  分别运行在不同的节点上进行计算
	
	3.负载均衡:
		一个集群中  各个节点承担的压力(存储)相当
		一个项目   5个人  干活的
			一个人   90%     4个人  10%  负载不均衡
		一个集群    5个节点
			存储任务    10T 
			每一个节点   2T    一定负载均衡吗?
			负载均衡一定和每一个节点的硬件配置相关
			集群中的每一个节点存储的数据量的占比相当的
			
			情况1:
			5个节点硬件配置一样    每个节点2T   负载均衡的
			
			情况2:
			3台:
			128G    4T 
			2台:
			256G    8T 
			
			1:1:1:2:2
			 前3台   10T /7  
			 后两台   20T /7
			 
			前3台:
				每一个节点  2T     50%
			后2台:
				每一台  2T     25%   不均衡
				每一台  4T    50%   负载均衡

数据的处理流程:
	数据采集----数据存储----数据清洗(ETL)---数据计算---数据存储结果-----web可视化展示
	
	数据采集(数据来源):
		1)业务数据  自己的数据
			要么自己的业务数据库  自己网站产生的日志
		2)爬虫
			分析互联网行业的从业者的平均薪资
			招聘网站  51job boss  拉钩
			
			反爬虫    反反爬虫
		3)数据买卖
			个人征信
			中国人民银行
			放贷
				个人征信
	数据的处理:
		1)缺失字段的数据
			1)不影响最终分析结果   删除
			网站浏览日志数据
			2)对于一些和金钱相关的数据
				通过各种计算   补充上  精准  
			3)要求精密的数据
				工业大数据
				传感器数据
				炼钢   温度   根据经验值补充
		2)敏感数据
			手机号  身份证号
			脱敏处理
			将敏感字段进行加密  MD5  uuid

hadoop的介绍

hadoop的产生背景:
google 搜索引擎的
海量的网页数据如何存储的问题?
海量网页数据如何计算?
海量网页数据快速查询?

	解决了   并没开源  也没有公开解决思路
	
Doug Cutting
	搜索引擎   lucence
		子项目   Nutch 爬虫
	和google同样的问题
	2003年  google 发布了3篇论文
		GFS---- GOOGLE FILE SYSTEM google的文件系统
		MAPREDUCE--- google的分布式计算方案
		BIGTABLE--- google的分布式数据库
	doug cutting 将google的3篇论文  使用java语言实现了  并且开源  贡献给apache
		GFS--- HDFS 
		MAPREDUCE---MAPREDUCE
		BIGTABLE---HBASE 
		
		将hdfs mapreduce 放在一起   hadoop1		
		
	hadoop解决的问题:
		海量数据的存储  海量数据的计算
		hadoop1.0 分为2个模块的
			hdfs
			mapreduce 

hadoop 是什么?
组成模块:
包含模块(代码结构):
hadoop2.0:
hadoop common: 工具类
hdfs --(hadoop distributed file system): hadoop的分布式文件系统
mapreduce: hadoop的分布式计算服务
yarn :hadoop的分布式资源调度框架
功能分 模块:
hdfs 存储
mapreduce 计算
yarn 资源调度
操作系统 文件系统 计算程序
windows windows NTFS qq,微信
hadoop YARN HDFS MAPREDUCE

hadoop基于普通廉价机的  提供高可用 高扩展  高容错的分布式存储计算服务的

hadoop 设计的时候  考虑到  集群中任何一个节点 任何时间 都有可能出故障  hadoop已经帮你规避了

hadoop的组成:

hdfs: 分布式存储
	一主多从 一助理
	3个角色
	namenode
		分布式存储的老大
		管理每个节点上存储数据的编号   对应关系
	datanode
		负责真正的数据存储的
		真正干活的
	secondarynamenode
		namenode的助理
		备份namenode的数据    帮助namenode减压
mapreduce:
	分布式计算程序
	安装完成  没有对应进程
yarn:
	服务于计算程序的
	主从
	resourcemanager:
		资源调度的老大
		决定哪一个计算任务需要多少资源  在哪一个节点分配资源的
	nodemanager :
		提供资源运行任务的
		
hadoop安装完成:
	进程   jps
	namenode     
	datanode
	secondarynamenode
	resourcemanager
	nodemanager

hadoop的安装:

1)安装版本:
hadoop2.6 不建议
hadoop2.7.7
不选择最新 不选择老版本
2)安装的模式:
单机
伪分布式
一个节点
完全分布式安装
高可用
联邦

3)集群规划
3台 :硬件 内存 1G 主节点1.5–2G

			hdp01		hdp02				hdp03
hdfs		namenode
			datanode	datanode			datanode
						secondarynamenode
mapreduce 
yarn										resourcemanager
			nodemanager	nodemanager			nodemanager
			

注意:  
	1)namenode  secondarynamenode  不能在同一个节点上
	2)主节点一般性能高一些  内存  1.5G  

4)开始安装:
1)安装准备
1)ip
2)主机名
hostname
3)主机映射
vi /etc/hosts
192.168.191.201 hdp01
192.168.191.202 hdp02
192.168.191.203 hdp03
4)检查防火墙和selinux
关闭防火墙
service iptables status
service iptables stop

	selinux  linux高级权限管理  运维
	sudo vi /etc/sysconfig/selinux
	SELINUX=disabled
	
	5)开启普通用户的sudoers权限
	vi /etc/sudoers
	hadoop  ALL=(ALL)       ALL
	
	切换为普通用户了
	
	6)修改系统启动级别
	修改为3 
	sudo vi /etc/inittab 
	id:3:initdefault:
	
	7)进行免密码登录
	3台机器之间  都要做
	跟用户有关  必须普通用户
	ssh-keygen 生成秘钥
	ssh-copi-id 主机名
	
	验证:
	ssh hdp01 
	exit 
	ssh hdp02 
	exit
	ssh hdp03 
	exit 
	8)安装jdk 
	java -version 
	1.8 
	
	9)时间同步
		1)手动进行
		date -s "时间"
		2)和时间服务器同步
		sudo ntpdate ntp1.aliyun.com
		
		ntp1.aliyun.com
		ntp2.aliyun.com
		ntp3.aliyun.com
		ntp4.aliyun.com
		ntp5.aliyun.com
		ntp6.aliyun.com
		ntp7.aliyun.com
2)安装hadoop
	只需要在一台机器配置完成  远程发送到其他节点
	1)上传安装包
	2)解压
		tar -xvzf hadoop-2.7.6.tar.gz
	3)配置环境变量
		bin  hadoop的各种脚本
		etc  配置文件
		lib	 依赖包
		sbin  执行命令脚本
		share	hadoop中的公共资源
		
		sudo vi /etc/profile 
		export HADOOP_HOME=/home/hadoop/apps/hadoop-2.7.6
		export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
		
		生效环境变量
		source /etc/profile
		
		检查hadoop的环境变量
		hadoop version 
	4)修改hadoop的配置文件
		$HADOOP_HOME/etc/hadoop 
		/home/hadoop/apps/hadoop-2.7.6/etc/hadoop
		1)core-site.xml   common 
			<configuration>  核心配置文件标签
				<property>  	一个配置项
					<name>key</name>
					<value>value</value>
				</property>
			</configuration>
			
			<property>
				<!-- hdfs的主节点 namenode 的访问入口 hdfs://hdp01:9000 -->
				<name>fs.defaultFS</name>
				<value>hdfs://hdp01:9000</value>
			</property>

			<property>
				<!-- hdfs存储数据的目录 配置家目录下某一个目录 -->
				<name>hadoop.tmp.dir</name>
				<value>/home/hadoop/data/hadoopdata</value>
			</property>

		2)hdfs-site.xml   hdfs 
			<property>
				<name>dfs.namenode.name.dir</name>
				<value>/home/hadoop/data/hadoopdata/name</value>
				<description>namenode相关数据的存储目录</description>
			</property>

			<property>
				<name>dfs.datanode.data.dir</name>
				<value>/home/hadoop/data/hadoopdata/data</value>
				<description>datanode相关数据的存储目录</description>
			</property>

			<property>
				<name>dfs.replication</name>
				<value>2</value>
				<description>HDFS 的数据块的副本存储个数</description>
			</property>

			<property>
				<name>dfs.secondary.http.address</name>
				<value>hdp02:50090</value>
				<description>secondarynamenode 运行节点的信息,和 namenode 不同节点</description>
			</property>
		
		
		3)mapred-site.xml  mapreduce
			cp mapred-site.xml.template mapred-site.xml
			vi mapred-site.xml 
			<property>
				<!--配置mapreduce的计算任务的资源调度框架-->
				<name>mapreduce.framework.name</name>
				<value>yarn</value>
			</property>

			 
		
		
		4)yarn-site.xml   yarn 
			vi yarn-site.xml 
			<property>
				<!--配置yarn的主节点-->
				<name>yarn.resourcemanager.hostname</name>
				<value>hdp03</value>
			</property>

			<property>
				<name>yarn.nodemanager.aux-services</name>
				<value>mapreduce_shuffle</value>
				<description>YARN 集群为 MapReduce 程序提供的 shuffle 服务</description>
			</property>
		
		
		5)hadoop-env.sh    java环境变量
			加载  /etc/profile  启动hadoop   hadoop-env.sh
			export JAVA_HOME=${JAVA_HOME}
			需要改
			export JAVA_HOME=/home/hadoop/apps/jdk1.8.0_73

		6)slaves   从节点信息
			datanode  nodemanager
			datanode  和 nodemanager 节点相同的
			
			一行一个主机名   不要有多余的空格或换行
			hdp01
			hdp02
			hdp03
	5)将hadoop的安装包远程发送到其他节点
	scp -r /home/hadoop/apps/hadoop-2.7.6 hdp01:/home/hadoop/apps/
	scp -r /home/hadoop/apps/hadoop-2.7.6 hdp03:/home/hadoop/apps/
	
	6)远程发送hadoop的环境变量
	sudo scp /etc/profile hdp01:/etc/
	sudo scp /etc/profile hdp03:/etc/
	
	source /etc/profile
	
	7)格式化namenode 
	在namenode节点上    hdp01 
	hadoop namenode -format
	
	格式化成功的标志:
	19/04/29 17:17:22 INFO common.Storage: Storage directory /home/hadoop/data/hadoopdata/name has been successfully formatted.
	
	一定要格式化成功
	报错:修正报错  重新格式化
	注意:成功的格式化只能一次
	
	8)启动 
	启动hdfs  在任意节点执行即可  执行一次
	start-dfs.sh    
	
	jps查看进程
	web网页访问
		namenode主机名或ip:50070
		
	启动yarn   最好在resourcemanager节点执行
	start-yarn.sh 
	
	jps查看进程
	web页面访问
		resourcemanager主机名或ip:8088
		
	注意:启动  可能某一个节点启动不了   重启  
		格式化成功才能启动了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值