ITPub博客

首页 > 大数据 > Hadoop > hadoop的一些知识点 配置步骤

hadoop的一些知识点 配置步骤

原创 Hadoop 作者:hgs19921112 时间:2018-09-03 19:37:32 0 删除 编辑
1.准备Linux环境
	1.0先将虚拟机的网络模式选为NAT
		
	1.1修改主机名
		vi /etc/sysconfig/network
		
		NETWORKING=yes
		HOSTNAME=itcast    ###
	1.2修改IP
		两种方式:
		第一种:通过Linux图形界面进行修改(强烈推荐)
			进入Linux图形界面 -> 右键点击右上方的两个小电脑 -> 点击Edit connections -> 选中当前网络System eth0 -> 点击edit按钮 -> 选择IPv4 -> method选择为manual -> 点击add按钮 -> 添加IP:192.168.1.101 子网掩码:255.255.255.0 网关:192.168.1.1 -> apply
	
		第二种:修改配置文件方式(屌丝程序猿专用)
			vim /etc/sysconfig/network-scripts/ifcfg-eth0
			
			DEVICE="eth0"
			BOOTPROTO="static"               ###
			HWADDR="00:0C:29:3C:BF:E7"
			IPV6INIT="yes"
			NM_CONTROLLED="yes"
			ONBOOT="yes"
			TYPE="Ethernet"
			UUID="ce22eeca-ecde-4536-8cc2-ef0dc36d4a8c"
			IPADDR="192.168.1.101"           ###
			NETMASK="255.255.255.0"          ###
			GATEWAY="192.168.1.1"            ###
			
	1.3修改主机名和IP的映射关系
		vim /etc/hosts
			
		192.168.1.101	itcast
	
	1.4关闭防火墙
		#查看防火墙状态
		service iptables status
		#关闭防火墙
		service iptables stop
		#查看防火墙开机启动状态
		chkconfig iptables --list
		#关闭防火墙开机启动
		chkconfig iptables off
	1.5 修改sudo
		su root
		vim /etc/sudoers
		给hadoop用户添加执行的权限
关闭linux服务器的图形界面:
vi /etc/inittab 
	
	1.5重启Linux
		reboot
2.安装JDK
	2.1上传alt+p 后出现sftp窗口,然后put d:\xxx\yy\ll\jdk-7u_65-i585.tar.gz
	
	2.2解压jdk
		#创建文件夹
		mkdir /home/hadoop/app
		#解压
		tar -zxvf jdk-7u55-linux-i586.tar.gz -C /home/hadoop/app
		
	2.3将java添加到环境变量中
		vim /etc/profile
		#在文件最后添加
		export JAVA_HOME=/home/hadoop/app/jdk-7u_65-i585
		export PATH=$PATH:$JAVA_HOME/bin
	
		#刷新配置
		source /etc/profile
		
