Hadoop集群和Hbase集群搭建

废话不多说,直接进去主题。(本人亲自验证过,可行)

1、准备:

Hadoop2.6+hbase0.98.1+jdk1.7

Linux centos6.5


2、hadoop2.6完全分布式的安装部署

Linux系统:centos 6.5  32位

2.1 修改主机名和/etc/hosts文件

1)修改主机名(非必要)

vi/etc/sysconfig/network

HOSTNAME=master

重启后生效。

2)/etc/hosts是ip地址和其对应主机名文件,使机器知道ip和主机名对应关系,格式如下:

#IPAddressHostName

10.16.156.164    master

10.16.156.52    slave1

10.16.156.55    slave2

 

2.2 配置免密码登陆SSH

1)生成密钥:在root@master根目录下执行如下语句:

ssh-keygen -tdsa -P '' -f ~/.ssh/id_dsa

以上是两个单引号。

2)将id_dsa.pub(公钥)追加到授权的key中:

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

3)将认证文件复制到其它节点上:

         scp ~/.ssh/authorized_keys 用户@主机名:~/.ssh/

例如:scp ~/.ssh/authorized_keys root@slave1:~/.ssh/

 

4)测试:

         ssh 主机名(如:ssh slave1 

第一次要确认连接,输入yes即可。

2.3 各节点上安装jdk

注:(如果已经安装jdk请跳过
1)选择的版本是jdk-7u71-linux-i586.tar.gz
2)上传到root用户目录下,

3)解压:tarvxf jdk-7u71-linux-i586.tar.gz–C/usr/   (解压到usr目录下)

 

4)配置环境变量:vi/etc/profile加入以下三行

#set javaenvironment

        JAVA_HOME=/usr/jdk1.7.0_71

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

        PATH=$JAVA_HOME/bin:$PATH

        export JAVA_HOME CLASSPATH PATH

 

5)执行source/etc/profile使环境变量的配置生效
6
)执行java –version查看jdk版本,验证是否成功。

成功会显示如下:

 

2.4 Hadoop安装(完全分布式)

每台节点都要安装hadoop。上传hadoop-2.6.0.tar.gz到用户root目录下。

1)解压

tar -zvxfhadoop-2.6.0.tar.gz –C/usr/hadoop/

(注:如果目录不存在可以手动创建:mkdir /usr/hadoop)

2)添加环境变量:vi/etc/profile,尾部添加如下

exportHADOOP_HOME= /usr/hadoop/hadoop-2.6.0

    exportHADOOP_COMMON_HOME=$HADOOP_HOME

    exportHADOOP_HDFS_HOME=$HADOOP_HOME

    exportHADOOP_MAPRED_HOME=$HADOOP_HOME

    exportHADOOP_YARN_HOME=$HADOOP_HOME

    exportHADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop

    exportPATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HADOOP_HOME/lib
   

    export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
    
exportHADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"

设置立即生效:  

source/etc/profile

查看Hadoop是否安装成功:hadoopversion 如图:

 

 3)修改Hadoop配置文件(Hadoop目录下的/etc/hadoop目录下)

(1)core-site.xml

 

    hadoop.tmp.dir

    /usr/hadoop/hadoop-2.6.0/tmp

 

 

    fs.defaultFS

    hdfs://master:9000

 

2hdfs-site.xml

 

 

    dfs.namenode.name.dir

    file:///usr/hadoop/hadoop-2.6.0/dfs/name

 

 

    dfs.datanode.data.dir

    file:///usr/hadoop/hadoop-2.6.0/dfs/data

 

 

    dfs.replication

    1

 

  

3mapred-site.xml

 

             mapred.job.tracker

             master:9001

 


(4

1slaves中添加

	slave1
	slave2
2masters中添加
	slave1
	slave2

6分别在etc/Hadoop/下的hadoop-env.sh和yarn-env.sh中添加JAVA_HOME

         export JAVA_HOME= /usr/jdk1.7.0_71/

 
配置文件解释:

hadoop-env.sh:用于定义hadoop运行环境相关的配置信息,比如配置JAVA_HOME环境变量、为hadoop的JVM指定特定的选项、指定日志文件所在的目录路径以及master和slave文件的位置等;

core-site.xml: 用于定义系统级别的参数,它作用于全部进程及客户端,如HDFS URL、Hadoop的临时目录以及用于rack-aware集群中的配置文件的配置等,此中的参数定义会覆盖core-default.xml文件中的默认配置;

hdfs-site.xmlHDFS的相关设定,如文件副本的个数、块大小及是否使用强制权限等,此中的参数定义会覆盖hdfs-default.xml文件中的默认配置;

mapred-site.xmlmapreduce的相关设定,如reduce任务的默认个数、任务所能够使用内存的默认上下限等,此中的参数定义会覆盖mapred-default.xml文件中的默认配置;

masters: hadoop的secondary-masters主机列表,当启动Hadoop时,其会在当前主机上启动NameNode和JobTracker,然后通过SSH连接此文件中的主机以作为备用NameNode;

slaves:Hadoop集群的slave(datanode)和tasktracker的主机列表,master启动时会通过SSH连接至此列表中的所有主机并为其启动DataNode和taskTracker进程;

Hadoop-metrics2.properties:控制metrics在hadoop上如何发布属性

Log4j.properties:系统日志文件、namenode审计日志、tarsktracker子进程的任务日志属性

2.5 运行Hadoop

1)格式化。到bin目录下执行

