1-0 三台PC集群的搭建(noHA)

来源:互联网 发布:java b2b 开源 编辑:程序博客网 时间:2024/06/06 03:54


1.部署

搭建方案(no_HA):

project

hadoop

hadoop

Hbase

zookeeper

主机

master1

Namenode

datanode(NM)

HMaster

HRegionServer

zk

slave1

SNM,JHS

datanode(NM)

HMaster

HRegionServer

zk

slave2

RM

datanode(NM)

HRegionServer

zk

 

2.LINUX基础环境搭建

(1) JDK

安装JDK(jdk-7u40-linux-i586.tar.gz);(此步所有机子都要做)

部署目录  /opt/ jdk1.7.0_45

配置环境变量

(1) vi/etc/profile.d/java.sh  (编辑文件)

(2) 添加

#set java environment

export JAVA_HOME=/opt/jdk1.7.0_45

export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre:$PATH   

export CLASSPATH=$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar

 (3) 验证是否安装成功:java –version

 

(2) hosts 

修改hosts 

(此步骤所有机子都要做)

vi /etc/hosts

 

修改为:ip自定义

192.168.1.101   master1

192.168.1.102   slave1

192.168.1.103   slave2

(3) hostname

修改hostname此步骤所有机子都要做)

vi/etc/sysconfig/network

修改为:

NETWORKING=yes

HOSTNAME=master1(slave1,slave2)

(4) ssh

配置ssh访问(看说明)

1)在(master1)当前用户(hadoop)主目录下执行

(1)$ ssh-keygen-t rsa  

(2)cat.ssh/id_rsa.pub >> .ssh/authorized_keys

(3)chmod700  .ssh

(4)chmod644  .ssh/authorized_keys

2)master1到slave1,slave2机器的SSH无密码登录

接下来把authorized_keys复制到的slave1,slave2上。

scp~/.ssh/authorized_keys  远程用户名@远程服务器IP:~/

现在是master1可以无密码访问slave1,slave2.

要想实现任意两台机器互访,就在每台机器上都生成id_rsa和id_rsa.pub,然后把每台机器的公钥都添加进authorized_keys,然后把authorized_keys分发到所有机器上

(5) 防火墙和selinux

关闭机器的防火墙和selinux(此步骤所有机子都要做)

关闭防火墙:

#/etc/init.d/iptables stop #关闭防火墙。

#chkconfig iptables off #关闭开机启动。

关闭selinux:

vi/etc/selinux/config,

把SELINUX=enforcing改成SELINUX=disable;需要重启机器

(6) 时间一致

授时服务(此步骤所有机子都要做)

配置时间同步

crontab-e

/usr/sbin/ntpdatecn.pool.ntp.org

手动同步时间

/usr/sbin/ntpdatecn.pool.ntp.org

(7)用户和本地目录

创建用户账号和Hadoop部署目录和数据目录(此步骤所有机子都要做)

#创建hadoop 用户

/usr/sbin/groupaddhadoop

 

#分配hadoop 到 hadoop组中

/usr/sbin/useraddhadoop -g hadoop

 

#创建hadoop,hbase,zookeepr部署目录

opt/hadoop-2.2.0

opt/hbase-0.96.0-hadoop2

opt/zookeeper-3.4.5

#修改目录结构权限为为hadoop

#本地文件系统涉及到的目录

mkdir -p /data/tmp_hadoop  /data/hdfs/dn    /data/hdfs/nn   

/data/log/hadoop-hdfs   /data/log/hadoop-yarn  /data/log/hadoop-mapred

/data/yarn/local /data/yarn/logs

mkdir -p

/data/zookeeper/data/data/zookeeper/datalog

/data/tmp_hbase 

/data/hbase

/data/journal

 

 

3.zookeeper集群安装

(1)部署

部署3个节点的 ZooKeeper,分别部署在master1、slave1、slave2三台机器上。ZooKeeper 部署的节点数为奇数个。

每个 ZooKeeper节点:

部署目录:/opt/zookeeper-3.4.5

创建目录

mkdir –p/data/zookeeper/data

mkdir –p/data/zookeeper/datalog

(2)环境变量

 vi/etc/profile.d/zookeeper.sh 

添加

#set zookeeper environment

export ZOOKEEPER_HOME=/opt/zookeeper-3.4.5

