Hadoop2.5.0 搭建实录

Posted TiestoRay

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hadoop2.5.0 搭建实录相关的知识,希望对你有一定的参考价值。

目录:

  


第一步:准备相关材料

我是要在另一台新服务器上搭建ESXi,部署了5个虚拟机,用 vSphere Client 管理。(注:如果选择CD/DVD驱动器的时候,一直显示正在连接,则需要重启客户端)

这里我选用的是Cloudera公司的CDH版本,问题少一些,并且可以配套下载,避免遇到各种兼容问题。下载地址

  • CentOS-7-x86_64-Minimal-1511 。这个版本功能一应俱全,却不到1G
  • OpenJDK 1.7
  • hadoop-2.5.0-cdh5.3.6
  • hbase-0.98.6-cdh5.3.6
  • hive-0.13.1-cdh5.3.6
  • zookeeper-3.4.5-cdh5.3.6
  • sqoop-1.4.5-cdh5.3.6
  • Xshell(方便敲命令)
  • SecureFXPortable(方便从本地上传文件到虚拟机)

 


 

注:提前预览需要修改的相关文件

系统配置

  1. /etc/hostname
  2. /etc/hosts
  3. /etc/sysconfig/network-scripts/ifcfg-eno16777984

相关软件全放到/opt目录下,而且环境变量全在各自的安装目录配置文件中设定(也可以在~/.bashrc 中统一设置)

环境变量

  1. hadoop
    1.   /opt/hadoop-xx/etc/hadoop/hadoop-env.sh
    2.   /opt/hadoop-xx/etc/hadoop/yarn-env.sh
    3.   /opt/hadoop-xx/etc/hadoop/mapred-env.sh
  2. hbase
    1.   /opt/hbase-xx/conf/hbase-env.sh
  3. hive
    1.   /opt/hive-xx/conf/hive-env.sh
  4. sqoop
    1.   /opt/sqoop-xx/conf/sqoop-env.sh

配置文件

  1. hadoop
    1.   /opt/hadoop-xx/etc/hadoop/slaves
    2.   /opt/hadoop-xx/etc/hadoop/core-site.xml
    3.   /opt/hadoop-xx/etc/hadoop/hdfs-site.xml
    4.   /opt/hadoop-xx/etc/hadoop/mapred-site.xml
    5.   /opt/hadoop-xx/etc/hadoop/yarn-site.xml 
  2. hbase
    1.   /opt/hbase-xx/conf/hbase-site.xml
    2.   /opt/hbase-xx/conf/backup-masters
    3.   /opt/hbase-xx/conf/regionservers
  3. zookeeper
    1.   /opt/zookeeper-xx/conf/zoo.cfg
    2.   在指定的目录 dataDir下 创建文件myid
  4. hive
    1.   /opt/hive-xx/conf/hive-site.xml
  5. sqoop
    1.   /opt/sqoop-xx/bin/configure-sqoop

  


 

第二步:虚拟机环境搭建

  1. 使用 vSphere Client 创建虚拟机并指定自己下载的CentOS文件,先不设置网络,启动。
  2. 用root用户登录,然后通过修改 /etc/sysconfig/network-scripts/ifcfg-enoxxxxxx 文件设置桥接模式网络,具体参照 CentOS7网卡设置为桥接模式静态IP配置方法详解
  3. 修改 /etc/hostname 
  4. 修改 /etc/hosts
    192.168.0.155 NameNode1
    192.168.0.156 NameNode2
    192.168.0.157 DataNode1
    192.168.0.158 DataNode2
    192.168.0.159 DataNode3
    127.0.0.1     localhost  #这个必须要有

     

节点配置图 

 


 

第三步:用户信息

为了以后的模块化管理,打算hadoop,hbase,hive等等都单独建用户

因为这5台机器创建用户,配置权限等的操作是一样的,我们要不就是在五个机器上都敲一遍命令,要不就是在一台机器上配完了再把文件复制过去,都比较繁琐。

因为我用的是Xshell,使用 【Alt + t , k】或者【工具】->【发送键输入到所有会话】,这样只要在一个会话中输入命令,所有打开的会话都会执行,就像是同时在这5台机器上敲命令一样。

su  #使用root用户
useradd -m hadoop -s  /bin/bash  #用同样方式创建hbase,hive,zookeeper,sqoop用户
passwd hadoop   #给用户设置密码
visudo  #给用户设定权限  :98  在98行新加hadoop的权限即可

接下来就是安装SSH、配置SSH无密码登陆

首先更新一下系统软件

yum upgrade

 

设置本机公钥、私钥

