Hadoop.之.入门部署
一、课程目标
	  -》大数据是什么?大数据能做什么?
	  -》什么是Hadoop?Hadoop的设计思想?
	  -》Hadoop如何解决大数据的问题?(什么是hdfs与yarn、MapReduce)
	  -》如何快速部署Hadoop环境(伪分布)
	
二、大数据的应用及发展
	  -》本质上的大数据技术:
		    -》学习一系列的软件工具(hadoop、spark)处理数据?
		    -》怎么处理?
	  -》大数据工程师与数据分析师区别?
		    -》数据分析师偏业务型:小数据量,样本分析
			      -》第二层处理
		    -》大数据(分析)工程师偏技术型:大数据量,总体分析
			      -》第一层的分析处理
	  -》应用及其工作岗位?
		    -》大数据分析:商业化公司
			      -》百度统计
			      -》友盟
			      -》talking data
			      -》Google Analytic
			      -》易分析
		    -》精准营销/推荐系统/数据预测/风险控制
			      -》用户画像:打标签
		    -》数据挖掘/机器学习
	  -》相关大数据技术?
		    -》数据采集
			      flume	  sqoop  		Logstash
		    -》数据存储
			      HDFS  	Hbase  		Hive	  	tacyon	  	redie   kakfa
		    -》数据处理
			      MapReduce	  Hive  	spark  	storm	  flink	  kylin
		    -》数据应用
			      -》数据可视化
			      -》用户画像
			      -》推荐系统
			      -》数据挖掘
	  -》学习以上技术基础
		    Java(多线程、常见工具:集合类、字符串、日期、JVM)
		    SQL:大数据分析主流
		    Linux:所有的大数据平台都搭建在Linux上
		
		
三、Hadoop的介绍
	  -》hadoop功能:
		    -》Google的论文
			      -》GFS:大数据存储
			      -》MapReduce:大数据计算 
			      -》BigTable : 解决大数据实时存储(Hbase)
		    -》大数据存储
			      HDFS
		    -》大数据计算
			      MapReduce
	  -》版本:
		  hadoop1:
			    hdfs
			    MapReduce
		  hadoop2:
			    hdfs
			    MapReduce
			    yarn
	  -》hadoop的官网
		    hadoop.apache.org
	  -》Hadoop四大组件
		    Hadoop Common: 
		    The common utilities that support the other Hadoop modules.
		    功能:用于支持其他模块和其他工具的接口
		
		    Hadoop Distributed File System (HDFS?): 
		    A distributed file system that provides high-throughput access to application data.
		    功能:分布式文件系统,用于存储大量数据的
		
		
		    Hadoop YARN: 
		    A framework for job scheduling and cluster resource management.
		    功能:分布式任务调度和资源管理
		
		
		    Hadoop MapReduce: A YARN-based system for parallel processing of large data sets.
		    功能:分布式处理数据计算模型(方式)
		
	  -》分布式概念:区别于传统的单节点
		    -》分布式存储
			      -》单节点:
				        1个2TB文件:每台电脑拥有600GB存储空间
					          -》自己手动将2TB文件拆分成4个小文的
					          -》在第一台机器存储一个文件
					          -》一直存到第4台机器
				        问题:
					          -》存储时,自己手动将文件分割
					          -》1个文件		-》			4个文件
					          -》读,读4个文件
			      -》分布式:
				        1个2TB文件:每台机器拥有600GB存储空间
					          -》将每台机器彼此之间构建一种关系
					          -》让所有的机器变成一个整体:集群cluster
		    -》分布式计算
			      -》单节点:两颗CPU8核	64GB
				        一台机器执行:10天
			      -》分布式:集群:20颗CPU80核	640GB   单台 * 10
				        集群机器执行:1天
				
				
		