3.安装hadoop2.4.1
	先上传hadoop的安装包到服务器上去/home/hadoop/
	注意:hadoop2.x的配置文件$HADOOP_HOME/etc/hadoop
	伪分布式需要修改5个配置文件
	3.1配置hadoop
	第一个:hadoop-env.sh
		vim hadoop-env.sh
		#第27行
		export JAVA_HOME=/usr/java/jdk1.7.0_65
		
	第二个:core-site.xml
		<!-- 指定HADOOP所使用的文件系统schema(URI),HDFS的老大(NameNode)的地址 -->
		<property>
			<name>fs.defaultFS</name>
			<value>hdfs://weekend-1206-01:9000</value>
		</property>
		<!-- 指定hadoop运行时产生文件的存储目录 -->
		<property>
			<name>hadoop.tmp.dir</name>
			<value>/home/hadoop/hadoop-2.4.1/tmp</value>
    </property>
		
	第三个:hdfs-site.xml   
		<!-- 指定HDFS副本的数量 -->
		<property>
			<name>dfs.replication</name>
			<value>1</value>
		</property>
		
		<property>
			<name>dfs.secondary.http.address</name>
			<value>192.168.1.152:50090</value>
		</property>
    
    
		
	第四个:mapred-site.xml (mv mapred-site.xml.template mapred-site.xml)
		mv mapred-site.xml.template mapred-site.xml
		vim mapred-site.xml
		<!-- 指定mr运行在yarn上 -->
		<property>
			<name>mapreduce.framework.name</name>
			<value>yarn</value>
		</property>
		
	第五个:yarn-site.xml
		<!-- 指定YARN的老大(ResourceManager)的地址 -->
		<property>
			<name>yarn.resourcemanager.hostname</name>
			<value>weekend-1206-01</value>
		</property>
		<!-- reducer获取数据的方式 -->
		<property>
			<name>yarn.nodemanager.aux-services</name>
			<value>mapreduce_shuffle</value>
		</property>
     	
	3.2将hadoop添加到环境变量
	
	vim /etc/proflie
		export JAVA_HOME=/usr/java/jdk1.7.0_65
		export HADOOP_HOME=/itcast/hadoop-2.4.1
		export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
	source /etc/profile
	
	3.3格式化namenode(是对namenode进行初始化)
		hdfs namenode -format (hadoop namenode -format)
		
	3.4启动hadoop
		先启动HDFS
		sbin/start-dfs.sh
		
		再启动YARN
		sbin/start-yarn.sh
		
	3.5验证是否启动成功
		使用jps命令验证
		27408 NameNode
		28218 Jps
		27643 SecondaryNameNode
		28066 NodeManager
		27803 ResourceManager
		27512 DataNode
	
		http://192.168.1.101:50070 (HDFS管理界面)
		http://192.168.1.101:8088 (MR管理界面)
		
4.配置ssh免登陆
	#生成ssh免登陆密钥
	#进入到我的home目录
	cd ~/.ssh
	ssh-keygen -t rsa (四个回车)
	执行完这个命令后,会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
	将公钥拷贝到要免密登陆的目标机器上
	ssh-copy-id localhost
	---------------------------
	ssh免登陆:
		生成key:
		ssh-keygen
		复制从A复制到B上:
		ssh-copy-id B
		验证:
		ssh localhost/exit,ps -e|grep ssh
		ssh A  #在B中执行
