从0开始打造Hadoop生态

一、系统架构

我们假设只有三台服务器,并且要在三台服务器上做高可用。

服务 服务器1 服务器2 服务器3
NameNode Δ
DataNode
JournalNode
ResourceManager
NodeManager
Zookeeper
ZKFC
HMaster Δ
HRegionServer

二、环境配置

我们需要把系统要安装之前的东西配置一下。

2.1、主机命名

我们分别把三台服务器命名为hadoop1, hadoop2, hadoop3。并在hosts中加上ip到主机名的映射。

192.168.13.81 hadoop1
192.168.13.82 hadoop2
192.168.13.83 hadoop3

2.2、Java环境

我们的java环境如下

[root@hadoop1 user]# java -version
openjdk version "1.8.0_212"
OpenJDK Runtime Environment (build 1.8.0_212-b04)
OpenJDK 64-Bit Server VM (build 25.212-b04, mixed mode)

2.3、免密登录

三台机子生成自己的私钥,并且发到自己和其余两台的服务器上

ssh-keygen -t rsa
ssh-copy-id ip

三、软件下载

我们按照如下方式选择版本

  • Hadoop 选择2.8.5版本
  • Zookeeper 选择了3.4.10版本
  • HBase 选择了 2.2.0版本,Hbase官网可以查询你需要的版本

四、Hadoop配置

我们选择一个目录进行整个hadoop的安装,假设它是/home/user

4.1、hadoop-env.sh

export JAVA_HOME=/usr

4.2、core-site.xml

这个ns可以理解我们定义的一个变量,你也可以叫其他的


    
        fs.defaultFS
        hdfs://ns
    
    
        hadoop.tmp.dir
        /home/user/dir_hadoop2
        A base for other temporary directories.
    
    
        io.file.buffer.size
        16384
    
    
        ha.zookeeper.quorum
        hadoop1:2181,hadoop2:2181,hadoop3:2181
    


4.3、hdfs-site.xml


        
        
                dfs.nameservices
                ns
        
        
        
                dfs.ha.namenodes.ns
                nn1, nn2
        
        
        
                dfs.namenode.rpc-address.ns.nn1
                hadoop1:9000
        
        
        
                dfs.namenode.http-address.ns.nn1
                hadoop1:50070
        
        
        
                dfs.namenode.rpc-address.ns.nn2
                hadoop2:9000
        
        
        
                dfs.namenode.http-address.ns.nn2
                hadoop2:50070
        
        
        
                dfs.namenode.shared.edits.dir
                qjournal://hadoop1:8485;hadoop2:8485;hadoop3:8485/ns
        
        
        
                dfs.journalnode.edits.dir
                /home/user/journal_hadoop2
        
        
        
                dfs.ha.automatic-failover.enabled
                true
        
        
        
                dfs.client.failover.proxy.provider.ns
                org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
        
        
        
                dfs.ha.fencing.methods
                
                        sshfence
                        shell(/bin/true)
                
        
        
        
                dfs.ha.fencing.ssh.private-key-files
                /root/.ssh/id_rsa
        
        
        
                dfs.ha.fencing.ssh.connect-timeout
                30000
        
        
        
                dfs.replication
                2
        

4.4、mapred-site.xml

需要注意的是 如果内存太小了,MP任务可能会一直报错

 
      
      
       mapreduce.framework.name 
       yarn 
      
      
      
       mapreduce.map.memory.mb 
       1024 
      
      
      
       mapreduce.reduce.memory.mb 
       1024 
      
      
      
        yarn.app.mapreduce.am.resource.mb 
        460 
      
      
      
        yarn.app.mapreduce.am.command-opts 
        -Xmx368m 
      

4.5、 yarn-site.xml

需要注意的是 如果内存太小了,MP任务可能会一直报错



        
        
           yarn.resourcemanager.hostname
           hadoop3
        
        
        
           yarn.resourcemanager.zk-address
           hadoop1:2181,hadoop2:2181,hadoop3:2181
        
        
           yarn.nodemanager.aux-services
           mapreduce_shuffle
        
        
        
            yarn.scheduler.minimum-allocation-mb
            1024
        
        
         
            yarn.scheduler.maximum-allocation-mb
            2048
        
        
        
            yarn.nodemanager.resource.memory-mb
            2048
        
        
        
            yarn.nodemanager.vmem-check-enabled
            false
        