cd ~/.ssh/ # 若没有该目录,请先执行一次 mkdir ~/.ssh

ssh-keygen -t rsa #一路回车

cat id_rsa.pub >> authorized_keys # 将公钥加入服务器

chmod 600 ./authorized_keys # 修改文件权限

-----------------------------------如果是非root用户,下面这一步必须要做----------------------------------------------------

chmod 700 ~/.ssh   #修改文件夹权限  mkdir生成的文件夹默认是775,必须改成700;用ssh localhost生成的文件夹也可以

上面介绍的SSH免密登录本机的,而我们的登录关系是这样的 

所以  还要分别赋予公钥

  1. 将NameNode1,NameNode2的公钥分别加入对方的授权文件
  2. 将NameNode1的公钥分别加入DataNode1,DataNode2,DataNode3的授权文件
  3. 将NameNode2的公钥分别加入DataNode1,DataNode2,DataNode3的授权文件
  4. 更改这5个.ssh的文件夹以及authorized_keys的权限

  


 

第四步 安装、配置Java环境

使用yum安装java(每一台虚拟机)

sudo yum install java-1.7.0-openjdk java-1.7.0-openjdk-devel

默认安装路径: /usr/lib/jvm/java-1.7.0-openjdk 

然后在 /etc/environment 中保存JAVA_HOME变量

sudo vi /etc/environment

内容如下

 


 