---------------------------------------------------
	hdfs-site.xml
	参数dfs.name.dir 配置镜像文件的目录,可以逗号分隔多值
	参数dfs.data.dir 配置镜像文件的目录,可以逗号分隔多值
	java 客户端api
	Configuration 配置
	FileSystem 文件系统操作相关
		FileSystem.getInstance(configuration)
		FileSystem.mkdirs()
		FileSystem.delete()
		FileSystem.listFiles()迭代器迭代文件;
		FileSystem.listStatus()返回文件数组
	用Stream流访问hdfs,访问指定偏移量的数据
	
	mapreduce
	Mapper<KEYIN,VALUEIN,KEYOUT,VALUEOUT>
		KEYIN:默认情况下为mr框架所读到的文本偏移量,long型
		VALUEIN:默认情况下是一行文本 string
		KEYOUT:是用户自定义逻辑处理完成后输出的key 
		VALUEOUT:用户自定义逻辑处理完成后输出的value
		map(key, value context)
	Reducer<KEYIN,VALUEIN,KEYOUT,VALUEOUT>
		reduce();
	如果涉及对象,则对象继承Writable 实现序列化
	Job
		job.getInstance(conf);
		job.setJarClass
		job.setMapClsss
		job.setReduceclass
		job.setInputKeyClass
		job.setInoutValueClass
		job.setOutputKey
		job.setOutputValue();
		FileInputformat.setInputPaths
		FileOutputFormat.setOutputPath();
		job.waitForCompletion(true);等待退出
	yarn  8088
	hdfs  50070
	
	map切片配置参数
		mapreduce.iput.fileinputformat.split.minsize;
		mapreduce.iput.fileinputformat.split.maxsize;
	自定义partioner:
		class xxx extends Partitioner<map_keyout,map_keyvalue>{}
		job.setPartitionerClass();//设置自定义分区的类
		job.seteNumReduceTasks();//指定reduce的个数
	自定义输出文件名:
	自定义排序顺序:
		排序在Mapper的map()方法输出的时候进行
		分区在Mapper的map()方法后执行
	combiner的作用:
		在mapper溢出数据的时候做一次combiner类型相同的进行合并,
		job.setCombinereClass(xxx.class);
	关于大量小文件的优化策略
		(1)默认情况下,TextInputFormat对任务的切片机制是按照文件切片的,
		  不管文件多小都会是单独切片,都交给一个maptask, 这样效率很低
		(2)优化策略,在采集的时候将小文件合并到文件,再上传hdfs
		  补救措施:如果已经在hdfs可以使用CombinerFileInputFormat,它的逻辑和
		  fileinputformat的逻辑不同,它可以将过个小文件在逻辑上规划为一个分片
		  job.setInputFormatClass(CombineTextInputformat.class);
		  CombineTextInputformat.setmaxInputSize();
		  CombineTextInputformat.setminInputSize();
	mr本地运行与yarn运行
		默认配置:
		conf.set("mapreduce.framwork.name","local");
		conf.set("fs.defaultFS","file:///")
		集群模式:
			需要修改源代码
		conf.set("mapreduce.framwork.name","yarn");
		conf.set("yarn.resourcemanager.hostname","xxxx.xxxx.xxxx.xxx");
		conf.set("fs.defaulFS","hdfs://xxxx.xxxx.xxxx.xxxx:9000/");
	的到切分的文件名:
		FileSplit sp = (FileSplit) context.getInputSplit();
		String name = sp.getPath().getName();
	数据倾斜问题:
		map side join(map端join去掉reduce,使用distributecache,将需要关联的小文件放到分布式缓存中,整个job只在map中完成,reduce,不做其他的事情)
		job.addArchiveToClassPath(archive);//缓存jar包到task工作classpath
		job.addFileToClassPath(new URI("file://  "));//缓存文件到task的工作classpath目录
		job.addCacheArchive(uri);//缓存压缩包到工作目录
		job.addCacheFile(uri);缓存文件到运行节点的工作目录
		job.setReduceTask(0);//reduceTask数量为0
		读取缓存的文件的时候需要读取链接如: File f = new File("./thefile"); "thefile" 是 job.addCacheFile(new URI("hdfs://data134:9000/home/tmp.txt#thefile"));的相对内容
	使用groupcomparator求最大值
	class groupcomparator implements WritableComparator
		 	groupcomparator(){
				super(xxxx.class ,true);
			}
			int compare(xxxx x1,xxxx x2){
				return x1.id.compareTo(x2.id);					
			}			
			job.setGroupingComparatorClass(xxxx.class);
			
	自定义outputformat:
		class myoutputFormat extends FileInputformat<keyin,valuein>
		class myrecordwriter extends RecordWriter<keyin,valuein>
	自定义inputFormat:
	
	