四、分布式存储:HDFS
	  -》HDFS:分布式文件系统
		    -》功能:
			      -》管理存储文件
			      -》文件数据的读写
		    -》特点:
			      -》分布式:将多台机器组成一个集群
			      -》CS模式:
				        客户端:client
				        服务端:Server
			      -》主从架构:
				        主:NameNode(只有一个)
					        -》接收客户端的请求
					        -》负责管理所有的从节点
					        -》负责管理元数据(内存)
						          -》数据文件存储的账本
							            -》每个文件被分成了几个块
							            -》每个块有几个副本
							            -》分别每个块存在那台机器
				        从:DataNode(可以有很多个)
					          -》负责真正的数据的读写
				        客户端:
					          -》提交用户的所有请求给服务端
					          -》将用户的文件存储时进行分割
					          -》将用户的文件读取时进行合并
				        Secondary NameNode:辅助进程
					          -》功能:辅助NameNode备份元数据
						              将NameNode内存中的元数据同步到本地磁盘中
			      -》分块:
				        HDFS会将用户存入的每一个文件按照128M一个块进行分块
				          500M:
					            block1:128M
					            block2:128M
					            block3:128M
					            block4:116M
				          每个块存储在不同从节点中
			      -》副本:安全
				        HDFS默认会为每个块复制两份,所以每一个块在hdfs上总共存了3份
		
				        node1  		node2	  	node3	  	node4
				        block1  		block2  		block3   		block4
				        block2  		block1  		block2   		block1
				        block3  		block3  		block4
				        block4
		  -》读写流程
			    用户	      	客户端    			服务端
			    我们自己	    命令行	    		NameNode/DataNode
			    -》写:
				      -》用户操作客户端提交写的请求
				      -》客户端将用户提供的文件进行分块,128M一个块
				      -》客户端将第一个块写请求给NameNode
				      -》NameNode接收客户端请求,NameNode会返回该数据块存储的DataNode的地址
				      -》客户端选择离自己最近的那台机器将数据块提交给那台DataNode,第一台存储的DataNode会将数据块进行复制给其他的两台DataNode
				      -》DataNode将存储结果返回给NameNode,NameNode记录元数据
				      -》重复以上操作,直到每个块都存完了
				      -》客户端所有块存储完成,直接返回
			    -》读
				      -》客户通过客户端发送读请求
				      -》客户端请求NameNode,NameNode返回每个块的存储地址
				      -》客户端从离自己最近的机器上读取每个块,将每个块进行合并成一个文件,返回给客户
				
	  -》HDFS是逻辑还是实际文件系统?
		    -》HDFS是由多台机器合在一起变成集群,对外提供统一接口的
		    -》HDFS是一个软件
			      软件	    	操作系统	      	硬件
			      hdfs    	 	Linux文件系统	     硬盘
		    -》HDFS是一个基于多台机器的文件系统构建的一个虚拟的FS
	  -》所有的程序运行的物理流程
		    -》启动程序
		    -》读取硬盘中的数据加载到内存
		    -》CPU只能读取内存中的数据
	