第5步 Zookeeper安装配置

  1. 在一台机器解压安装zookeeper,并进入该安装目录
  2. 将conf/zoo_example.cfg 重命名为 zoo.cfg
    mv conf/zoo_example.cfg conf/zoo.cfg
  3. 编辑zoo.cfg内容
    tickTime=2000
    initLimit=10
    syncLimit=5
    dataDir=/home/hadoop/data/zookeeper
    dataLogDir=/home/hadoop/logs/zookeeper
    clientPort=2181
    server.0=NameNode1:2888:3888
    server.1=NameNode2:2888:3888
    server.2=DataNode1:2888:3888
    server.3=DataNode2:2888:3888
    server.4=DataNode3:2888:3888

     

  4. 通过scp 将安装包复制到其他机器
  5. 在每一个机器上的对应位置创建 dataDir和dataLogDir目录,并将zoo.cfg文件中 server. 后面对应的数字写入 dataDir下的myid文件。如 节点NameNode2就要这行一下命令
    echo 1 > /home/hadoop/data/zookeeper/myid
    #因为zoo.cfg文件中 NameNode2前面的数字是1 所以写入1即可
    #如果DataNode3的话就需要写4

     注:一定要创建这两个目录 否则报错【ERROR [main:QuorumPeerMain@86] - Invalid config, exiting abnormally

  6. 使用Zookeeper要注意各节点的时间一致性问题,需要做时间同步,这里暂且同步一次。最好参考这篇CentOS7 中使用NTP进行时间同步
    # sudo yum install ntpdate #如果没有安装ntpdate的话,需要先安装
    
    sudo ntpdate time.nist.gov
  7. 启动服务
    bin/zkServer.sh start
    

      

  8. 查看状态 (注意:/etc/hosts中必须要有 127.0.0.1 与 localhost的映射,否则zk之间无法连接
    bin/zkServer.sh status

     


 

第6步 Hadoop安装、配置

在/opt下面创建一个文件夹 software并更改用户组

cd /opt
sudo mkdir software
sudo chown -R hadoop:hadoop software

  然后所有大数据相关程序都放到这个文件夹中

  1. 在~/.bashrc 中定义 SOFTWARE_HOME
    export SOFTWARE_HOME=/opt/software
    

      

  2. cd到Hadoop安装目录的配置目录 /etc/hadoop 编辑hadoop-env.sh,定义HADOOP_HOME,HADOOP_PID_DIR,HADOOP_LOG_DIR
    export HADOOP_HOME=/opt/hadoop/hadoop-2.5.0-cdh5.3.6
    export HADOOP_PID_DIR=$SOFTWARE_HOME/data/hadoop/pid
    export HADOOP_LOG_DIR=$SOFTWARE_HOME/logs/hadoop
    

      

  3. 编辑yarn-env.sh 定义YARN_PID_DIR,YARN_LOG_DIR
    export YARN_LOG_DIR=$SOFTWARE_HOME/logs/yarn
    export YARN_PID_DIR=$SOFTWARE_HOME/data/yarn
    

      

  4. 编辑 mapred-env.sh,定义PID和Log目录
    export HADOOP_MAPRED_LOG_DIR=$SOFTWARE_HOME/logs/mapred
    export HADOOP_MAPRED_PID_DIR=$SOFTWARE_HOME/data/mapred
    

      

  5. 编辑core-site.xml  这里 命名空间的逻辑名称使用 sardoop
    <configuration>
        <property>
            <name>fs.defaultFS</name>
            <value>hdfs://sardoop</value>
        </property>
    
        <property>
            <name>hadoop.http.staticuser.user</name>
            <value>hadoop</value>
        </property>
        <property>
            <name>hadoop.proxyuser.hadoop.hosts</name>
            <value>*</value>
        </property>
        <property>
            <name>hadoop.proxyuser.hadoop.users</name>
            <value>hadoop</value>
        </property> 
        <property>
            <name>fs.trash.interval</name>
            <value>4230</value>
        </property>
        <property>
            <name>io.file.buffer.size</name>
            <value>65536</value>
        </property>
    
        <property>
            <name>hadoop.tmp.dir</name>
            <value>/opt/software/hadoop-2.5.0-cdh5.3.6/tmp</value>
        </property>
    
        <property>
              <name>ha.zookeeper.quorum</name>
              <value>NameNode1,NameNode2,DataNode1,DataNode2,DataNode3</value>
        </property>
    
    </configuration>

     

     

  6. 编辑hdfs-site.xml。这里对NameNode使用HA,NameNode ID使用 nn1,nn2 分别对应 NameNode1,NameNode2,使用三个DataNode做JournalNode。
    <configuration>
        <property>
            <name>dfs.replication</name>
            <value>2</value>
        </property>
        <property>
            <name>dfs.nameservices</name>
            <value>sardoop</value>
        </property>
        <property>
            <name>dfs.ha.namenodes.sardoop</name>
            <value>nn1,nn2</value>
        </property>
        <property>
            <name>dfs.namenode.rpc-address.sardoop.nn1</name>
            <value>NameNode1:9820</value>
        </property>
        <property>
            <name>dfs.namenode.rpc-address.sardoop.nn2</name>
            <value>NameNode2:9820</value>
        </property>
        <property>
            <name>dfs.namenode.http-address.sardoop.nn1</name>
            <value>NameNode1:9870</value>
        </property>
        <property>
            <name>dfs.namenode.http-address.sardoop.nn2</name>
            <value>NameNode2:9870</value>
        </property>
        <property>
            <name>dfs.namenode.shared.edits.dir</name>
            <value>
            qjournal://DataNode1:8485;DataNode2:8485;DataNode3:8485/sardoop</value>
        </property>
        <property>
            <name>dfs.client.failover.proxy.provider.sardoop</name>
            <value>
            org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
        </property>
        <property>
            <name>dfs.ha.fencing.methods</name>
            <value>sshfence</value>
        </property>
        <property>
            <name>dfs.ha.fencing.ssh.private-key-files</name>        
            <value>/home/hadoop/.ssh/id_rsa</value>        
        </property>
        <property>        
            <name>dfs.journalnode.edits.dir</name>        
            <value>/opt/software/hadoop-2.5.0-cdh5.3.6/tmp/journal</value>        
        </property>
        <property>
            <name>dfs.ha.automatic-failover.enabled</name>
            <value>true</value>
        </property>
        <property>
            <name>dfs.datanode.max.transfer.threads</name>
            <value>4096</value>
        </property>

    <!--这里必须要加上前缀 file:// 否则会出现警告 should be specified as a URI in configuration files.并无法启动DataNode--> <property> <name>dfs.namenode.name.dir</name> <value>file:///opt/hdfsdata/namenode,file:///home/hadoop/data/hdfs/namenode</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:///opt/hdfsdata/datanode,file:///home/hadoop/data/hdfs/datanode</value> </property> </configuration>

     

  7. 编辑slaves文件
    DataNode1
    DataNode2
    DataNode3

     

  8. 接下来就是启动及初始化JournalNode、NameNode、DataNode,可对应这篇文章 Hadoop HA.
  9. 配置yarn-site.xml,使用HA
    <configuration>
      <property>
        <name>yarn.resourcemanager.ha.enabled</name>
        <value>true</value>
      </property>
      <property>
        <name>yarn.resourcemanager.ha.rm-ids</name>
        <value>rm1,rm2</value>
      </property>
      <property>
        <name>yarn.resourcemanager.hostname.rm1</name>
        <value>NameNode1</value>
      </property>
      <property>
        <name>yarn.resourcemanager.hostname.rm2</name>
        <value>NameNode2</value>
      </property>
      <property>
        <name>yarn.resourcemanager.recovery.enabled</name>
        <value>true</value>
      </property>
      <property>
        <name>yarn.resourcemanager.cluster-id</name>
        <value>yarnha</value>
      </property>
      <property>
        <name>yarn.resourcemanager.store.class</name>
        <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
      </property>
      <property>
        <name>yarn.resourcemanager.zk-address</name>
        <value>NameNode1,NameNode2,DataNode1,DataNode2,DataNode3</value>
      </property>
      
      <property>
        <name>yarn.web-proxy.address</name>
        <value>NameNode2:9180</value>
      </property>
      <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
      </property>
      <property>
        <name>yarn.nodemanager.vmem-check-enabled</name>
        <value>false</value>
      </property>
      <property>
        <name>yarn.nodemanager.vmem-pmem-ratio</name>
        <value>4</value>
      </property>
    
    </configuration>

     

  10. 配置mapred-site.xml
    <configuration>
    
            <property>
                    <name>mapreduce.framework.name</name>
                    <value>yarn</value>
            </property>
            <property>
                    <name>mapreduce.jobhistory.address</name>
                    <value>NameNode1:10020</value>
            </property>
            <property>
                    <name>mapreduce.jobhistory.webapp.address</name>
                    <value>NameNode1:19888</value>
            </property>
    </configuration>

     

  11. 退出Hadoop安全模式
    bin/hdfs dfsadmin -safemode leave

     检查HDFS

  12.  

    bin/hdfs fsck / -files -blocks

     

    
    

 

第七步:HBase安装部署

  1. 安装并进入安装目录
  2. 编辑 conf/backup-masters
    NameNode2

     

  3. 编辑 conf/hbase-env.sh
    #主要修改这三项
    export HBASE_PID_DIR=${HOME}/data/hbase
    export HBASE_MANAGES_ZK=false
    export HBASE_LOG_DIR=${HOME}/logs/hbase

     

  4. 编辑 conf/hbase-site.xml
    <configuration>
        <property>
            <name>hbase.cluster.distributed</name>
            <value>true</value>
        </property>
        <property>
            <name>hbase.rootdir</name>
            <!--这里应该是要使用nameservice的,但是用了之后IP解析不正确,只能暂时换成HostName;还要注意一点 这里的必须使用当前处于Active的NameNode-->
            <!--HBase如果要做HA,这里以后必须要改成Nameservice,否则NameNode发生变化的时候还要手动修改Hbase配置-->
            <value>hdfs://NameNode1:9820/hbase</value>
            <!--<value>hdfs://sardoop/hbase</value>-->
        </property>
        <property>
            <name>hbase.zookeeper.quorum</name>
            <value>NameNode1,NameNode2,DataNode1,DataNode2,DataNode3</value>
        </property>
        <property>
            <name>hbase.zookeeper.property.dataDir</name>
            <value>/home/hadoop/data/zookeeper</value>
        </property>
    </configuration>

     

  5. 编辑 conf/regionservers
    NameNode2
    DataNode1
    DataNode2
    DataNode3

注意:有时候启动HBase的时候会出现【org.apache.Hadoop.hbase.TableExistsException: hbase:namespace

或者什么【Znode already exists】相关的问题,一般都是因为之前的HBase信息已经在Zookeeper目录下已经存在引起的。

解决方法: 

  1. 登录到zookeeper节点的机器上
  2. cd ${ZOOKEEPER_HOME}/bin
  3. bin/zkCli.sh
  4. ls /  可以查看到zookeeper上已有hbase目录
  5. rmr /hbase  #删除该目录
  6. 最后重新启动hbase即可

 

有时候用java调用hbase时,会发生访问hbase时虽然没有报错,但是一直没有响应。

解决方式:

在程序调用的机器中的hosts文件,添加hbase所在节点的hosts信息 

 

 


 

第八步:Sqoop安装部署(Sqoop1)

通过sqoop我们可以实现RDMS与hadoop生态产品 如hdfs、hive、hbase(单向)的数据导入导出。

在导入的过程中 我们可以指定mapper的数量,甚至是压缩的方式。目前有sqoop1和sqoop2两个大版本,且差异较大。html" tar

以上是关于Hadoop2.5.0 搭建实录的主要内容,如果未能解决你的问题,请参考以下文章

hadoop2.5.0 HA高可用配置

电子商城实录------项目目录的结构搭建及其说明3

Centos7 系统搭建FTP实录

Samba的搭建实录

演进实录|不同阶段的企业如何搭建监控体系?

Jenkins本地搭建环境踩坑实录,给大家一些建议