-----------------------------------------------------------------------------------------------------------------------
	11.1 资源相关参数
		//以下参数是在用户自己的mr应用程序中配置就可以生效
		(1) mapreduce.map.memory.mb: 一个Map Task可使用的资源上限(单位:MB),默认为1024。如果Map Task实际使用的资源量超过该值,则会被强制杀死。
		(2) mapreduce.reduce.memory.mb: 一个Reduce Task可使用的资源上限(单位:MB),默认为1024。如果Reduce Task实际使用的资源量超过该值,则会被强制杀死。
		(3) mapreduce.map.java.opts: Map Task的JVM参数,你可以在此配置默认的java heap size等参数, e.g.
		“-Xmx1024m -verbose:gc -Xloggc:/tmp/@taskid@.gc” (@taskid@会被Hadoop框架自动换为相应的taskid), 默认值: “”
		(4) mapreduce.reduce.java.opts: Reduce Task的JVM参数,你可以在此配置默认的java heap size等参数, e.g.
		“-Xmx1024m -verbose:gc -Xloggc:/tmp/@taskid@.gc”, 默认值: “”
		(5) mapreduce.map.cpu.vcores: 每个Map task可使用的最多cpu core数目, 默认值: 1
		(6) mapreduce.reduce.cpu.vcores: 每个Reduce task可使用的最多cpu core数目, 默认值: 1
		//应该在yarn启动之前就配置在服务器的配置文件中才能生效
		(7) yarn.scheduler.minimum-allocation-mb	  1024   给应用程序container分配的最小内存
		(8) yarn.scheduler.maximum-allocation-mb	  8192	给应用程序container分配的最大内存
		(9) yarn.scheduler.minimum-allocation-vcores	1	
		(10)yarn.scheduler.maximum-allocation-vcores	32
		(11)yarn.nodemanager.resource.memory-mb   8192  
		//shuffle性能优化的关键参数,应在yarn启动之前就配置好
		(12) mapreduce.task.io.sort.mb   100         //shuffle的环形缓冲区大小,默认100m
		(13) mapreduce.map.sort.spill.percent   0.8    //环形缓冲区溢出的阈值,默认80%
	11.2 容错相关参数
		(1) mapreduce.map.maxattempts: 每个Map Task最大重试次数,一旦重试参数超过该值,则认为Map Task运行失败,默认值:4。
		(2) mapreduce.reduce.maxattempts: 每个Reduce Task最大重试次数,一旦重试参数超过该值,则认为Map Task运行失败,默认值:4。
		(3) mapreduce.map.failures.maxpercent: 当失败的Map Task失败比例超过该值为,整个作业则失败,默认值为0. 如果你的应用程序允许丢弃部分输入数据,则该该值设为一个大于0的值,比如5,表示如果有低于5%的Map Task失败(如果一个Map Task重试次数超过mapreduce.map.maxattempts,则认为这个Map Task失败,其对应的输入数据将不会产生任何结果),整个作业扔认为成功。
		(4) mapreduce.reduce.failures.maxpercent: 当失败的Reduce Task失败比例超过该值为,整个作业则失败,默认值为0.
		(5) mapreduce.task.timeout: Task超时时间,经常需要设置的一个参数,该参数表达的意思为:如果一个task在一定时间内没有任何进入,即不会读取新的数据,也没有输出数据,则认为该task处于block状态,可能是卡住了,也许永远会卡主,为了防止因为用户程序永远block住不退出,则强制设置了一个该超时时间(单位毫秒),默认是300000。如果你的程序对每条输入数据的处理时间过长(比如会访问数据库,通过网络拉取数据等),建议将该参数调大,该参数过小常出现的错误提示是“AttemptID:attempt_14267829456721_123456_m_000224_0 Timed out after 300 secsContainer killed by the ApplicationMaster.”。
	11.3 本地运行mapreduce 作业
		设置以下几个参数:
		mapreduce.framework.name=local
		mapreduce.jobtracker.address=local
		fs.defaultFS=local
	11.4 效率和稳定性相关参数
		(1) mapreduce.map.speculative: 是否为Map Task打开推测执行机制,默认为false
		(2) mapreduce.reduce.speculative: 是否为Reduce Task打开推测执行机制,默认为false
		(3) mapreduce.job.user.classpath.first & mapreduce.task.classpath.user.precedence:当同一个class同时出现在用户jar包和hadoop jar中时,优先使用哪个jar包中的class,默认为false,表示优先使用hadoop jar中的class。
		(4) mapreduce.input.fileinputformat.split.minsize: FileInputFormat做切片时的最小切片大小,(5)mapreduce.input.fileinputformat.split.maxsize:  FileInputFormat做切片时的最大切片大小
		(切片的默认大小就等于blocksize,即 134217728)
