Linux(CentOS)上的分布式Hadoop安装搭建(hadoop2.7.7为例)

Linux(CentOS)上的Hadoop安装


  • 注意:执行以下步骤我们都用非root账号,不要问为什么不用root账号,我拒绝回答-。-,非root账号是没有在根目录/下rwx的权限的,那么怎么用他执行我们需要的命令呢,在每条命令前加上sudo;当然友情提示

    • 如果你是在装CentOS时,创建的非root账号,勾上管理员权限的小勾就可以使用sudo -f 文件名
    • 但是如果你是自己用命令新建的用户,要去/etc/sudoers文件中加上一段
      • 注意:该文件只能用visudo命令打开
      • 在root ALL = (ALL)ALL行下加上(比如新建用户名为tutu)
        • tutu ALL=(ALL) ALL
  • sudo的具体操作参考这篇博客:https://www.cnblogs.com/henrylinux/p/9746835.html

  • 以下操作用的用户名是centos

1. hadoop环境安装

1.1 安装jdk
  • 1.注意:如果你安装的CentOS不是Min版本,可能Linux自带jdk,你需要先卸载它
    	1.1	查询系统是否安装了jdk命令:yum list installed | grep java
    	1.2	卸载以java开头:比如sudo yum remove java-1.8.0-openjdk...
    	1.3	如果卸载不了,查看是否在后台运行,强制杀死进程,再执行1.2步骤
    	
    a)下载jdk-8u65-linux-x64.tar.gz(以你安装的linux版本为准,如果你安装的是32位,那么jdk也下载32位的,下载网站:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html;这里我推荐在window上进行下载,然后用SecureCRT上传到Linux)
    		b)tar开
    			$>su centos ; 
    			$>cd ~
    			$>mkdir downloads
    			$>cp /mnt/hdfs/downloads/bigdata/jdk-8u65-linux-x64.tar.gz ~/downloads   #这里是把下载的jdk移到downloads文件夹中
    			$>tar -xzvf jdk-8u65-linux-x64.tar.gz
    		c)创建/soft文件夹,把soft的拥有权设置为centos用户
    			$>sudo mkdir /soft
    			$>sudo chown centos:centos /soft
    		d)移动tar开的文件到/soft下
    			$>mv ~/downloads/jdk-1.8.0_65 /soft/
      	e)创建符号连接,相当window中的快捷方式
    			$>ln -s /soft/jdk-1.8.0_65 /soft/jdk
    		f)验证jdk安装是否成功
    			$>cd /soft/jdk/bin
    			$>./java -version
    
1.2 配置jdk环境变量
  • 1.编辑/etc/profile;这里用nano编辑文件,你也可以vi
    		$>sudo nano /etc/profile
    		...
    		export JAVA_HOME=/soft/jdk
    		export PATH=$PATH:$JAVA_HOME/bin
    2.使环境变量即刻生效
    		$>source /etc/profile
    	
    3.进入任意目录下,测试是否ok
    		$>cd ~
    		$>java -version #命令有返回版本信息,则成功
    
2. 安装Hadoop

2.1 安装hadoo
  • 1.安装hadoop
    		a)下载hadoop-2.7.3.tar.gz
    		b)tar开
    			$>su centos ; cd ~
    			$>cp /mnt/hdfs/downloads/bigdata/hadoop-2.7.3.tar.gz ~/downloads
    			$>tar -xzvf hadoop-2.7.3.tar.gz
    		c)无(如果没有创建soft文件,参照上面步骤)
    		d)移动tar开的文件到/soft下
    			$>mv ~/downloads/hadoop-2.7.3 /soft/
    		e)创建符号连接
    			$>ln -s /soft/hadoop-2.7.3 /soft/hadoop
    		f)验证jdk安装是否成功
    			$>cd /soft/hadoop/bin
    			$>./hadoop version #命令有返回版本信息,则成功
    	
    	2.配置hadoop环境变量
    		$>sudo nano /etc/profile
    		...
    		export JAVA_HOME=/soft/jdk
    		exprot PATH=$PATH:$JAVA_HOME/bin
    
    		export HADOOP_HOME=/soft/hadoop
    		export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
    	
    	3.生效
    		$>source /etc/profile
       	4.执行 hadoop version 验证环境变量是否生效
    