export PATH=$PATH:$ZOOKEEPER_HOME/bin

export ZOO_LOG_DIR=/data/zookeeper/datalog

 

(3)zoo.cfg

#编辑zookeeper-3.4.5 /conf/zoo.cfg

tickTime=2000

initLimit=10

syncLimit=5

dataDir= /data/zookeeper/data

dataLogDir=/data/zookeeper/datalog

clientPort=2181

server.1=master1:2888:3888

server.2=slave1:2888:3888

server.3=slave2:2888:3888

(4)同步zookeeper集群

(5) myid

在各个zookeepr节点上修改myid

在dataDir目录中创建名为 “myid” 的文件,在 server.1 的myid 文件中写入”1”这个数字,在 server.2 的myid 文件写入”2”, server.3 写”3”。

比如:在master3上

echo  1   > /data/zookeeper/data/myid

(6)启动

zookeeper(所有zookeeper服务器都要运行)

zkServer.sh start

jps: QuorumPeerMain

 

4.HADOOP 集群

(1)部署

部署目录:/opt/hadoop-2.2.0

创建目录

master1,slave1(NN,SNN)

mkdir –p /data/hdfs/nn

所有hadoop节点:

mkdir–p /data/tmp_hadoop   /data/hdfs/dn  /data/log/hadoop-hdfs   /data/log/hadoop-yarn  /data/log/hadoop-mapred  /data/yarn/local  /data/yarn/logs

(2)环境变量

vi/etc/profile.d/hadoop.sh 

添加

#set hadoop environment

export HADOOP_HOME=/opt/hadoop-2.2.0 

export PATH=$PATH:$HADOOP_HOME/bin

export PATH=$PATH:$HADOOP_HOME/sbin

(3)配置文件修改

1) 配置masters,(这里指定Secondarynamenode)

slave1

2) 配置slaves  

#标识集群的datanode

master1

lave1

slave2

3) 配置hadoop-env.sh

export JAVA_HOME=/opt/jdk1.7.0_45

export HADOOP_LOG_DIR=/data/log/hadoop-hdfs

export YARN_LOG_DIR=/data/log/hadoop-yarn

export HADOOP_MAPRED_LOG_DIR=/data/log/hadoop-mapred

4) 配置yarn-env.sh

export JAVA_HOME=/opt/jdk1.7.0_45

5) 编辑core-site.xml

<property>

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

 <value>/data/tmp_hadoop</value>

 <description>Abasefor other temporary directories.</description>

</property>

<property>                                           

 <name>fs.defaultFS</name>                          

 <value>hdfs://master1:9000</value>

</property>

<property>

      <name>fs.trash.interval</name>

      <value>1440</value>

        <!--24h,0代表关闭-->

</property>

<property>

      <name>fs.trash.checkpoint.interval</name>

      <value>1440</value>

         <!--一般小于等于fs.trash.interval-->

</property>

<!-- i/o properties -->

<property>

         <name>io.file.buffer.size</name>

         <value>131072</value>

         <!--读写序列化文件缓冲区大小-->

</property>

<!-- Local file system -->

<property>

        <name>dfs.blocksize</name>

        <value>67108864</value>

        <!--268435456256M-->

</property>

6) 编辑hdfs-site.xml

<!--需要配置本地目录的地方-->

<property>                                            

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

        <value>/data/hdfs/nn</value>

              <!--file://${hadoop.tmp.dir}/dfs/name-->

              <!--命名空间和事务处理日志-->

</property>

<property>                                         

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

        <value>/data/hdfs/dn</value>

              <!--file://${hadoop.tmp.dir}/dfs/data-->

              <!--DataNode本地文件存储的路径-->

</property>

<!--security -->

<property>

 <name>dfs.permissions.superusergroup</name>

 <value>hadoop</value>

</property>

 

<!--Secondary Namenode-->

<property>

<name>dfs.namenode.secondary.http-address</name>

<value>master2:9001</value>            

</property>

<property>

        <name>dfs.namenode.handler.count</name>

        <value>100</value>

              <!--namenode服务线程数-->

</property>

<property> 

        <name>dfs.replication</name> 

        <value>3</value> 

              <!--冗余备份数目,一般为3-->

</property>  

7) 编辑mapred-site.xml

<!-- MapReduce -->