---------------------------------------------------------------------------------------------------------------
Hadoop HA
	hadoop2.0已经发布了稳定版本了,增加了很多特性,比如HDFS HA、YARN等。最新的hadoop-2.6.4又增加了YARN HA
		注意:apache提供的hadoop-2.6.4的安装包是在32位操作系统编译的,因为hadoop依赖一些C++的本地库,
		所以如果在64位的操作上安装hadoop-2.6.4就需要重新在64操作系统上重新编译
		(建议第一次安装用32位的系统,我将编译好的64位的也上传到群共享里了,如果有兴趣的可以自己编译一下)
		前期准备就不详细说了,课堂上都介绍了
		1.修改Linux主机名
		2.修改IP
		3.修改主机名和IP的映射关系 /etc/hosts
			######注意######如果你们公司是租用的服务器或是使用的云主机(如华为用主机、阿里云主机等)
			/etc/hosts里面要配置的是内网IP地址和主机名的映射关系	
		4.关闭防火墙
		5.ssh免登陆
		6.安装JDK,配置环境变量等
		集群规划:
			主机名		IP				安装的软件					运行的进程
			mini1	192.168.1.200	jdk、hadoop					NameNode、DFSZKFailoverController(zkfc)
			mini2	192.168.1.201	jdk、hadoop					NameNode、DFSZKFailoverController(zkfc)
			mini3	192.168.1.202	jdk、hadoop					ResourceManager 
			mini4	192.168.1.203	jdk、hadoop					ResourceManager
			mini5	192.168.1.205	jdk、hadoop、zookeeper		DataNode、NodeManager、JournalNode、QuorumPeerMain
			mini6	192.168.1.206	jdk、hadoop、zookeeper		DataNode、NodeManager、JournalNode、QuorumPeerMain
			mini7	192.168.1.207	jdk、hadoop、zookeeper		DataNode、NodeManager、JournalNode、QuorumPeerMain
			
		说明:
			1.在hadoop2.0中通常由两个NameNode组成,一个处于active状态,另一个处于standby状态。Active NameNode对外提供服务,而Standby NameNode则不对外提供服务,仅同步active namenode的状态,以便能够在它失败时快速进行切换。
			hadoop2.0官方提供了两种HDFS HA的解决方案,一种是NFS,另一种是QJM。这里我们使用简单的QJM。在该方案中,主备NameNode之间通过一组JournalNode同步元数据信息,一条数据只要成功写入多数JournalNode即认为写入成功。通常配置奇数个JournalNode
			这里还配置了一个zookeeper集群,用于ZKFC(DFSZKFailoverController)故障转移,当Active NameNode挂掉了,会自动切换Standby NameNode为standby状态
			2.hadoop-2.2.0中依然存在一个问题,就是ResourceManager只有一个,存在单点故障,hadoop-2.6.4解决了这个问题,有两个ResourceManager,一个是Active,一个是Standby,状态由zookeeper进行协调
		安装步骤:
			1.安装配置zooekeeper集群(在hadoop05上)
				1.1解压
					tar -zxvf zookeeper-3.4.5.tar.gz -C /home/hadoop/app/
				1.2修改配置
					cd /home/hadoop/app/zookeeper-3.4.5/conf/
					cp zoo_sample.cfg zoo.cfg
					vim zoo.cfg
					修改:dataDir=/home/hadoop/app/zookeeper-3.4.5/tmp
					在最后添加:
					server.1=hadoop05:2888:3888
					server.2=hadoop06:2888:3888
					server.3=hadoop07:2888:3888
					保存退出
					然后创建一个tmp文件夹
					mkdir /home/hadoop/app/zookeeper-3.4.5/tmp
					echo 1 > /home/hadoop/app/zookeeper-3.4.5/tmp/myid
				1.3将配置好的zookeeper拷贝到其他节点(首先分别在hadoop06、hadoop07根目录下创建一个hadoop目录:mkdir /hadoop)
					scp -r /home/hadoop/app/zookeeper-3.4.5/ hadoop06:/home/hadoop/app/
					scp -r /home/hadoop/app/zookeeper-3.4.5/ hadoop07:/home/hadoop/app/
					
					注意:修改hadoop06、hadoop07对应/hadoop/zookeeper-3.4.5/tmp/myid内容
					hadoop06:
						echo 2 > /home/hadoop/app/zookeeper-3.4.5/tmp/myid
					hadoop07:
						echo 3 > /home/hadoop/app/zookeeper-3.4.5/tmp/myid
			
			2.安装配置hadoop集群(在hadoop00上操作)
				2.1解压
					tar -zxvf hadoop-2.6.4.tar.gz -C /home/hadoop/app/
				2.2配置HDFS(hadoop2.0所有的配置文件都在$HADOOP_HOME/etc/hadoop目录下)
					#将hadoop添加到环境变量中
					vim /etc/profile
					export JAVA_HOME=/usr/java/jdk1.7.0_55
					export HADOOP_HOME=/hadoop/hadoop-2.6.4
					export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin
					
					#hadoop2.0的配置文件全部在$HADOOP_HOME/etc/hadoop下
					cd /home/hadoop/app/hadoop-2.6.4/etc/hadoop
					
					2.2.1修改hadoo-env.sh
						export JAVA_HOME=/home/hadoop/app/jdk1.7.0_55
		###############################################################################
						
		2.2.2修改core-site.xml
		<configuration>
		<!-- 指定hdfs的nameservice为ns1 -->
		<property>
		<name>fs.defaultFS</name>
		<value>hdfs://bi/</value>
		</property>
		<!-- 指定hadoop临时目录 -->
		<property>
		<name>hadoop.tmp.dir</name>
		<value>/home/hadoop/app/hdpdata/</value>
		</property>
		<!-- 指定zookeeper地址 -->
		<property>
		<name>ha.zookeeper.quorum</name>
		<value>mini5:2181,mini6:2181,mini7:2181</value>
		</property>
		</configuration>
		###############################################################################
						
		2.2.3修改hdfs-site.xml
		<configuration>
		<!--指定hdfs的nameservice为bi,需要和core-site.xml中的保持一致 -->
		<property>
		<name>dfs.nameservices</name>
		<value>bi</value>
		</property>
		<!-- bi下面有两个NameNode,分别是nn1,nn2 -->
		<property>
		<name>dfs.ha.namenodes.bi</name>
		<value>nn1,nn2</value>
		</property>
		<!-- nn1的RPC通信地址 -->
		<property>
		<name>dfs.namenode.rpc-address.bi.nn1</name>
		<value>mini1:9000</value>
		</property>
		<!-- nn1的http通信地址 -->
		<property>
		<name>dfs.namenode.http-address.bi.nn1</name>
		<value>mini1:50070</value>
		</property>
		<!-- nn2的RPC通信地址 -->
		<property>
		<name>dfs.namenode.rpc-address.bi.nn2</name>
		<value>mini2:9000</value>
		</property>
		<!-- nn2的http通信地址 -->
		<property>
		<name>dfs.namenode.http-address.bi.nn2</name>
		<value>mini2:50070</value>
		</property>
		<!-- 指定NameNode的edits元数据在JournalNode上的存放位置 -->
		<property>
		<name>dfs.namenode.shared.edits.dir</name>
		<value>qjournal://mini5:8485;mini6:8485;mini7:8485/bi</value>
		</property>
		<!-- 指定JournalNode在本地磁盘存放数据的位置 -->
		<property>
		<name>dfs.journalnode.edits.dir</name>
		<value>/home/hadoop/journaldata</value>
		</property>
		<!-- 开启NameNode失败自动切换 -->
		<property>
		<name>dfs.ha.automatic-failover.enabled</name>
		<value>true</value>
		</property>
		<!-- 配置失败自动切换实现方式 -->
		<property>
		<name>dfs.client.failover.proxy.provider.bi</name>
		<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
		</property>
		<!-- 配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行-->
		<property>
		<name>dfs.ha.fencing.methods</name>
		<value>
		sshfence
		shell(/bin/true)
		</value>
		</property>
		<!-- 使用sshfence隔离机制时需要ssh免登陆 -->
		<property>
		<name>dfs.ha.fencing.ssh.private-key-files</name>
		<value>/home/hadoop/.ssh/id_rsa</value>
		</property>
		<!-- 配置sshfence隔离机制超时时间 -->
		<property>
		<name>dfs.ha.fencing.ssh.connect-timeout</name>
		<value>30000</value>
		</property>
		</configuration>
		###############################################################################
					
		2.2.4修改mapred-site.xml
		<configuration>
		<!-- 指定mr框架为yarn方式 -->
		<property>
		<name>mapreduce.framework.name</name>
		<value>yarn</value>
		</property>
		</configuration>	
		###############################################################################
					
		2.2.5修改yarn-site.xml
		<configuration>
		<!-- 开启RM高可用 -->
		<property>
		<name>yarn.resourcemanager.ha.enabled</name>
		<value>true</value>
		</property>
		<!-- 指定RM的cluster id -->
		<property>
		<name>yarn.resourcemanager.cluster-id</name>
		<value>yrc</value>
		</property>
		<!-- 指定RM的名字 -->
		<property>
		<name>yarn.resourcemanager.ha.rm-ids</name>
		<value>rm1,rm2</value>
		</property>
		<!-- 分别指定RM的地址 -->
		<property>
		<name>yarn.resourcemanager.hostname.rm1</name>
		<value>mini3</value>
		</property>
		<property>
		<name>yarn.resourcemanager.hostname.rm2</name>
		<value>mini4</value>
		</property>
		<!-- 指定zk集群地址 -->
		<property>
		<name>yarn.resourcemanager.zk-address</name>
		<value>mini5:2181,mini6:2181,mini7:2181</value>
		</property>
		<property>
		<name>yarn.nodemanager.aux-services</name>
		<value>mapreduce_shuffle</value>
		</property>
		</configuration>
					
						
		2.2.6修改slaves(slaves是指定子节点的位置,因为要在hadoop01上启动HDFS、在hadoop03启动yarn,所以hadoop01上的slaves文件指定的是datanode的位置,hadoop03上的slaves文件指定的是nodemanager的位置)
		mini5
		mini6
		mini7
					2.2.7配置免密码登陆
						#首先要配置hadoop00到hadoop01、hadoop02、hadoop03、hadoop04、hadoop05、hadoop06、hadoop07的免密码登陆
						#在hadoop01上生产一对钥匙
						ssh-keygen -t rsa
						#将公钥拷贝到其他节点,包括自己
						ssh-coyp-id hadoop00
						ssh-coyp-id hadoop01
						ssh-coyp-id hadoop02
						ssh-coyp-id hadoop03
						ssh-coyp-id hadoop04
						ssh-coyp-id hadoop05
						ssh-coyp-id hadoop06
						ssh-coyp-id hadoop07
						#配置hadoop02到hadoop04、hadoop05、hadoop06、hadoop07的免密码登陆
						#在hadoop02上生产一对钥匙
						ssh-keygen -t rsa
						#将公钥拷贝到其他节点
						ssh-coyp-id hadoop03				
						ssh-coyp-id hadoop04
						ssh-coyp-id hadoop05
						ssh-coyp-id hadoop06
						ssh-coyp-id hadoop07
						#注意:两个namenode之间要配置ssh免密码登陆,别忘了配置hadoop01到hadoop00的免登陆
						在hadoop01上生产一对钥匙
						ssh-keygen -t rsa
						ssh-coyp-id -i hadoop00				
				
				2.4将配置好的hadoop拷贝到其他节点
					scp -r /hadoop/ hadoop02:/
					scp -r /hadoop/ hadoop03:/
					scp -r /hadoop/hadoop-2.6.4/ hadoop@hadoop04:/hadoop/
					scp -r /hadoop/hadoop-2.6.4/ hadoop@hadoop05:/hadoop/
					scp -r /hadoop/hadoop-2.6.4/ hadoop@hadoop06:/hadoop/
					scp -r /hadoop/hadoop-2.6.4/ hadoop@hadoop07:/hadoop/
					
					
					
		###注意:严格按照下面的步骤!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
				2.5启动zookeeper集群(分别在mini5、mini6、mini7上启动zk)
					cd /hadoop/zookeeper-3.4.5/bin/
					./zkServer.sh start
					#查看状态:一个leader,两个follower
					./zkServer.sh status
					
				2.6启动journalnode(分别在在mini5、mini6、mini7上执行)
					cd /hadoop/hadoop-2.6.4
					sbin/hadoop-daemon.sh start journalnode
					#运行jps命令检验,hadoop05、hadoop06、hadoop07上多了JournalNode进程
				
				2.7格式化HDFS
					#在mini1上执行命令:
					hdfs namenode -format
					#格式化后会在根据core-site.xml中的hadoop.tmp.dir配置生成个文件,这里我配置的是/hadoop/hadoop-2.6.4/tmp,然后将/hadoop/hadoop-2.6.4/tmp拷贝到hadoop02的/hadoop/hadoop-2.6.4/下。
					scp -r tmp/ hadoop02:/home/hadoop/app/hadoop-2.6.4/
					##也可以这样,建议hdfs namenode -bootstrapStandby
				
				2.8格式化ZKFC(在mini1上执行一次即可)
					hdfs zkfc -formatZK
				
				2.9启动HDFS(在mini1上执行)
					sbin/start-dfs.sh
				2.10启动YARN(#####注意#####:是在hadoop02上执行start-yarn.sh,把namenode和resourcemanager分开是因为性能问题,因为他们都要占用大量资源,所以把他们分开了,他们分开了就要分别在不同的机器上启动)
					sbin/start-yarn.sh
				
			到此,hadoop-2.6.4配置完毕,可以统计浏览器访问:
				http://hadoop00:50070
				NameNode 'hadoop01:9000' (active)
				http://hadoop01:50070
				NameNode 'hadoop02:9000' (standby)
			
			验证HDFS HA
				首先向hdfs上传一个文件
				hadoop fs -put /etc/profile /profile
				hadoop fs -ls /
				然后再kill掉active的NameNode
				kill -9 <pid of NN>
				通过浏览器访问:http://192.168.1.202:50070
				NameNode 'hadoop02:9000' (active)
				这个时候hadoop02上的NameNode变成了active
				在执行命令:
				hadoop fs -ls /
				-rw-r--r--   3 root supergroup       1926 2014-02-06 15:36 /profile
				刚才上传的文件依然存在!!!
				手动启动那个挂掉的NameNode
				sbin/hadoop-daemon.sh start namenode
				通过浏览器访问:http://192.168.1.201:50070
				NameNode 'hadoop01:9000' (standby)
			
			验证YARN:
				运行一下hadoop提供的demo中的WordCount程序:
				hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.4.1.jar wordcount /profile /out
			
			OK,大功告成!!!
			
					
				
		测试集群工作状态的一些指令 :
		bin/hdfs dfsadmin -report	 查看hdfs的各节点状态信息
		bin/hdfs haadmin -getServiceState nn1		 获取一个namenode节点的HA状态
		sbin/hadoop-daemon.sh start namenode  单独启动一个namenode进程
		./hadoop-daemon.sh start zkfc   单独启动一个zkfc进程
		
-----------------------------------------------------------------------------------------------------
hadoop federation:
		
			
				
			
			
	
			
		
	
 
	
			
	
	 
		
		
		
		
	
	
	
	


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31506529/viewspace-2213488/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: mysql 简单安装
请登录后发表评论 登录
全部评论

注册时间:2017-11-22

  • 博文量
    106
  • 访问量
    186398