2.2 配置hadoop环境变量
  • 让命令行显示完全路径
  1.编辑profile文件,添加环境变量PS1
  	[/etc/profile]
  	export PS1='[\u@\h `pwd`]\$'

  2.source	
  	$>source /etc/profile
  • standalone(local)单机模式

    • 什么都不用做了,上面的安装步骤就OK ! 不需要启用单独的hadoop进程。
  • 伪分布模式

    2.Pseudodistributed mode
    	a)进入${HADOOP_HOME}/etc/hadoop目录
    	b)编辑core-site.xml
    		<?xml version="1.0"?>
    		<configuration>
    			<property>
    				<name>fs.defaultFS</name>
    				<value>hdfs://localhost/</value>
    			</property>
    		</configuration>
    	c)编辑hdfs-site.xml
    		<?xml version="1.0"?>
    		<configuration>
    			<property>
    				<name>dfs.replication</name>
    				<value>1</value>
    			</property>
    		</configuration>
    	d)编辑mapred-site.xml
    		注意:该文件如果没有,执行 cp mapred-site.xml.template mapred-site.xml
    		<?xml version="1.0"?>
    		<configuration>
    			<property>
    				<name>mapreduce.framework.name</name>
    				<value>yarn</value>
    			</property>
    		</configuration>
    	e)编辑yarn-site.xml
    		<?xml version="1.0"?>
    		<configuration>
    			<property>
    				<name>yarn.resourcemanager.hostname</name>
    				<value>localhost</value>
    			</property>
    			<property>
    				<name>yarn.nodemanager.aux-services</name>
    				<value>mapreduce_shuffle</value>
    			</property>
    		</configuration>
    
    	f)配置SSH
    		1)检查是否安装了ssh相关软件包(openssh-server + openssh-clients + openssh)
    			$yum list installed | grep ssh
    
    		2)检查是否启动了sshd进程
    			$>ps -Af | grep sshd
    		
    		3)在client侧生成公私秘钥对。
    			$>ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
    		
    		4)生成~/.ssh文件夹,里面有id_rsa(私钥) + id_rsa.pub(公钥)(注意.ssh文件夹的权限要是700,该文件是隐藏文件,用ls -al命令查看)
    
    		5)追加公钥到~/.ssh/authorized_keys文件中(文件名、位置固定)
    			$>cd ~/.ssh
    			$>cat id_rsa.pub >> authorized_keys
    		
    		6)修改authorized_keys的权限为644.
    			$>chmod 644 authorized_keys
    		
    		7)测试
    			$>ssh localhost
    
    • 配置伪分布式环境,执行并启动验证

    •   - 配置hadoop,使用符号连接的方式,让三种配置形态共存。
        	1.创建三个配置目录,内容等同于hadoop目录
        		${hadoop_home}/etc/local
        		${hadoop_home}/etc/pesudo
        		${hadoop_home}/etc/full
        		命令:
        			$>cd /soft/hadoop/etc
        			$>cp -r hadoop/ local
        			$>cp -r hadoop/ pesudo
        			$>cp -r hadoop/ full
        			$>rm -rf hadoop
        		
        	2.创建符号连接
        		$>ln -s full/ pesudo
        	
        	3.对hdfs进行格式化
        		$>hadoop namenode -format
        
        	4.修改hadoop配置文件,手动指定修改JAVA_HOME环境变量
        		[${hadoop_home}/etc/hadoop/hadoop-env.sh]
        		...
        		export JAVA_HOME=/soft/jdk
        		...
        
        	5.启动hadoop的所有进程
        		$>start-all.sh
        
        	6.启动完成后,出现以下进程
        		$>jps
        			33702 NameNode
        			33792 DataNode
        			33954 SecondaryNameNode
        
        			29041 ResourceManager
        			34191 NodeManager
        
        	7.查看hdfs文件系统
        		$>hdfs dfs -ls /
        	
        	8.创建目录
        		$>hdfs dfs -mkdir -p /user/centos/hadoop
        
        	9.通过webui查看hadoop的文件系统
        		http://localhost:50070/
        
        	10.停止hadoop所有进程
        		$>stop-all.sh
        
        	11.centos防火墙操作
        		[cnetos 6.5之前的版本]
        		$>sudo service firewalld stop		//停止服务
        		$>sudo service firewalld start		//启动服务
        		$>sudo service firewalld status		//查看状态
        
        		[centos7]
        		$>sudo systemctl enable firewalld.service	//"开机启动"启用
        		$>sudo systemctl disable firewalld.service	//"开机自启"禁用
        		$>sudo systemctl start firewalld.service	//启动防火墙
        		$>sudo systemctl stop firewalld.service		//停止防火墙
        		$>sudo systemctl status firewalld.service	//查看防火墙状态
        
        		[开机自启]
        		$>sudo chkconfig firewalld	on				//"开启自启"启用
        		$>sudo chkconfig firewalld	off				//"开启自启"禁用
        
        
      
  • 完全分布式安装

    • 修改主机名

      • $>sudo nano /etc/hostname
        s201
      • $>sudo nano /etc/hosts
        127.0.0.1 localhost
        192.168.231.201 s201
        192.168.231.202 s202
        192.168.231.203 s203
        192.168.231.204 s204
      • 重启生效
    • 准备结点服务器,完全分布式

      • 克隆3台client(centos7)
        右键centos-7–>管理->克隆-> … -> 完整克隆

      • 启用客户机共享文件夹。

        • 编辑虚拟机设置–>选项–>共享文件夹–>总是启用
        • 在这里插入图片描述
        • 四个Linux共享同一个文件夹
      • 启动client

      • 修改hostname文件,分别为s202,s203,204
        [/etc/hostname]
        s202

      • 修改ip地址文件(有些系统是ifcfg-ens33)动态ip修改成静态ip

        • [/etc/sysconfig/network-scripts/ifcfg-ethxxxx]

          #BOOTPROTO修改为none
          #IPV开头的yes全修改成no
          #没有的加上,多了的不管
          #GATEWAY和DNS写网关
          #IPADDR为指定静态IP
          TYPE="Ethernet"
          BOOTPROTO="none"
          DEFROUTE="yes"
          IPV4_FAILURE_FATAL="no"
          IPV6INIT="no"
          IPV6_AUTOCONF="no"
          IPV6_DEFROUTE="no"
          IPV6_FAILURE_FATAL="no"
          IPV6_ADDR_GEN_MODE="stable-privacy"
          NAME="ens33"
          UUID="3fb8330c-d6af-413f-986b-ec13e827df69"
          DEVICE="ens33"
          ONBOOT="yes"
          PEERDNS="yes"
          PEERROUTES="yes"
          IPV6_PEERDNS="no"
          IPV6_PEERROUTES="no"
          IPADDR="192.168.231.201"
          GATEWAY="192.168.231.2"
          DNS="192.168.231.2"
          
          

          IPADDR=192.168.231.201 分别为201,202,,203,204

      • 重启网络服务
        $>sudo service network restart

      • 修改/etc/resolv.conf文件
        nameserver 192.168.231.2
        ​ nameserver 8.8.8.8
        ​ nameserver 8.8.4.4

    • 准备完全分布式主机的ssh

    • 删除所有主机上的/home/centos/.ssh/*

    • 在s201主机上生成密钥对

      $>ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
      
    • 将s201的公钥文件id_rsa.pub远程复制到202 ~ 204主机上。
      并放置/home/centos/.ssh/authorized_keys

      $>cd ~/home/tuyouxian/.ssh/
      $>scp id_rsa.pub centos@s201:/home/centos/.ssh/authorized_keys
      $>scp id_rsa.pub centos@s202:/home/centos/.ssh/authorized_keys
      $>scp id_rsa.pub centos@s203:/home/centos/.ssh/authorized_keys
      $>scp id_rsa.pub centos@s204:/home/centos/.ssh/authorized_keys
      
    • 配置完全分布式(${hadoop_home}/etc/hadoop/)

      修改主机S201上的hadoop配置文件
      [core-site.xml]
      	<?xml version="1.0" encoding="UTF-8"?>
        	<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
        		<configuration>
        				<property>
        						<name>fs.defaultFS</name>
        						<value>hdfs://s201/</value>
        				</property>
        		</configuration>
      [hdfs-site.xml]
        	<?xml version="1.0" encoding="UTF-8"?>
        	<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
        		<configuration>
        				<property>
        						<name>dfs.replication</name>
        						<value>3</value>
        				</property>
        		</configuration>
        		
        		[mapred-site.xml]
        			不变
        		
      [yarn-site.xml]
        	<?xml version="1.0"?>
        	<configuration>
        				<property>
        					<name>yarn.resourcemanager.hostname</name>
        					<value>s201</value>
        				</property>
        				<property>
        					<name>yarn.nodemanager.aux-services</name>
        					<value>mapreduce_shuffle</value>
        				</property>
        	</configuration>
        	
      [slaves]
        		s202
        		s203
        		s204
        	
      [hadoop-env.sh]
        		...
        		export JAVA_HOME=/soft/jdk
        		...
      
    • 三副结点服务器的配置

         	5.分发配置
        		$>cd /soft/hadoop/etc/
        		$>scp -r full centos@s202:/soft/hadoop/etc/
        		$>scp -r full centos@s203:/soft/hadoop/etc/
        		$>scp -r full centos@s204:/soft/hadoop/etc/
        	
        	6.删除符号连接
        		$>cd /soft/hadoop/etc
        		$>rm hadoop
        		$>ssh s202 rm /soft/hadoop/etc/hadoop
        		$>ssh s203 rm /soft/hadoop/etc/hadoop
        		$>ssh s204 rm /soft/hadoop/etc/hadoop
        	
        	7.创建符号连接
        		$>cd /soft/hadoop/etc/
        		$>ln -s full hadoop
        		$>ssh s202 ln -s /soft/hadoop/etc/full /soft/hadoop/etc/hadoop
        		$>ssh s203 ln -s /soft/hadoop/etc/full /soft/hadoop/etc/hadoop
        		$>ssh s204 ln -s /soft/hadoop/etc/full /soft/hadoop/etc/hadoop
        	
        	8.删除临时目录文件
        		$>cd /tmp
        		$>rm -rf hadoop-centos
        		$>ssh s202 rm -rf /tmp/hadoop-centos
        		$>ssh s203 rm -rf /tmp/hadoop-centos
        		$>ssh s204 rm -rf /tmp/hadoop-centos
        	
        	9.删除hadoop日志
        		$>cd /soft/hadoop/logs
        		$>rm -rf *
        		$>ssh s202 rm -rf /soft/hadoop/logs/*
        		$>ssh s203 rm -rf /soft/hadoop/logs/*
        		$>ssh s204 rm -rf /soft/hadoop/logs/*
        	
        	10.格式化文件系统
        		$>hadoop namenode -format
        	
        	11.启动hadoop进程
        		$>start-all.sh
        	12.各个结点用jps命令查看启动是否成功
        		s201输入jps命令
        			8770 ResourceManager
      			8850 Jps
      			8425 NameNode
      			8621 SecondaryNameNode
      		s202输入jps命令
      			11281 NodeManager
      			11427 Jps
      			11165 DataNode
      		s203输入jps命令
      			10817 NodeManager
      			10932 Jps
      			10701 DataNode
             	s204输入jps命令
             		11745 Jps
      			11507 DataNode
      			11621 NodeManager
      	13.结束hadoop进程 
      		stop-all.sh
      	14.写脚本方便以后的操作,待续...
      	脚本链接:https://tuyouxianblogs.blog.csdn.net/article/details/99613299