4.6、slaves

配置的地方在etc/hadoop/slaves

hadoop1 
hadoop2 
hadoop3

4.7、zookeeper

首先重命名zoo_sample.cfg文件为zoo.cfg,然后对它进行修改,修改后的样子大约是这样的

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial 
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between 
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just 
# example sakes.
dataDir=/home/user/zoodata
dataLogDir=/home/user/zoodatalog
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the 
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
#quorumListenOnAllIPs=true
server.1=hadoop1:2888:3888
server.2=hadoop2:2888:3888
server.3=hadoop3:2888:3888

但是如果使用的是公网IP的时候,注意把本机配置为0.0.0.0。假设我们现在在hadoop1节点上,且使用的是公网IP,则应该如下配置

#末尾添加
server.1=0.0.0.0:2888:3888
server.2=165.227.133.86:2888:3888
server.3=159.65.120.185:2888:3888

然后我们手动创建zoodata和zoodatalog文件夹,并在每台zoo服务器的文件夹里面创建一个文件,以此输入1、2、3。
这个1,2,3对应的是上面server.1=hadoop1:2888:3888中的1、2、3
你可以vim创建,或者使用echo 1 > myid

五、HBase配置

HBase的软件是一个单独的文件夹

5.1、hbase-env.sh

第二个配置是并行GC的配置,数字根据你的线程数设置

export JAVA_HOME=/usr
export HBASE_OPTS="$HBASE_OPTS -XX:+UseConcMarkSweepGC -XX:ParallelGCThreads=20"
export HBASE_MANAGES_ZK=true

5.2、 hbase-site.xml

 
   
    hbase.rootdir 
    hdfs:///ns/hbase 
   
   
    hbase.zookeeper.property.dataDir 
    /home/user/zoodata 
   
     
    hbase.cluster.distributed   
    true   
   
   
    hbase.master 
    hdfs://hadoop1:60000 
   
   
    hbase.master.info.port 
    60010 
   
       
    hbase.zookeeper.property.clientPort     
    2181     
     
     
    hbase.zookeeper.quorum   
    hadoop1,hadoop2,hadoop3   
   

完成配置后,记得把core-site.xmlhdfs -site.xml的软链接链到这个目录下面,否则无法识别ns。

5.3、conf/regionservers

hadoop1
hadoop2
hadoop3

六、复制

把除了myid以外其它东西复制到另外两台服务器。可以直接使用scp复制

七、服务启动

7.1、Zookeeper

在三台服务器

zkServer.sh start

启动之后检查启动是否正常

[root@hadoop1 user]# zookeeper/bin/zkServer.sh status
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /home/user/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: follower

如果不正常,检查一下防火墙有没有问题。防火墙一定要关闭。

7.2、HDFS

  • 在hadoop1执行hadoop-daemons.sh start journalnode
  • 在hadoop1上格式化HDFS hdfs namenode -format。格式化后会在根据core-site.xml中的hadoop.tmp.dir配置生成个文件,在这里是存在 /home/user/dir_hadoop2 的目录下。然后将这个文件用scp拷贝到你备用namenode服务器的/home/user/dir_hadoop2 目录下。
  • 在hadoop1上格式化ZKhdfs zkfc -formatZK
  • 在hadoop1上hdfs zkfc -formatZK
  • 在hadoop1上启动HDFS start-dfs.sh
  • 在hadoop3上启动Yarn start-yarn.sh
  • 在hadoop1上启动HBase hbase-2.2.0/bin/start-hbase.sh

八、验证服务

[root@hadoop1 user]# jps
2464 NodeManager
16417 HQuorumPeer
20065 Jps
32066 NameNode
32180 DataNode
18470 HMaster
18589 HRegionServer
32383 JournalNode

运行一下hadoop提供的demo中的WordCount程序:

hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.4.1.jar wordcount input out

九、关闭服务

https://blog.csdn.net/u011414200/article/details/50437356

参考链接:https://www.cnblogs.com/luhaojie/p/9236839.html

你可能感兴趣的:(从0开始打造Hadoop生态)