Hadoop2.x完全分布式安装

前言

    关于hadoop的版本选择使得我纠结了半天,最终找到了出路(因为我不知道哪个版本才是稳定版本,看网络视频有1.2的2.6的,但是到官网看2.6.1的修改了n个bug,而且hadoop还有很多版本有hadoop原生版本,CHD版本,....):

(1)进入hadoop官网 http://hadoop.apache.org/, 然后选择左侧的下载链接Download Hadoop 

(2)在跳转的页面的Gettting Started一栏下面有(Download Hadoop from the release page.)链接,选中进入

http://hadoop.apache.org/releases.html页面,往下有 All previous releases of Hadoop are available from the Apache release archive site.选中绿色链接即可跳转到所有版本的归档页面,里面有stable,stable2文件夹,指向了稳定版本下载资源!

如下是本人的从头到尾亲自搭建的整个过程和搭建过程遇到的问题的总结:

 

Hadoop完全分布式安装:
此处配置两台机器:
master    :     192.168.0.104 机器名hadoop1
slave1     :     192.168.0.105 机器名hadoop2
slave2     :     192.168.0.106 机器名hadoop3
 
zookeeper为hadoop1、hadoop2、hadoop3 (zookeeper必须配置为奇数个节点)
Zookeeper的安装见Zookeeper集群配置一节
 
/*************************安装前准备************************/
(1)修改主机ip
进入IP网卡目录:cd /etc/sysconfig/network-scripts/
列举所有网卡信息:ll 
修改对应网卡ip信息(列举出来的第一个网卡,此处为ifcfg-enp0s3):vim ifcfg-enp0s3
修改对应IP信息:
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
IPADDR=192.168.0.104
NETMASK=255.255.255.0
GATEWAY=192.168.0.1
DNS1=8.8.8.8
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=enp0s3
UUID=4c6fdf84-30f6-4105-bc90-5bbedaa388fd
DEVICE=enp0s3
ONBOOT=yes
注意如果DNS1配置无效,则需要直接修改/etc/resolv.cof,添加如下:
nameserver 8.8.8.8
当然我这里配置的是8.8.8.8是因为我是链接的wifi,自动获取DNS,所以填写的一个互联网通用DNS
(2)修改主机名
修改主机名有两种方法:
方法一:在centos中直接使用hostnamectl命令: hostnamectl set-hostname hadoop1
方法二:直接修改/etc/hostname,清空后直接输入主机名:hadoop1
最后,重启:reboot
(3)设置本地时区
如果时间不与网络时间同步,可以通过ntp服务同步网络时间:
# yum install -y ntp
# ntpdate cn.pool.ntp.org 
 