<property>

         <name>mapreduce.framework.name</name>   

         <value>yarn</value>

               <!--运行框架设置为 HadoopYARN-->

</property>

<property>

       <name>mapreduce.map.memory.mb</name>

       <value>1536</value>

       <!--Maps最大资源-->

</property>

<property>

       <name>mapreduce.map.java.opts</name>

       <value>-Xmx1024M</value>

       <!--MapsChild JVM的heap-size堆大小-->

</property>

<property>

       <name>mapreduce.reduce.memory.mb</name>

       <value>3072</value>

       <!--Reduces最大资源-->

</property>

<property>

       <name>mapreduce.reduce.java.opts</name>

       <value>-Xmx2560M</value>

       <!--ReducesChild JVM的heap-size堆大小-->

</property>

<property>

       <name>mapreduce.task.io.sort.mb</name>

       <value>512</value>

       <!--sort整理数据最大使用内存设置-->

</property>

<property>

       <name>mapreduce.task.io.sort.factor</name>

       <value>100</value>

       <!--整理数据时一次合并的流数量-->

</property>

<property>

       <name>mapreduce.reduce.shuffle.parallelcopies</name>

       <value>50</value>

       <!--Reduce运行的最大并行复制数量,用来获取大量maps的输出-->

</property>   

<!--JobHistoryServer,另一部分配置在yarn-site.xml-->

<property>

        <name>mapreduce.jobhistory.address</name>   

         <value>slave1:10020</value>                        

</property>

<property>

        <name>mapreduce.jobhistory.webapp.address</name>

        <value>slave1:19888</value> 

        <!--MRJobHistory服务的web界面-->       

</property>

<property>

        <name>mapreduce.jobhistory.intermediate-done-dir</name>

        <value>/mr-history/tmp</value>  

       <!--MRjobs写入history files的目录-->                                   

</property>

<property>

        <name>mapreduce.jobhistory.done-dir</name>

        <value>/mr-history/done</value>

        <!--JHS管理的history files目录-->           

</property>

<property>

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

        <value>13562</value>

</property>

8) 编辑yarn-site.xml

<!--For ResourceManager-->

<property>

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

       <value>/data/yarn/local</value>

       <!--${hadoop.tmp.dir}/nm-local-dir-->

       <!--中间数据写入的路径-->

</property>

<property>

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

       <value>/data/yarn/logs</value>

       <!--${yarn.log.dir}/userlogs-->

       <!--Whereto store container logs-->

</property>

<property>

       <name>yarn.nodemanager.remote-app-log-dir</name>

       <value>/tmp/logs</value>

       <!--开启日志聚合后,应用程序的日志将被移到该HDFS目录下-->

</property>

<property>

       <name>yarn.nodemanager.remote-app-log-dir-suffix</name>

       <value>logs</value>

       <!--(远程日志目录被创建)${yarn.nodemanager.remote-app-log-dir}/${user}/${thisParam}-->

</property>

<property>

        <name>dfs.datanode.max.xcievers</name>

        <value>4096</value>

      <!--Datanode 有一个同时处理文件的上限, Hbase中要求修改的-->

</property>

<property>

        <name>yarn.log-aggregation-enable</name>

         <value>true</value>

               <!--是否启用日志聚合-->

</property>

 

 <!-- ResourceManager Configs -->

<property>

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

        <value>slave2:8088</value>

              <!--RMweb-->

</property>

<property>

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

       <value>slave2:8033</value>

          <!--RM admin interface.-->

</property>

<property>

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

        <value>slave2:8032</value>

              <!--RM设置客户端提交job-->

</property>

<property>

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

        <value>slave2:8030</value>

              <!--schedulerinterface -->

</property>

<property>

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

      <value>slave2:8031</value>

</property>

<property>

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

      <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>

         <!--resource scheduler class-->

</property>

<property>

     <name>yarn.scheduler.minimum-allocation-mb</name>

     <value>512</value>

        <!--RM分配给每个container的最小内存-->

</property>

<property>

     <name>yarn.scheduler.maximum-allocation-mb</name>

     <value>4096</value>

        <!--RM分配给每个container的最大内存-->

</property>

<!--NodeManager-->

<property>

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

       <value>mapreduce_shuffle</value>

</property>

<property>

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

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

</property>

<property>

       <name>yarn.nodemanager.resource.memory-mb</name>

       <value>8192</value>

       <!--定义NM上可以分配给container的物理内存总量-->

