zoukankan      html  css  js  c++  java
  • Hadoop+Spark+Hbase部署整合篇

    之前的几篇博客中记录的Hadoop、Spark和Hbase部署过程虽然看起来是没多大问题,但是之后在上面跑任务的时候出现了各种各样的配置问题。庆幸有将问题记录下来,可以整理出这篇部署整合篇。

    确保集群的每台机器用户名都为cloud(或者一样)

    为了避免过多重复的解释,这里仅仅示意了怎么配置,关于配置的详情解释可自行百度,必应之~或者参考:
    hadoop2.2.0集群安装和配置
    HBase集群的安装部署
    Spark(一)– Standalone HA的部署

    修改各个节点上的/etc/hosts文件确保ip与主机名的映射关系正确

    关闭系统防火墙
    service iptables stop
    chkconfig iptables off
    reboot

    配置ssh免密码登陆
    在每台机器上都执行下列命令
    chmod -R 755 /home/cloud
    mkdir ~/.ssh
    ssh-keygen -t rsa

    之后在cloud1上收集各个机器的公钥
    cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

    ssh cloud2 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
    ssh cloud3 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
    ssh cloud4 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
    ssh cloud5 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
    ssh cloud6 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
    将公钥拷贝到其他节节点

    scp ~/.ssh/authorized_keys cloud2:~/.ssh/authorized_keys
    scp ~/.ssh/authorized_keys cloud3:~/.ssh/authorized_keys
    scp ~/.ssh/authorized_keys cloud4:~/.ssh/authorized_keys
    scp ~/.ssh/authorized_keys cloud5:~/.ssh/authorized_keys
    scp ~/.ssh/authorized_keys cloud6:~/.ssh/authorized_keys
    在每台机器上都执行(很重要,注意配置ssh的时候要使用cloud用户来配置)

    chmod -R 700 ~/.ssh

    Zookeeper安装:

    zk服务器集群规模不小于3个节点,要求各服务器之间系统时间要保持一致

    设置环境变量

    vi /etc/profile

    新增

    export ZOOKEEPER_HOME=/home/cloud/zk

    path后新增

    :$ZOOKEEPER_HOME/bin
    source /etc/profile

    保存文件生效
    在另外两个节点slave1和slave2上分别设置改环境变量

    进入zk目录

    在conf目录下,重命名文件

    mv zoo_sample.cfg zoo.cfg

    编辑该文件,执行vi zoo.cfg
    修改dataDir=/home/cloud/zk/data
    新增

    server.1=cloud4:2888:3888
    server.2=cloud5:2888:3888
    server.3=cloud6:2888:3888

    ticktickTime=20000 (默认)2-20倍的minSessionTimeout与maxSessionTimeout
    注: tickTime 心跳基本时间单位毫秒,ZK基本上所有的时间都是这个时间的整数倍。

    zk的详细配置见:
    zookeeper配置文件详解

    创建文件夹mkdir /home/cloud/zk/data
    在data目录下,创建文件myid,内容为1
    echo 1 > /home/cloud/zk/data/myid

    把zk目录复制到slave1和slave2中

    scp -r zk slave1:/home/cloud
    scp -r zk slave2:/home/cloud

    把cloud5中相应的myid的值改为1
    把cloud6中相应的myid的值改为2

    启动,在三个节点上分别执行命令./zkServer.sh start
    检验,在三个节点上分别执行命令./zkServer.sh status

    JDK安装

    使用root用户
    在usr目录下新建java目录。
    将jdk上传到linux中
    在/usr/java下

    chmod 755 jdk-6u45-linux-i586.bin
    
    ./jdk-6u45-linux-i586.bin
    
    mv jdk1.6.0_45 jdk
    
    vi /etc/profile
    
    export JAVA_HOME=/usr/java/jdk
    export PATH=$PATH:$JAVA_HOME/bin
    
    source /etc/profile

    Hadoop安装

    解压Hadoop文件之后,进入conf目录
    修改hadoop-env.sh
    加入

    export JAVA_HOME=/usr/java/jdk

    (为了解决网络不好或者其他情况下造成的通信失败,下列有些简单粗暴的配置了连接zk的timeout时间)

    修改core-site.xml

    <configuration>
    <property>
    <name>fs.defaultFS</name>
    <value>hdfs://ns1</value>
    </property>
    <property>
    <name>hadoop.tmp.dir</name>
    <value>/home/cloud/hadoop/tmp</value>
    </property>
    <property>
    <name>ha.zookeeper.quorum</name> 
    <value>cloud4:2181,cloud5:2181,cloud6:2181</value>
    </property>
    <property>
    <name>ha.zookeeper.session-timeout.ms</name>
    <value>6000000</value>
    </property>
    <property>  
    <name>ha.failover-controller.cli-check.rpc-timeout.ms</name>  
    <value>6000000</value>  
    </property>  
    <property>  
    <name>ipc.client.connect.timeout</name>  
    <value>6000000</value>  
    </property>
    </configuration>

    修改hdfs-site.xml

    <configuration>
    <property>
    <name>dfs.nameservices</name>
    <value>ns1</value>
    </property>
    <property>
    <name>dfs.ha.namenodes.ns1</name>
    <value>nn1,nn2</value>
    </property>
    <property>
    <name>dfs.namenode.rpc-address.ns1.nn1</name>
    <value>cloud1:9000</value>
    </property>
    <property>
    <name>dfs.namenode.http-address.ns1.nn1</name>
    <value>cloud1:50070</value>
    </property>
    <property>
    <name>dfs.namenode.rpc-address.ns1.nn2</name>
    <value>cloud2:9000</value>
    </property>
    <property>
    <name>dfs.namenode.http-address.ns1.nn2</name>
    <value>cloud2:50070</value>
    </property>
    <property>
    <name>dfs.namenode.shared.edits.dir</name> 
    <value>qjournal://cloud4:8485;cloud5:8485;cloud6:8485/ns1</value>
    </property>
    <property>
    <name>dfs.journalnode.edits.dir</name>
    <value>/home/cloud/hadoop/journal</value>
    </property>
    <property>
    <name>dfs.ha.automatic-failover.enabled</name>
    <value>true</value>
    </property>
    <property>
    <name>dfs.client.failover.proxy.provider.ns1</name>
    <value>
    org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
    </value>
    </property>
    <property>
    <name>dfs.ha.fencing.methods</name>
    <value>
    sshfence
    shell(/bin/true)
    </value>
    </property>
    <property>
    <name>dfs.ha.fencing.ssh.private-key-files</name>
    <value>/home/cloud/.ssh/id_rsa</value>
    </property>
    <property>
    <name>dfs.ha.fencing.ssh.connect-timeout</name>
    <value>30000</value>
    </property>
    <property>
    <name>dfs.qjournal.start-segment.timeout.ms</name>
    <value>600000000</value>
    </property>
    <property>
    <name>dfs.qjournal.prepare-recovery.timeout.ms</name>
    <value>600000000</value>
    </property>
    <property>
    <name>dfs.qjournal.accept-recovery.timeout.ms</name>
    <value>600000000</value>
    </property>
    <property>
    <name>dfs.qjournal.prepare-recovery.timeout.ms</name>
    <value>600000000</value>
    </property>
    <property>
    <name>dfs.qjournal.accept-recovery.timeout.ms</name>
    <value>600000000</value>
    </property>
    <property>
    <name>dfs.qjournal.finalize-segment.timeout.ms</name>
    <value>600000000</value>
    </property>
    <property>
    <name>dfs.qjournal.select-input-streams.timeout.ms</name>
    <value>600000000</value>
    </property>
    <property>
    <name>dfs.qjournal.get-journal-state.timeout.ms</name>
    <value>600000000</value>
    </property>
    <property>
    <name>dfs.qjournal.new-epoch.timeout.ms</name>
    <value>600000000</value>
    </property>
    <property>
    <name>dfs.qjournal.write-txns.timeout.ms</name>
    <value>600000000</value>
    </property>
    <property>
    <name>ha.zookeeper.session-timeout.ms</name>
    <value>6000000</value>
    </property>
    </configuration>

    修改mapred-site.xml

    <configuration>
    <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
    </property>
    </configuration>

    修改yarn-site.xml

    <configuration> 
    <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>cloud3</value>
    </property>
    <property> 
    <name>yarn.nodemanager.aux-services</name> 
    <value>mapreduce_shuffle</value> 
    </property>                                                                                            
    </configuration> 

    修改slaves
    cloud3
    cloud4
    cloud5
    cloud6

    将配置好的hadoop拷贝到其他节点

    scp -r ~/hadoop/ cloud2:~/
    scp -r ~/hadoop/ cloud3:~/
    scp -r ~/hadoop/ cloud4:~/
    scp -r ~/hadoop/ cloud5:~/
    scp -r ~/hadoop/ cloud6:~/

    启动Hadoop之前先启动zk
    cd ~/zookeeper/bin/

    ./zkServer.sh start

    查看状态:一个leader,两个follower

    ./zkServer.sh status

    启动journalnode(在cloud1上启动所有journalnode,注意:是调用的hadoop-daemons.sh这个脚本,注意是复数s的那个脚本)

    cd ~/hadoop

    ~/hadoop/sbin/hadoop-daemons.sh start journalnode

    运行jps命令检验,cloud4、cloud5、cloud6上多了JournalNode进程

    格式化HDFS(在bin目录下)

    在cloud1上执行命令:

    ./hdfs namenode -format

    格式化后会在根据core-site.xml中的hadoop.tmp.dir配置生成个文件,这里

    我配置的是~/hadoop/tmp,然后将~/hadoop/tmp拷贝到cloud2的~/hadoop/下。

    scp -r ~/hadoop/tmp/ cloud2:~/hadoop/

    格式化ZK(在cloud1上执行即可,在bin目录下)

    ./hdfs zkfc -formatZK

    启动HDFS(在cloud1上执行)

    ~/hadoop/sbin/start-dfs.sh

    启动YARN(cloud2)

    ~/hadoop/sbin/start-yarn.sh

    注意:hadoop初次格式化之后要将两个nn节点的tmp/dfs/name文件夹同步

    Hbase安装

    解压之后配置hbase集群,要修改3个文件(首先zk集群已经安装好了)
    注意:要把hadoop的hdfs-site.xml和core-site.xml 放到hbase/conf下
    让hbase节点知道hdfs的映射关系,也可以在hbase-site.xml中配置

    修改hbase-env.sh

    export JAVA_HOME=/usr/java/jdk
    //告诉hbase使用外部的zk 
    export HBASE_MANAGES_ZK=false
    export HBASE_CLASSPATH=/usr/local/hadoop/conf

    vi hbase-site.xml

    <configuration>
    <property>
    <name>hbase.rootdir</name>
    <value>hdfs://ns1/hbase</value>
    </property>
    <property>
    <name>hbase.cluster.distributed</name>
    <value>true</value>
    </property>
    <property>
    <name>hbase.zookeeper.quorum</name>
    <value>cloud4:2181,cloud5:2181,cloud6:2181</value>
    </property>
    <property>
    <name>hbase.master</name>
    <value>cloud1</value>
    </property>
    <property>
    <name>zookeeper.session.timeout</name>
    <value>6000000</value>
    </property>
    </configuration>

    和hdfs的配置一样,说明hbase的子节点都在哪些机器上

    vi regionservers
    cloud3
    cloud4
    cloud5
    cloud6

    把zoo.cfg 拷贝到 hbase-0.90.3/conf/下

    拷贝hbase到其他节点
    scp -r ~/hbase/ cloud2:~/
    scp -r ~/hbase/ cloud3:~/
    scp -r ~/hbase/ cloud4:~/
    scp -r ~/hbase/ cloud5:~/
    scp -r ~/hbase/ cloud6:~/
    将配置好的HBase拷贝到每一个节点并同步时间。

    Spark安装

    安装scala:
    tar –zxvf scala-2.10.5.tgz
    mv scala-2.10.5 scala

    安装spark:
    tar -zxvf spark-1.3.0-bin-hadoop2.3.tgz
    mv spark-1.3.1 spark

    进入spark目录,修改文件slaves
    vi conf/slaves
    cloud2
    cloud3
    cloud4
    cloud5
    cloud6

    修改spark-env.sh
    vi conf/spark-env.sh

    export SPARK_MASTER_IP=cloud1 
    export SPARK_WORKER_MEMORY=512m 
    export JAVA_HOME=/usr/java/jdk 
    export SCALA_HOME=/home/cloud/scala 
    export SPARK_HOME=/home/cloud/spark 
    export HADOOP_CONF_DIR=/home/cloud/hadoop/etc/hadoop 
    export SPARK_LIBRARY_PATH=$SPARK_HOME/lib 
    export SCALA_LIBRARY_PATH=SPARK_LIBRARY_PATH 
    export SPARK_WORKER_CORES=1 
    export SPARK_WORKER_INSTANCES=1 
    export SPARK_MASTER_PORT=7077
    #错误:节点无法加载到hbase包
    #处理方式:sh中加入classpath指向hbasejar路径
    export SPARK_CLASSPATH=/home/cloud/hbase/lib/*
    export SPARK_DAEMON_JAVA_OPTS="-Dspark.storage.blockManagerHeartBeatMs=6000000"

    spark配置详见:
    Spark 配置

    将cloud1上配置好的spark和scala通过scp复制到其他各个节点上(注意其他节点上的profile文件也要一致)

    各个节点的profile文件内容:

    export JAVA_HOME=/usr/java/jdk
    export HADOOP_HOME=/home/cloud/hadoop
    export SCALA_HOME=/home/cloud/scala
    export SPARK_HOME=/home/cloud/spark
    export HBASE_HOME=/home/cloud/hbase
    export PATH=$PATH:$JAVA_HOME/bin:$SCALA_HOME/bin:$SPARK_HOME/bin:$HADOOP_HOME/bin:$HBASE_HOME/bin
  • 相关阅读:
    ajax三级联动
    ajax基础
    pdo连接数据
    jquery选择器和基本语句
    会话
    封装连接类
    1218数据访问
    php登陆与注册
    数据库连接和乱码问题
    mysql 严格模式 Strict Mode说明(text 字段不能加默认或者 不能加null值得修改方法)
  • 原文地址:https://www.cnblogs.com/jchubby/p/5449383.html
Copyright © 2011-2022 走看看