由于默认的时区不是东八区,也就是不是上海时间,我们必须设置为上海时间
查看本地时间:date           发现时间不正确,时区不对
修改本地时间:cp /usr/share/zoneinfo/Asia/Shanghai /etc/ localtime            (注意localtime为文件)
查看本机时间:date           发现本机时间已经修正
(4)修改hosts域名映射
vim /etc/hosts
输入:
192.168.0.104    hadoop1
192.168.0.105    hadoop2
(5)安装JDK
首先,新建/home/Downloads目录,在该目录下下载jdk:
wget  http://download.oracle.com/otn-pub/java/jdk/8u171-b11/512cd62ec5174c3487ac17c61aaa89e8/jdk-8u171-linux-x64.tar.gz?AuthParam=1529289142_b44eaf4dfce7e356ff886d30efe7aa48
重命名为 /jdk-8u171-linux-x64.tar.gz
其次,拷贝 /jdk-8u171-linux-x64.tar.gz到/opt目录: cp  /jdk-8u171-linux-x64.tar.gz /opt,并解压进去
再次,修改环境变量:vim /etc/profile,增加如下内容:
export JAVA_HOME=/opt/jdk1.8.0_171
export JRE_HOME=/opt/jdk1.8.0_171/jre
export CLASSPATH=${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
最后,使得环境变量生效:source /etc/profile
验证jdk是否安装成功,在终端输入:java -version即可
 
 
/*************************Hadoop完全分布式安装************************/
注意:  
a. Hadoop要求所有 机器上Hadoop的部署目录结构要求相同, 并且都有一个相同的用户名账户
b. Hadoop安装过程中需要关闭防火墙和SElinux,否则会出现异常
 
(1)禁用防火墙和SElinux
关闭防火墙:
systemctl stop firewalld
systemctrl disable firewalld
关闭SElinux:
vim /etc/selinux/config
修改SELINUX=disbabled
修改后,重启机器生效
(2)创建Hadoop用户名和组
切换到root目录,执行添加用户操作:
adduser hadoop
passwd hadoop
输入两次密码即可,默认hadoop用户所在组也是hadoop组
 
 
(3)ssh无秘钥登录
安装ssh和rsync
yum -y install ssh
yum -y install rsync
 
说明:
     Hadoop运行过程中需要管理远端Hadoop守护进程,在Hadoop启动以后,NameNode是通过SSH(Secure Shell)来启动和停止各个DataNode上的各种守护进程的。这就必须在节点之间执行指令的时候是不需要输入密码的形式,故我们需要配置SSH运用无密码公钥认证的形式,这样NameNode使用SSH无密码登录并启动DataName进程,同样原理,DataNode上也能使用SSH无密码登录到 NameNode,SSH之所以能够保证安全,原因在于它采用了公钥加密:
(1)远程主机收到用户的登录请求,把自己的公钥发给用户。
(2)用户使用这个公钥,将登录密码加密后,发送回来。
(3)远程主机用自己的私钥,解密登录密码,如果密码正确,就同意用户登录。
 
切换到hadoop用户,在用户目录下建立.ssh文件夹
su hadoop
mkdir ~/.ssh/
 
配置hadoop1(master)机器无密码登录所有slave机器:
在master节点执行以下命令:
ssh-keygen -t rsa 一路回车
生成的密钥对:id_rsa(私钥)和id_rsa.pub(公钥),默认存储在”/home/用户名/.ssh”目录下。查看“/home/用户名/”下是否有“.ssh”文件夹,且“.ssh”文件下是否有两个刚生产的无密码密钥对(id_rsa和id_rsa.pub私钥和公钥)。
 
设置权限,否则ssh免秘钥登录无效:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/*
 
将~/.ssh/下的id_rsa.pub的公钥作为认证发放到hadoop1,hadoop2下的~/.ssh/下:
ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop1
ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop2
期间要求输入hadoop的用户密码回车即可。
 
测试,在hadoop1上登录其他机器都不需要密码:ssh hadoop2
如果需要密码说明文件夹权限和文件权限设置有问题,分别登录到对应机器,切换到hadoop用户下(必须创建),重新设置权限即可(见chomd 700 ~/.ssh)!
 
(4)Hadoop环境变量配置
解压hadoop安装包到/opt目录下,并使用root用户将文件夹所有者设置为hadoop
tar -zxvf hadoop-2.9.1.tar.gz
chown -R hadoop:hadoop hadoop-2.9.1
 
最终配置如下:
export JAVA_HOME=/opt/jdk1.8.0_171
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
 
export HADOOP_HOME=/opt/hadoop-2.9.1
export HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop
export YARN_CONF_DIR=${HADOOP_HOME}/etc/hadoop
export HADOOP_COMMON_LIB_NATIVE_DIR=${HADOOP_HOME}/lib/native
export HADOOP_OPTS="-Djava.library.path=${HADOOP_HOME}/lib/native"
export PATH=${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin:$PATH
 
 
(5)配置hadoop-env.sh
修改/opt/hadoop-2.9.1/etc/hadoop/hadoop-env.sh的JAVA_HOME路径:
export JAVA_HOME=/opt/jdk1.8.0_171
注意,不能设置为默认值(无绝对路径)export JAVA_HOME=${JAVA_HOME},否则报错
 
使配置生效:
source hadoop-env.sh
 
查看hadoop环境变量配置是否生效:
hadoop version
 
(6)配置core-site.xml
切换到hadoop用户,创建hadoop临时目录:(hadoop有权限也会自动创建!)
        
        
                fs.defaultFS
                 hdfs://hadoop1:9000
        
        
        
         io.file.buffer.size
         131072
       
        
        
                hadoop.tmp.dir
                /home/hadoop/hadoop/tmp
        
(7)配置hdfs-site.xml
    
      dfs.namenode.secondary.http-address
      hadoop1:50090
    
   
    
      dfs.replication
       2
    
   
    
      dfs.datanode.data.dir
      file:/home/hadoop/hadoop/hdfs/data
    
   
       
   dfs.webhdfs.enabled
   true
 
(8)配置yarn-site.xml
 
     
     
          yarn.nodemanager.aux-services
          mapreduce_shuffle
     
     
     
           yarn.resourcemanager.address
           hadoop1:8032
     
     
     
          yarn.resourcemanager.scheduler.address
          hadoop1:8030
      
     
     
         yarn.resourcemanager.resource-tracker.address
         hadoop1:8031
     
     
     
         yarn.resourcemanager.admin.address
         hadoop1:8033
     
     
     
         yarn.resourcemanager.webapp.address
         hadoop1:8088
     
(9)配置mapred-site.xml
  
  
    mapreduce.framework.name
    yarn
  
  
  
          mapreduce.jobhistory.address
          hadoop1:10020
          MapReduce JobHistory Server IPC host:port
  
  
          mapreduce.jobhistory. webapp.address
          hadoop1:19888
  
 
(10)配置slaves文件,增加slave主机名
一般为两个,一行一个
hadoop2
hadoop3
 
(11)复制hadoop配置好的包到其他linux机器
scp -r /opt/hadoop-2.9.1 hadoop2:/opt    (hadoop)
scp -r /opt/jdk1.8.0_171 hadoop2:/opt      (jdk)
scp /etc/profile hadoop2:/etc                    (环境变量-root用户才可以)
修改权限:(用户:分组)
chown -R hadoop:hadoop /opt/hadoop-2.9.1
chown -R hadoop:hadoop /opt/jdk1.8.0_171
source /etc/profile
 
(12)格式化HDFS文件系统(普通用户hadoop)
执行:(profile文件设置了hadoop的bin目录为path,所以环境变量生效hdfs可用,如果不可用说明PATH添加的hadoop/bin或sbin无效)
hdfs namenode -format
格式化成功会有打印:
INFO common.Storage: Storage directory /home/hadoop/hadoop/hdfs/name has been successfully formatted.
 
(13)启动hadoop集群
在hadoop1上执行:
./start-all.sh
 
启动结果:
[hadoop@hadoop1 opt]$ start-all.sh
This script is Deprecated. Instead use start-dfs.sh and start-yarn.sh
Starting namenodes on [hadoop1]
hadoop1: starting namenode, logging to /opt/hadoop-2.9.1/logs/hadoop-hadoop-namenode-hadoop1.out
hadoop2: starting datanode, logging to /opt/hadoop-2.9.1/logs/hadoop-hadoop-datanode-hadoop2.out
Starting secondary namenodes [hadoop1]
hadoop1: starting secondarynamenode, logging to /opt/hadoop-2.9.1/logs/hadoop-hadoop-secondarynamenode-hadoop1.out
starting yarn daemons
starting resourcemanager, logging to /opt/hadoop-2.9.1/logs/yarn-hadoop-resourcemanager-hadoop1.out
hadoop2: starting nodemanager, logging to /opt/hadoop-2.9.1/logs/yarn-hadoop-nodemanager-hadoop2.out
 
(14)查看集群地址状态
在浏览器中直接输入hadoop1的集群地址: http://192.168.12.104:8088/
 
问题:解决Hadoop启动时,没有启动datanode,jps发现没有datanode线程;
原因:当我们使用hadoop namenode -format格式化namenode时,会在namenode数据文件夹(这个文件夹为自己配置文件中dfs.name.dir的路径)中保存一个current/VERSION文件(这里为:/home/hadoop/hadoop/hdfs/name/current),记录clusterID,datanode中保存的current/VERSION文件中的clustreID的值是上一次格式化保存的clusterID,这样,datanode和namenode之间的ID不一致!
解决
(1)如果dfs文件夹中没有重要的数据,那么删除dfs文件夹,再重新运行下列指令(${HADOOP_HOME}/tmp/,这里就是/home/hadoop/hadoop/tmp)
hadoop namenode -format
start-dfs.sh
(2)如果dfs文件中有重要的数据,那么在dfs/name目录下找到一个current/VERSION文件(/home/hadoop/hadoop/hdfs/name/current),记录clusterID并复制。然后dfs/data目录下找到一个current/VERSION文件(/home/hadoop/hadoop/hdfs/data/current),将其中clustreID的值替换成刚刚复制的clusterID的值即可
规范
每次运行结束Hadoop后,都应该关闭Hadoop.下次想重新运行Hadoop,不用再格式化namenode,直接启动Hadoop即可
 
日志排错:cat /opt/hadoop-2.9.1/logs/hadoop-hadoop-datanode-hadoop2. log
 
总结,新机器或增加的机器需要做的事:
(1)修改主机ip
(2)修改主机名称
(3)修改主机hosts
(4)修改主机北京时间(先同步网络时间,然后修改本地时区/etc/localtime)
(5)新建用户、设置用户密码
(6)安装ssh、rsync、vim、lrzsz
(7)ssh免秘钥登录设置
(8)修改用户目录下的.ssh目录700和.ssh目录下所有文件权限600
(9)root更改/opt所有者
(10)环境变量配置(scp拷贝jdk和hadoop的目录--scp安全拷贝)
(11)关闭防火墙禁和SElinux
 
 
Hbase安装配置:
(1)下载Hbase1.2.6.1稳定版本,解压到opt目录,并更改所有者为hadoop
tar -zxvf hbase-1.2.6.1.tar.gz
(2)配置hbase环境变量
编辑环境变量配置文件:vim /etc/profile增加如下两行:
export HBASE_HOME=/opt/hbase-1.2.6.1
export PATH=${HBASE_HOME}/bin:$PATH
使环境变量生效:
source /etc/profile
(3)配置hbase环境变量
编辑HBase的环境变量配置文件:vim hbase-env.sh
修改Jdk目录: 
export JAVA_HOME=/opt/jdk1.8.0_171
export HBASE_MANAGES_ZK=false   (这类使用单独的Zookeeper)
(4)修改HBASE配置文件
进入hbase配置文件目录:cd /opt/hbase-1.2.6.1/conf
输入:vim hbase-site.xml 根节点添加配置文件内容如下:
 
        
                
                
                hbase.rootdir  
                 hdfs://hadoop1:9000/hbase
          
        
                
                hbase.cluster.distributed
                true
        
        
                
                hbase.zookeeper.quorum
                hadoop1,hadoop2,hadoop3
            
        
                
                hbase.zookeeper.property.dataDir
                /home/hadoop/hbase/zookeeper
        
        
                

你可能感兴趣的:(大数据处理,大数据)