</property>

<property>

       <name>yarn.nodemanager.vmem-pmem-ratio</name>

       <value>2.1</value>

       <!--最大虚拟内存比例for each container,-->

</property>

<property>

       <name>yarn.nodemanager.log.retain-seconds</name>

       <value>10800</value>

       <!--日志在NM本地保存的默认时间,日志聚合关闭时有效-->

</property>

 

<!--JobHistoryServer-->

<property>

       <name>yarn.log-aggregation.retain-seconds</name>

       <value>-1</value>

       <!--设置聚合日志保留时间-->

</property>

<property>

       <name>yarn.log-aggregation.retain-check-interval-seconds</name>

       <value>-1</value>

       <!--参照聚合日志保留时间-->

</property>

 

(4)同步hadoop节点

(5) 启动

  master1(第一次需要格式化namenode)

hadoop namenode -format

启动(namenode,secondarynamenode,datanode)

start-dfs.sh

slave2,启动yarn(RM,NM)

start-yarn.sh

slave1,启动JHS

mr-jobhistory-daemon.sh start historyserver

 

访问:http://master1:50070

     http://slave2:8088

     http://slave1:19888

5.Hbase集群安装

(1)部署

前提:Hadoop集群,zookeeper集群已搭建好。

部署目录:/opt/hbase-0.96.0-hadoop2

Hbase节点上创建目录:

mkdir –p/data/hbase/logs

mkdir –p/data/hbase/tmp_hbase

(2)环境变量

vi/etc/profile.d/java.sh  (编辑文件)

#set HBase environment

export HBASE_HOME=/opt/hbase-0.96.0-hadoop2

export PATH=$PATH:$HBASE_HOME/bin

export HBASE_HEAPSIZE=4096

(3)修改最大文件句柄限制

HBase是数据库,会在同一时间使用很多的文件句柄。大多数linux系统使用的默认值1024是不能满足的,

(ubuntu为例)

gedit  /etc/security/limits.conf

hadoop  -nofile  32768

 hadoop  soft/hard nproc 32000

gedit  /etc/pam.d/ common-session

session required  pam_limits.so

(4)替换包

在分布式模式下,Hadoop版本必须和HBase下的版本一致。用你运行的分布式Hadoop版本jar文件替换HBaselib目录下的Hadoop jar文件,以避免版本不匹配问题。确认替换了集群中所有HBase下的jar文件。Hadoop版本不匹配问题有不同表现,但看起来都像挂掉了。(habse-0.96.0+hadoop-2.2.0,其中替换17个jar包

(5) 配置文件

1)修改/conf/regionservers文件,增加regionserver

master1

slave1

slave2

2)修改 /conf/hbase-env.sh

export  JAVA_HOME=/opt/jdk1.7.0_45

export HBASE_CLASSPATH=/opt/hadoop-2.2.0/etc/hadoop

export HBASE_MANAGES_ZK=false 

export HBASE_LOG_DIR=/data/hbase/logs

3)修改/conf/hbase-site.xml文件

<property>

<name>hbase.master</name>

<value>master1:60000</value>

</property>

<!--region server的共享目录,用来持久化Hbase-->

<property>

<name>hbase.rootdir</name>

<value>hdfs://master1:9000/hbase</value>

</property>

<property>

<name>hbase.cluster.distributed</name>

<value>true</value>

</property>

<property>

<name>hbase.zookeeper.property.clientPort</name>

<value>2181</value>

</property>

<property>

<name>hbase.zookeeper.quorum</name>

<value>master1,slave1,slave2</value>

<description>The directory shared by regionservers. </description>

</property>

<property> 

    <name>zookeeper.session.timeout</name> 

    <value>60000</value> 

</property> 

<property>

<name>hbase.tmp.dir</name>

<value>/data/hbase/tmp_hbase</value>

</property>

<property>

<name>hbase.regionserver.restart.on.zk.expire</name>

<value>true</value>

</property>

<property>

<name>hbase.regionserver.handler.count</name>

<value>10</value>

<description> 处理用户请求的线程数量,默认10</description>

</property>

 

(6)同步hbase节点

(7)启动

master1上

  bin/start-hbase.sh

  访问  http://master1:60010

测试:bin/hbase shell

 

 

0 0
原创粉丝点击