五、Hadoop的安装部署
	  -》hadoop部署模式
		    -》本地模式:一般用于开发程序的测试
		    -》伪分布式:一台机器,一般用于测试
		    -》完全分布式:企业实际环境
	  -》Linux环境准备
		    -》配置所有机器的ip、主机名、映射
		    -》关闭分防火墙、selinux
		    -》创建统一的目录及用户
			      -》必须使用一个普通用户来操作
				          rdedu
			      -》设置统一的安装目录
				        sudo mkdir -p /opt/modules  :这个目录用作安装目录
				        sudo mkdir -p /opt/datas	:这个目录用作放数据文件
				        sudo mkdir -p /opt/tools	:这个目录用作放软件安装包
				        sudo chown -R rdedu:rdedu /opt/modules 
				        sudo chown -R rdedu:rdedu /opt/datas
				        sudo chown -R rdedu:rdedu /opt/tools
		    -》Linux句柄数:最大线程数、最大文件数……
		    -》配置SSH免密钥登录:
			      ssh:是一种安全加密协议
				        ssh  username@hostname
			      ssh bigdata-training01.erongda.com:以当前用户登录该机器
			      exit:退出
			
			  -》配置ssh免密钥登录
				    ssh-keygen -t rsa  放入命令行执行,一路回车
				    ssh-copy-id bigdata-training01.erongda.com
		  -》配置时间同步:分布式集群中要求每一台机器的时间是一致
		  -》安装JDK
			    -》上传jdk到tools目录下
			    -》解压安装: tar -zxf /opt/tools/jdk-8u91-linux-x64.tar.gz -C /opt/modules/
			    -》配置环境变量:sudo vim /etc/profile 
				      注意:这个文件不能随便乱动,如果不小心修改了什么,强制退出不要保存
				      在文件的尾部添加:
				        export JAVA_HOME=/opt/modules/jdk1.8.0_91
				        export PATH=$PATH:$JAVA_HOME/bin
			    -》刷新环境变量
				      source /etc/profile
			    -》验证:
				      java -version
	  -》Hadoop安装部署
		    -》下载安装Hadoop
			    -》发行公司:
				      -》Apache
				      -》Cloudera:CDH
				      -》HortonWorks:HDP
				      -》星环大数据:TDH
			    -》发行版本
				      -》Hadoop1:1.x和0.x
				      -》Hadoop2:企业中最多
					        2.5-2.9
				      -》Hadoop3:去年发布正式版本,生产环境一般不会用的
			    -》下载地址
				      http://archive.apache.org/dist/
		    -》解压安装
			      tar -zxvf /opt/tools/hadoop-2.7.3.tar.gz -C /opt/modules/
			      cd /opt/modules/hadoop-2.7.3/
			      bin:该目录一般存放命令或者客户端
			      etc/conf:配置文件目录
			      lib:放依赖jar包
			      logs:放日志文件
		    -》修改配置
			      http://hadoop.apache.org/docs/r2.7.6/hadoop-project-dist/hadoop-common/SingleCluster.html#Pseudo-Distributed_Operation
			      /opt/modules/hadoop-2.7.3/etc/hadoop  :配置文件目录
			      -》修改env文件
				        hadoop-env.sh:
				        mapred-env.sh:
				        yarn-env.sh:
	
				        export JAVA_HOME=/opt/modules/jdk1.8.0_91
			      -》修改site文件
				        core-site.xml:配置Hadoop的全局属性
					        <!--指定HDFS的地址即NameNode的地址-->
					        <property>
						          <name>fs.defaultFS</name>
						            <value>hdfs://bigdata-training01.erongda.com:8020</value>
					        </property>
					        mkdir /opt/modules/hadoop-2.7.3/datas
					        <!--指定Hadoop的临时存储目录-->
					        <property>
						          <name>hadoop.tmp.dir</name>
						          <value>/opt/modules/hadoop-2.7.3/datas</value>
					        </property>
				        hdfs-site.xml:配置HDFS的属性
				        slaves:用于指定所有从节点的地址 
					        bigdata-training01.erongda.com
		    -》启动服务
			      -》第一次使用HDFS,先进行格式化
				        cd /opt/modules/hadoop-2.7.3/
				        bin/hdfs namenode -format
			    -》启动HDFS
				      启动主节点
				        sbin/hadoop-daemon.sh start namenode
				      启动从节点
				        sbin/hadoop-daemon.sh start datanode
		    -》测试运行
			      -》jps
				      6582 Jps
				      6328 NameNode
				      6479 DataNode
			  -》访问web端口:50070
				    在浏览器中输入:ip:50070
				      192.168.134.222:50070
			  -》hdfs的文件系统:类似于Linux文件系统,从/目录开始
		  -》执行HDFS的客户端操作
			    -》创建文件夹
				      bin/hdfs dfs -mkdir -p /wordcount/input
			    -》上传文件:从Linux到hdfs
				      bin/hdfs dfs -put /opt/datas/wc.txt /wordcount/input/
			    -》下载文件:从hdfs到Linux
				      bin/hdfs dfs -get /wordcount/input/wc.txt ~/
			    -》删除文件
				      bin/hdfs dfs -rm -r /test
			    -》查看文件
				      bin/hdfs dfs -cat /wordcount/input/wc.txt
			    -》复制、移动……
				      -cp
				      -mv
			  客户	->	客户端	->	NameNode/DataNode
		  -》关闭HDFS
			    sbin/hadoop-daemon.sh stop namenode 
			    sbin/hadoop-daemon.sh stop datanode
	
	
	  Connection refused:连接拒绝
		  -》主机地址解析不对
		  -》服务没有开启(端口没有开放)
	
	