hdfs namenode –format

2)启动Hadoop  。在sbin目录下执行

start-dfs.sh 
start-yarn.sh

也可以用一条命令:

start-all.sh

3jps查看进程   ,可以看到最少如下几个线程:

访问http://master:50070

4)停止Hadoop。在sbin目录下执行

stop-all.sh

3、搭建Hbase集群

为了和hadoop-2.6.0匹配,选择的hbase版本为0.98.9

环境说明

·        JDK1.7+

·        Hadoop 2.6.0

·        CentOS 6.5+

·        HBase-0.98.9

Hadoop集群机器对应于HBase用途如下:

hostname

IP

Hadoop用途

HBase用途

master

10.16.156.164

NameNode/ResouceManager

master

slave1

10.16.156.52

DataNode/NodeManager

RegionServer

slave2

10.16.156.55

DataNode/NodeManager

RegionServer

 

安装配置

1、下载发布包

HBase官方下载最新的版本 hbase-0.98.9-hadoop2-bin.tar.gz (支持hadoop2)为例:

$ tar vxf hbase-0.98.9-hadoop2-bin.tar.gz –C/usr/

注意:(当版本不一致时执行以下操作,该文档所用的版本不需要执行该操作。)由于 HBase 依赖 Hadoop,在分布式模式下,Hadoop版本必须和HBase下的版本一致。用你运行的分布式Hadoop版本jar文件替换HBase lib目录下的Hadoop jar文件,以避免版本不匹配问题,也可以根据情况自己编译发布包。

 

2、配置系统环境

vi /etc/profile加入以下内容:

#HBase  micmiu.com
export HBASE_HOME="/usr/hbase-0.98.9-hadoop2"
export PATH=$HBASE_HOME/bin:$PATH

$ source/etc/profile  使更改的配置立即生效

 

3、配置HBase参数

1)修改配置文件:<HBASE_HOME>/conf/hbase-env.sh

export JAVA_HOME = /usr/jdk1.7.0_71

 

2)修改配置文件:<HBASE_HOME>/conf/hbase-site.xml

   

       hbase.rootdir

       hdfs://master:9000/hbase

   

   

       hbase.cluster.distributed

       true

   

   

       hbase.master

      master:60000

   

   

       hbase.zookeeper.quorum

        master,slave1,slave2

  

 

在上面的配置文件中,第一个属性指定本机的hbase的存储目录;第二个属性指定hbase的运行模式,true代表全分布模式;第三和第四个属性是关于Zookeeper集群的配置。我的Zookeeper安装在master,slave1和slave2上(Zookeeper个数必须是奇数个)。

 

说明:全分布式的HBase集群需要Zookeeper实例运行,并且需要所有的HBase节点能够与Zookeeper实例通信。默认情况下Hbase自身维护着一组默认的Zookeeper实例。不过用户可以配置独立的Zookeeper实例,这样能使HBase系统更加健壮。

要使用独立的Zookeeper实例,需要修改conf/hbase-env.sh配置文件,修改其中的

exportHBASE_MANAGES_ZK=false

默认值为true,如将其修改为false,表示不使用默认的Zookeeper实例。

 

4、修改配置文件:/conf/regionservers 

slave1

slave2

这就意味着,HBaseRegionServer运行在slave1slave2上面。

regionservers文件列出了所有运行hbase的机器(即HRegionServer)。此文件的配置和Hadoop中的slaves文件十分相似,每行指定一台机器的主机名。当HBase启动的时候,会将此文件中列出的所有机器启动。关闭时亦如此。

 

注意:HBase集群的所有机器上都需要执行上面的所有安装配置过程。

5、向其它3个结点复制Hbase相关配置

scp -r hbase/slave1:/usr/

scp -r hbase/slave2:/usr/

 

 

6、启动HBase

cd /bin

./start-hbase.sh

查看slave1的进程:

·        打开 http://master:60010 主界面,可以查看Master运行状态。

 

 

