• Hadoop 配置及hadoop HA 的配置


    注:本文中提到的ochadoop 不要感到奇怪,是亚信公司内部自己合成的一个包。把全部的组件都放在一个包内了。免去了组件的下载过程和解决兼容问题。事实上也能够自己下载的。不要受到影响。

    另,转载请注明出处,谢谢



    改动静态IPhostname


    /etc/sysconfig/network-scripts/ifcfg-eth0配置IPADDR地址
    执行下面命令生效


    service network restart


    /etc/sysconfig/network中配置hostname配置完毕后重新启动生效


    设置ssh免登录(本节没有做实际操作。仅供參考)


    Master节点上运行下面命令:


    ssh-keygen –t rsa –P ''


    生成的密钥对:id_rsaid_rsa.pub。默认存储在"/home/hadoop/.ssh"文件夹下。


    接着在Master节点上做例如以下配置,把id_rsa.pub追加到授权的key里面去。


    cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys


    在验证前,须要做两件事儿。

    第一件事儿是改动文件"authorized_keys"权限(权限的设置很重要,由于不安全的设置安全设置,会让你不能使用RSA功能),还有一件事儿是用root用户设置"/etc/ssh/sshd_config"的内容。使其无password登录有效。


    改动文件"authorized_keys"


    chmod 600 ~/.ssh/authorized_keys


    root用户登录server改动SSH配置文件"/etc/ssh/sshd_config"的下列内容。


    RSAAuthentication yes #启用 RSA认证

    PubkeyAuthentication yes #启用公钥私钥配对认证方式

    AuthorizedKeysFile .ssh/authorized_keys #公钥文件路径(和上面生成的文件同)


     


    设置完之后记得重新启动SSH服务。才干使刚才设置有效。


    service sshd restart


     


    接下来的事儿是把公钥复制全部的Slave机器上。使用以下的命令格式进行复制公钥:


    scp ~/.ssh/id_rsa.pub远程username@远程serverIP:~/


     


    "/home/hadoop/"下创建".ssh"目录


    chmod 700 ~/.ssh


     


    到眼下为止Master的公钥也有了。目录".ssh"也有了。且权限也改动了。这一步就是把Master的公钥追加到Slave1的授权文件"authorized_keys"中去。使用以下命令进行追加并改动"authorized_keys"文件权限:


    cat ~/id_rsa.pub >> ~/.ssh/authorized_keys

    chmod 600 ~/.ssh/authorized_keys


     


    root用户改动"/etc/ssh/sshd_config"


    详细步骤參考前面的"设置SSH配置",详细分为两步:第1是改动配置文件;第2是重新启动SSH服务。


    測试Master使用SSH无password登录Slave1


    ssh远程serverIP


    配置slaves


    etc/hadoop/slaves增加datanode机器的hostname


    w-cs-datanode01

    w-cs-datanode02

    w-cs-datanode02


    创建hadoop用户


    下面操作方式使用该新建的用户进行操作。注:下以出现的csbd为当前新建的账号


    下载OCHadoop


    http://210.14.153.178:9081/download/OCHadoop/V4.0.1/ochadoop-och4.0.1.tar.gz
    下载前请确认安装的版本,该包包括有hadoopzookeeperhiveHbasespark等组件。


    下载Java并配置环境变量


    解压:tar zxvf jdk-7u75-linux-x64.tar.gz -C /home/csbd/java-1.7.0
    配置环境变量:vim /etc/profile


    export JAVA_HOME=/home/csbd/jdk1.7.0_75

    export JRE_HOME=${JAVA_HOME}/jre

    export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib

    export PATH=${JAVA_HOME}/bin:$PATH


    生效:


    source /etc/profile


    另一些环境变量像HADOOP_HOMEHIVE_HOMEZOOKEEPER_HOME等都能够先配置了


    hadoop中配置Java环境变量


    etc/hadoop文件夹下hadoop-env.sh yarn-env.shJava_home给配置上


    core-site.xml配置


    <property>

    <name>fs.defaultFS</name>

      <value>hdfs://w-cs-namenode01</value>  <!-- 一定得是namenodehostname或者 ip。而且不用加port号(这里的名称与HA配置hdfs-site.xml中的dfs.nameservices必须保持一致) -->

    </property>

     

    <property>

     <name>hadoop.tmp.dir</name>

     <value>/home/csbd/tmp</value> <!-- 该路径能够不用创建,会自己主动创建-->

    </property>

     

    <!-- 配置HA时才用配置该项 -->

    <property>

    <name>ha.zookeeper.quorum</name>

    <value>zk1.example.com:2181,zk2.example.com:2181,zk3.example.com:2181</value>

    <!--各个ZK节点的IP/host,及client连接ZK的port。该port需与zoo.cfg中的 clientPort一致! -->

    </property>


    hdfs-site.xml


    <property>

    <name>dfs.namenode.name.dir</name>

    <value>/home/csbd/dfs/name</value>

    </property>

     

    <property>

    <name>dfs.datanode.data.dir</name>

    <value>/home/csbd/dfs/data</value>

    </property>

     

    <property>

    <name>dfs.replication</name>

    <value>3</value>

    </property>

     

    <property>

    <name>dfs.webhdfs.enabled</name>

    <value>true</value>

    </property>

     

    <!-- HA配置须要加例如以下配置-->

    <property>

    <name>dfs.nameservices</name>

    <value>w-cs-namenode01</value>

    </property>

     

    <property>

    <name>dfs.ha.namenodes.mycluster</name>

    <value>nn1,nn2</value>

    </property>

     

    <property>

    <name>dfs.namenode.rpc-address.mycluster.nn1</name>

    <value>w-cs-namenode01:8020</value>

    </property>

    <property>

    <name>dfs.namenode.rpc-address.mycluster.nn2</name>

    <value>w-cs-namenode02.com:8020</value>

    </property>

     

    <property>

    <name>dfs.namenode.servicepc-address.mycluster.nn1</name>

    <value>w-cs-namenode01:53310</value>

    </property>

    <property>

    <name>dfs.namenode.servicepc-address.mycluster.nn2</name>

    <value>w-cs-namenode02:53310</value>

    </property>

     

    <property>

    <name>dfs.namenode.http-address.mycluster.nn1</name>

    <value>w-cs-namenode01:50070</value>

    </property>

    <property>

    <name>dfs.namenode.http-address.mycluster.nn2</name>

    <value>w-cs-namenode02:50070</value>

    </property>

     

    <property>

    <name>dfs.namenode.shared.edits.dir</name>

    <value>qjournal://w-cs-namenode01:8485;w-cs-namenode02:8485;w-cs-datanode01:8485/w-cs-namenode01</value>

    </property>

     

    <property>

    <name>dfs.journalnode.edits.dir</name>

    <value>/home/csbd/dfs/jndata</value>

    </property>

     

    <property>

    <name>dfs.client.failover.proxy.provider.mycluster</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/csbd/.ssh/id_rsa</value>

    </property>

     

    <property>

    <name>dfs.namenode.edits.dir</name>

    <value>/home/csbd/dfs/edits</value>

    </property>

     

    <property>

    <name>dfs.permission</name>

    <value>false</value>

    </property>

     

    <property>

    <name>dfs.ha.automatic-failover.enabled</name>

    <value>true</value>

    </property>

     


    yarn-site.xml


    注:yarn-site.xml在两个执行resourceManager的节点上一定要改动yarn.resourcemanager.ha.id中的值为当前机器的映射!


    <configuration>

    <!-- Resource Manager Configs -->

     <property>

       <name>yarn.resourcemanager.connect.retry-interval.ms</name>

       <value>2000</value>

     </property>

      

     <property>

       <name>yarn.resourcemanager.ha.enabled</name>

       <value>true</value>

     </property>

     

     <property>

       <name>yarn.resourcemanager.ha.automatic-failover.enabled</name>

       <value>true</value>

     </property>

     

     <property>

       <name>yarn.resourcemanager.ha.automatic-failover.embedded</name>

       <value>true</value>

     </property>

     

     <property>

       <name>yarn.resourcemanager.cluster-id</name>

       <value>pseudo-yarn-rm-cluster</value>

     </property>

     

     <property>

       <name>yarn.resourcemanager.ha.rm-ids</name>

       <value>rm1,rm2</value>

     </property>

     

     <property>

       <name>yarn.resourcemanager.ha.id</name>

       <value>rm1</value>  <!-- 在第一台执行resourceManager HA的机器上为 rm1。在还有一台执行resourceManager的机器上要改成 rm2 -->

     </property>

     

     <property>

       <name>yarn.resourcemanager.scheduler.class</name>

      <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>

     </property>

     

     <property>

       <name>yarn.resourcemanager.recovery.enabled</name>

       <value>true</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.state-store.address</name>

       <value>localhost:2181</value>

     </property>

     

     <property>

       <name>yarn.app.mapreduce.am.scheduler.connection.wait.interval-ms</name>

       <value>5000</value>

     </property>

     

    <!-- RM1 configs -->

     <property>

       <name>yarn.resourcemanager.address.rm1</name>

       <value>w-cs-namenode01:8032</value>

     </property>

     

     <property>

       <name>yarn.resourcemanager.scheduler.address.rm1</name>

       <value>w-cs-namenode01:8030</value>

     </property>

     

     <property>

       <name>yarn.resourcemanager.webapp.https.address.rm1</name>

       <value>w-cs-namenode01:23189</value>

     </property>

     

     <property>

       <name>yarn.resourcemanager.webapp.address.rm1</name>

       <value>w-cs-namenode01:8088</value>

     </property>

     

     <property>

       <name>yarn.resourcemanager.resource-tracker.address.rm1</name>

       <value>w-cs-namenode01:8031</value>

     </property>

     

     <property>

       <name>yarn.resourcemanager.admin.address.rm1</name>

       <value>w-cs-namenode01:8033</value>

     </property>

     

    <!-- RM2 configs -->

     <property>

       <name>yarn.resourcemanager.address.rm2</name>

       <value>w-cs-namenode02:8032</value>

     </property>

     

     <property>

       <name>yarn.resourcemanager.scheduler.address.rm2</name>

       <value>w-cs-namenode02:8030</value>

     </property>

     

     <property>

       <name>yarn.resourcemanager.webapp.https.address.rm2</name>

       <value>w-cs-namenode02:23189</value>

     </property>

     

     <property>

       <name>yarn.resourcemanager.webapp.address.rm2</name>

       <value>w-cs-namenode02:8088</value>

     </property>

     

     <property>

       <name>yarn.resourcemanager.resource-tracker.address.rm2</name>

       <value>w-cs-namenode02:8031</value>

     </property>

     

     <property>

       <name>yarn.resourcemanager.admin.address.rm2</name>

       <value>w-cs-namenode02:8033</value>

     </property>

    <!-- Node Manager Configs -->

     <property>

       <description>Address where the localizer IPC is.</description>

       <name>yarn.nodemanager.localizer.address</name>

       <value>0.0.0.0:23344</value>

     </property>

     

     <property>

       <description>NM Webapp address.</description>

       <name>yarn.nodemanager.webapp.address</name>

       <value>0.0.0.0:23999</value>

     </property>

     

     <property>

       <name>yarn.nodemanager.aux-services</name>

       <value>mapreduce_shuffle</value>

     </property>

     

     <property>

       <name>yarn.nodemanager.aux-services.mapreduce_shuffle.class</name>

       <!-- <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name> -->

       <value>org.apache.hadoop.mapred.ShuffleHandler</value>

     </property>

     

     <property>

       <name>yarn.nodemanager.local-dirs</name>

       <value>/tmp/pseudo-dist/yarn/local</value>

     </property>

     

     <property>

       <name>yarn.nodemanager.log-dirs</name>

       <value>/tmp/pseudo-dist/yarn/log</value>

     </property>

     

     <property>

       <name>mapreduce.shuffle.port</name>

       <value>23080</value>

     </property>

     

    <!--在主备resourceManager上配置的zookeeper的地址和port(所以resourceManager要和zookeeper装在一台机器上)-->

     <property>

       <name>yarn.resourcemanager.zk-address</name>

       <value>zk1.example.com:2181,zk2.example.com:2181</value>

     </property>

     

    </configuration>


    mapred-site.xml


    <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>


    Zookeeper的安装配置


    下载zookeepertar包。解压


    首先建立zookeeper的数据文件夹,比方:


    mkdir -p /opt/hadoop/data/zookeeper


    同一时候建立日志存放文件夹:


    mkdir –p /opt/hadoop/logs/zookeeper


    $ZOO_HOME/conf下创建配置文件:


    touch zoo.cfg


    zoo.cfg文件是增加下面配置:


    tickTime=2000

    dataDir=/opt/hadoop/data/zookeeper

    clientPort=2181

    initLimit=5

    syncLimit=2

    server.1=192.168.17.14:31316:31317

    server.2=192.168.17.15:31316:31317

    server.3=192.168.17.16:31316:31317


     


    在三台server的文件夹/opt/hadoop/data/zookeeper下分别创建一个叫myid的文件。内容各自是123。如:


    #192.168.17.14上运行例如以下命令


    echo 1 >/opt/hadoop/data/zookeeper/myid


    #192.168.17.15上运行例如以下命令


    echo 2 >/opt/hadoop/data/zookeeper/myid


    #192.168.17.16上运行例如以下命令


    echo 3 >/opt/hadoop/data/zookeeper/myid


    最后就是分别启动zookeeper服务了:


    ./bin/zkServer.sh start


    通过jps命令能够检查是否启动成功:


    hd@hd0:/opt/hadoop/apps/zookeeper-3.4.5$jps


    1239 QuorumPeerMain


    看到QuorumPeerMain进程就表示zookeeper启动成功了。


    測试zookeeper集群是否建立成功,在$ZOO_HOME文件夹下运行下面命令就可以。如无报错表示集群创建成功:


    ./bin/zkCli.sh -server localhost:31315


    查看状态:


    $ zkServer.sh status

    JMX enabled by default

    Using config: /home/yarn/Zookeeper/zookeeper-3.4.6/bin/../conf/zoo.cfg

    Mode: follower  表示当前这个机器上是从状态



    在随意一个节点格式化ZK


    hdfs zkfc -formatZK


    仅在主备NN节点上启动即可: 


    hadoop-daemon.sh start zkfc


    启动后我们能够看到ZKFC进程:


    $ jps
    3084 QuorumPeerMain
    3292 Jps
    3247  DFSZKFailoverController


    启动hadoop


    在主nameNode上进行格式化:(注:仅仅用主Namenode格式化,备Namenode不用格式化,备NN须要做一下同步即可,不然会造成两个namenodeVERSION不一致,解决的办法是查看日志,依照提示的两个不一致的id进行替换即可了(通常会有namespaceIdclusterId不一致,报哪个替换哪个即可))





    在全部的ZK节点运行命令:


    zkServer.shstart


     


    查看从属关系


    zkServer.shstatus 


    JMX enabledby default


    Usingconfig: /home/yarn/Zookeeper/zookeeper-3.4.6/bin/../conf/zoo.cfg


    Mode:  follower


     


    注意: 


    哪个ZK节点会成为leader是随机的,第一次实验时slave2成为了leader,第二次实验时slave1成为了leader 


    此时,在各个节点都能够查看到ZK进程:


    jps


    3084  QuorumPeerMain


     


    随意ZK节点上格式化ZK


    hdfs zkfc-formatZK


     


    仅在主备NN节点上启动即可: 


    hadoop-daemon.shstart zkfc 


     


    启动后我们能够看到ZKFC进程:


    jps


    3084QuorumPeerMain


    3292 Jps


    3247  DFSZKFailoverController


     


    在各JN上启动:


    hadoop-daemon.shstart  journalnode


     


    先用子命令启动各进程,便于查看问题,正常以后能够使用 start-dfs.sh  start-yarn.sh start-all.sh


    ./bin/hdfsnamenode –format   # 格式化namenode


    在主nameNode上启动各DN节点:


    ./sbin/hadoop-daemons.shstart datanode


     


    ./sbin/hadoop-daemon.sh--script hdfs start datanode


    ./sbin/yarn-daemon.shstart resourcemanager


    ./sbin/yarn-daemon.shstart nodemanager


    ./sbin/mr-jobhistory-daemon.shstart historyserver


     


    启动主节点上的NN
    hadoop-daemon.sh start namenode
    在备NN上同步主NN上元数据:


    hdfs namenode -bootstrapStandby


    正常的启动日志例如以下:


    Re-formatfilesystem in Storage Directory /home/yarn/Hadoop/hdfs2.0/name ? (Y or N) Y


    14/06/1510:09:08 INFO common.Storage: Storage directory /home/yarn/Hadoop/hdfs2.0/namehas been successfully formatted.


    14/06/1510:09:09 INFO namenode.TransferFsImage: Opening connection to http://master:50070/getimage?

    getimage=1&txid=935&storageInfo=-47:564636372:0:CID-d899b10e-10c9-4851-b60d-3e158e322a62


    14/06/1510:09:09 INFO namenode.TransferFsImage: Transfer took 0.11s at 63.64 KB/s


    14/06/1510:09:09 INFO namenode.TransferFsImage: Downloaded file fsimage.ckpt_0000000000000000935size 7545 bytes.


    14/06/1510:09:09 INFO util.ExitUtil: Exiting with status 0


    14/06/1510:09:09 INFO namenode.NameNode: SHUTDOWN_MSG:


    /************************************************************


    SHUTDOWN_MSG:Shutting down NameNode at slave1/192.168.66.92


    ************************************************************/


     


    在备NN上启动namenode

    hadoop-daemon.shstart namenode




    校验效果


    首先能够连到两台NameNode查看主备状态
    http://192.168.17.14:50070/dfshealth.jsp


    http://192.168.17.15:50070/dfshealth.jsp
    通过 jps查到主nameNode上的PID,然后使用kill PID 杀死该进行,再查看原来的standBy是否改为active
    能够在主NN节点上运行命令激活主NN


    hdfs haadmin -transitionToActive nn1


    该命令能够将active状态从nn2切换到nn1。让nn2变成active


    hdfs haadmin -DfSHAadmin -failover nn2 nn1


     


    
    
  • 相关阅读:
    nginx配置https访问
    nginx解决带_的head内容丢失
    软件开发报价的计算方法(转载)
    使用游标批量初始化密码
    调用WScript.Shell时产生Automation 服务器不能创建对象的错误
    用.NET SqlBulkCopy类执行批量插入数据到数据库
    XML文件做数据源的读取使用
    页面实现数据库备份(还原)实例
    特定的ExcelCSS样式Excel导出
    索引的初步学习总结
  • 原文地址:https://www.cnblogs.com/llguanli/p/6820953.html
Copyright © 2020-2023  润新知