六、分布式资源管理和任务调度:Yarn
	  -》资源管理
		    -》所有资源(整个集群中所有的资源)分配
			      10台机器  		每台机器1核1G
	  -》任务调度
		    -》一次性提交10个程序
		    -》谁先运行,谁后运行?每个程序能用多少资源?
	  -》特点:
		    -》分布式
		    -》主从架构
			      主:ResourceManager
				        -》负责接收所有用户的请求
				        -》负责管理所有从节点
				        -》负责资源管理和任务调度
			      从:NodeManager
				        -》负责真正执行程序
	  -》MapReduce程序在Yarn上执行的流程
		    1-客户通过客户端提交处理数据的程序
		    2-客户端将请求提交给RM,RM随机选择一个NM,在该NM上启动APP Master
		    3-APP Master向RM请求资源和指令
		    4-RM中的Resource Schedule将每台NM能够使用的资源信息和指令封装成container返回给APP Master
			      注意:真正resourcemanager做的是资源管理,控制所有nodemanager能够使用自己多少资源
		    5-APP Master将资源和指令发送给所有的NM
		    6-所有的NM,启动Map task和Reduce task来运行程序
		    7-每个NM运行完成之后将结果反馈给APP Master
		    8-APP Master将运行结果返回给RM
	
	  -》MapReduce的运行过程
		    input:输入
		    map:将一个大任务拆分成多个小的任务
		    shuflle
		    reduce:将每个小任务的结果进行合并
		    ouput:将结果进行保存
		
	  -》安装部署Yarn
		    -》下载解压Hadoop
		    -》修改配置
			      -》修改hdfs配置
			      -》修改MapReduce配置:etc/hadoop/mapred-site.xml
				        mv etc/hadoop/mapred-site.xml.template etc/hadoop/mapred-site.xml
				        <!--指定MapReduce程序运行在yarn上-->
				        <property>
					          <name>mapreduce.framework.name</name>
					          <value>yarn</value>
				        </property>
			      -》修改Yarn配置:etc/hadoop/yarn-site.xml
				        <!--指定yarn上运行的程序的类型-->
				        <property>
					          <name>yarn.nodemanager.aux-services</name>
					          <value>mapreduce_shuffle</value>
				        </property>
				        <!--指定resourcemanager的地址-->
				        <property>
					          <name>yarn.resourcemanager.hostname</name>
					          <value>bigdata-training01.erongda.com</value>
				        </property>
			      -》修改slaves文件:指定datanode和nodemanager的地址
		    -》启动服务
			      启动resourcemanager
				        sbin/yarn-daemon.sh start resourcemanager
			      启动nodemanager
				        sbin/yarn-daemon.sh start nodemanager
		    -》测试运行
			      7376 ResourceManager
			      7714 Jps
			      7010 NameNode
			      7604 NodeManager
			      6479 DataNode
			
			      访问web端口:8088
			
			      http://192.168.134.222:8088
		    -》提交wordcount程序
			      统计文件中每个单词出现多少次
			      -》将MapReduce程序提交给Yarn来执行,让nodemanager按照MapReduce的方式来执行
			
			      -》MapReduce输入默认读hdfs的文件,必须已存在
			      -》MapReduce输出的目录是不能提前存在的
			
			
			      bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount /wordcount/input/wc.txt /wordcount/ouput
			
			      通过yarn客户端提交运行一个jar包,jar包在share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar路径下,运行jar包中的wordcount程序,输入目录是/wordcount/input/wc.txt,输出目录是/wordcount/ouput
			
	  -》必须记住端口;	
		    NameNode的RPC端口:8020
		    NameNode的http端口:50070
		    ResourceManager的Rpc端口:8032
		    ResourceManager的http端口:8088
		
		    -》所有客户端的请求、心跳、汇报等等都走rpc端口
		    -》所有web界面的提供都走http端口
	     -》关机前记得关闭所有进程
		    将启动命令中的 start更换为stop
 
		
如有问题,欢迎纠正!!!
如有转载,请标明源处:https://www.cnblogs.com/Charles-Yuan/p/9614615.html
 
                    
                 
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号