7shell演示建表、插入数据

 

8、停止HBase./stop-hbase.sh

 


 

java客户端连接hbase

修改Windows的如下文件C:\Windows\System32\drivers\etc中的hosts添加

10.16.156.78    master

10.16.156.81    slave1

10.16.156.70    slave2


 

4、常见错误:

1、 启动hbase和zookeeper时:

java.net.BindException:Address already in use

    at sun.nio.ch.Net.bind0(Native Method)

    at sun.nio.ch.Net.bind(Net.java:444)

解决方案:

修改"hbase.zookeeper.property.clientPort","2181"的端口号。如2181改成21811等

 

2、Eclipse中执行Hbase程序时出现java.lang.NoClassDefFoundError:org/cloudera/htrace/Trace

解决方案:

<dependency>

        <groupId>org.cloudera.htracegroupId>

        <artifactId>htrace-coreartifactId>   

        <version>2.04version>

    dependency>

3、配置免密码登陆SSH

遇到的错误:

但我的仍要求输入密码,原因是.ssh和authorized_keys权限不对,具体见:http://blog.csdn.net/hwwn2009/article/details/39852457

root用户登陆查看系统的日志文件:$tail/var/log/secure -n 20

…………

Oct  710:26:43 MasterServer sshd[2734]: Authentication refused: bad ownership ormodes for file /home/hadooper/.ssh/authorized_keys
Oct  7 10:26:48 MasterServer sshd[2734]: Accepted password for hadooperfrom ::1 port 37456 ssh2
Oct  7 10:26:48 MasterServer sshd[2734]: pam_unix(sshd:session): sessionopened for user hadooper by (uid=0)
Oct  7 10:36:30 MasterServer sshd[2809]: Accepted password for hadooperfrom 192.168.1.241 port 36257 ssh2
Oct  7 10:36:30 MasterServer sshd[2809]: pam_unix(sshd:session): sessionopened for user hadooper by (uid=0)
Oct  7 10:38:28 MasterServer sshd[2857]: Authentication refused: badownership or modes for directory /home/hadooper/.ssh

…………

提示/home/hadooper/.ssh和 /home/hadooper/.ssh/authorized_keys权限不对,修改如下:     

Shell代码  

1. chmod 700 ~/.ssh

2. chmod 600 ~/.ssh/authorized_keys  

 

 

4、启动Hadoop时:

1

slave2: Error: JAVA_HOME is not set and could not be found.

slave1: Error: JAVA_HOME is not set and could notbe found.

解决方案:

分别在etc/Hadoop/下的hadoop-env.sh和yarn-env.sh中添加JAVA_HOME

exportJAVA_HOME= /usr/jdk1.7.0_71/

2You have loaded library /usr/hadoop/hadoop-2.6.0/lib/native/libhadoop.so.1.0.0which might have disabled stack guard. The VM will try to fix the stack guardnow.

解决方案:

etc/profile中添加:

 exportHADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
 
exportHADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"

3进程中看不到seconaryNameNode进程时。

解决方案:

hadoop2.6.0/etc/hadoop下的masters文件中添加对应的主机名(类似slaves文件)

 

 

5、 启动hbase时:

1)

2015-01-26 13:05:36,664 ERROR [main]zookeeper.RecoverableZooKeeper: ZooKeeper create failed after 4 attempts

2015-01-26 13:05:36,666 ERROR [main]master.HMasterCommandLine: Master exiting

java.lang.RuntimeException: Failed constructionof Master: class org.apache.hadoop.hbase.master.HMaster

        atorg.apache.hadoop.hbase.master.HMaster.constructMaster(HMaster.java:3017)

        atorg.apache.hadoop.hbase.master.HMasterCommandLine.startMaster(HMasterCommandLine.java:186)

        atorg.apache.hadoop.hbase.master.HMasterCommandLine.run(HMasterCommandLine.java:135)

        atorg.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)

        atorg.apache.hadoop.hbase.util.ServerCommandLine.doMain(ServerCommandLine.java:126)

解决方案:

查看/etc/hosts中配置是否正确

 

6、 Caused by: java.net.ConnectException: Call Fromslave1/127.0.0.1 to master:8031 failed on connection exception:

解决方案:

vi /etc/hosts检查如下配置的

7

如果启动时出现sshd的连接错误,执行如下操作:

防火墙:serviceiptables stop

启动服务,servicesshd start
让其开机启动:chkconfig --level 35 sshd on

关闭防火墙:

1. 重启后永久性生效:

  开启:chkconfigiptables on

  关闭:chkconfigiptables off

2. 即时生效,重启后失效:

  开启:serviceiptables start

  关闭:serviceiptables stop

 

 




你可能感兴趣的:(Java)