hadoop+hbase+zookeeper完全分布式环境搭建

最近一直在研究Hadoop,遇到了很多问题,把自己的一些心得写下来与大家分享一下。

一开始的时候,准备在windows环境下搭建Hadoop环境,因为毕竟Linux环境不太熟很多东西不会,搭了一个多星期,Hadoop还是没有成功的跑起来,遇到了各种问题,后来通过加了一个HadoopQQ群,经大师指点:“实际生产环境没有人会在Windows环境下跑Hadoop”,然后果断的就放弃了,开始借助虚拟机+Ubuntu来搭建Hadoop环境,按照网上的资料,一步一步的操作,用了一天的时间搭建成功,并且能够成功的运行wordcount(Hadoop helloworld程序),接着是安装Hive和Hbase,以上的环境都是伪分布式模式,为了实现Hadoop真正的集群,用公司现在不用的服务器,搭了一个3台服务器的小集群

废话不多说下面介绍Hadoop+Zookeeper+Hbase的环境搭建方法:

第一步:安装Hadoop(10.126.53.16 master,10.126.53.17 slave1,10.126.53.18 slave)

a)      安装jdk

通过命令

wget  http://download.oracle.com/otn-pub/java/jdk/7u21-b11/jdk-7u21-linux-x64.tar.gz

下载jdk

解压文件tar –zxvf  **.tar.gz(**指你下载的jdk版本)

配置环境变量: vi /etc/profile

添加下面两行

export JAVA_HOME=/usr/java/jdk1.6.0_24

export PATH=$JAVA_HOME/bin:$PATH

保存

执行.  /etc/profile 使环境变量生效

java –version

 

表明jdk安装成功

b)      修改服务器的hosts

 

127.0.0.1 后面是服务器主机名 去掉

并删除::1这一行

 

其中ec-app-143是服务器的主机名,重复以上操作修改集群的每一台服务器的hosts

c)      安装ssh,并实现集群服务器之间的免登陆

ssh-keygen

一直回车

cd ~/.ssh

cat id_rsa.pub >> authorized_keys

ssh localhost

需要将节点服务器slave和slave1的id_rsa.put拷贝到maste服务器并写入authorized_keys操作方法:scp slave:~/.ssh/id_rsa.pub slave_rsa.pub

   catslave_rsa.pub >> authorized_keys

slave1 的操作同上

           测试ssh slave

           第一登录的时候需要你输入slave机器的密码

           logout

           ssh slave

          如果不需要输入密码,说明master可以免登陆slave了,执行相同的操作让master能够免登陆所有的节点服务器

d)      下载hadoop包解压到master主机上

wget http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-1.1.2/hadoop-1.1.2.tar.gz

解压hadoop包

1.修改conf目录下的hadoop-env.sh

修改export JAVA_HOME=/usr/java/jdk1.6.0_24并将export前面的#号去掉

2.修改conf目录下的core-site.xml

<configuration>
        <property>
                <name>fs.default.name</name>
                <value>hdfs://master:9000</value>
        </property>
        <property>
                <name>hadoop.tmp.dir</name>
                <value>/root/hadoop/hadoop-1.1.2/tmp</value>
        </property>
</configuration>


 

    hadoop.tmp.dir一定要配置,不然会默认保存在tmp目录,服务器重启就会被删除

同时配置的目录必须要存在,不然hadoop启动会报错

3.修改conf目录下的hdfs-site.xml

<configuration>
        <property>
                <name>dfs.replication</name>
                <value>2</value>
        </property>
</configuration>

配置备份的份数

4.修改mapred-site.xml

      

<configuration>
        <property>
                <name>mapred.job.tracker</name>
                <value>master:9001</value>
        </property>
</configuration>

 

5.修改conf目录下的masters

master

6.修改conf目录下的slaves

slave
slave1

主机master上的hadoop就已经安装好了

需要将安装好的hadoop通过scp的方式拷贝到各个节点

         以上步骤完成后hadoop集群就安装好了

        

         将hadoop安装目录添加的环境变量中

         现在可以启动hadoop了:

         将主机的namenode 格式化

         hadoop namenode –format

         start-all.sh

         master服务器执行jps

                

18920 JobTracker
29597 Jps
18813 SecondaryNameNode
18630 NameNode


       节点上执行jps

        

12626 TaskTracker
12146 Jps
12499 DataNode

 

         通过浏览器访问:

         http://10.126.53.16:50030

        

http://10.126.53.16:50070

 

以上访问正常说明Hadoop已经启动成功

 

接着我们需要运行hadoop自带的一个wordcount程序

在hadoop安装目录下创建一个file文件夹,并在该文件夹下创建file1和file2文件,同时向文件里写入数据

 

file1:

 

file2

 

hadoop dfs –mkdir input

在hdfs文件系统中创建input目录

hadoop dfs –put file* input

将本地file1和file2文件放到hdfs文件系统的input目录

hadoop dfs -ls input

查看input

 

执行hadoop jar hadoop-examples-1.1.2.jar wordcount input output(input 输入目录,output存放结果目录)

 

hadoop dfs -ls output

 

hadoop dfs -cat output/part-r-00000

 

已经成功的搭建了Hadoop

 

第二步:安装zookeeper(如果使用hbase自带的zookeeper此步骤可以省略,不推荐)

下载安装zookeeper

wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.3.5/zookeeper-3.3.5.tar.gz

tar –zxvf zookeeper-3.3.5.tar.gz

进到conf目录下

mv zoo_sample.cfg zoo.cfg

修改zoo.cfg

 

修改dataDir

添加dataLogDir指定zookeeper存放日志的目录

进到dataDir也就是/root/hadoop/zookeeper-3.3.5/data

创建myid文件

10.126.53.16服务器 该文件内容为1

10.126.53.17服务器 该文件内容为2

10.126.53.18服务器 该文件内容为3

主机zookeeper就安装好了,并将zookeeper拷贝到节点服务器上

第三步:安装hbase

下载Hbase

wget http://apache.dataguru.cn/hbase/hbase-0.94.6.1/hbase-0.94.6.1-security.tar.gz

解压hbase

1.      修改conf目录下的hbase-env.sh

exportJAVA_HOME=/usr/java/jdk1.6.0_24

export HBASE_MANAGES_ZK=false

使用自己安装的zookeeper需要将HBASE_MANAGES_ZK该为false,默认情况是true使用hbase自带的zookeeper

2.      修改hbase-site.xml

 

hbase.rootdir:hbase数据存储目录

hbase.cluster.distributed:完全分布式模式:true 单机模式和伪分布式模式:false

hbase.zookeeper.quorum:指定zookeeper的集群

hbase.zookeeper.property.clientPort:端口号,必须和zoo.cfg文件中端口号一致

3.      conf/regionservers中添加hadoop-config/conf/slaves中所有的datanode节点。

4.  删除/hbase-0.90.2/lib/hadoop-core-*.jar

5.  拷贝hadoop下的core.jar到/hbase-0.90.2/lib

6.  4,5必须操作,不然通过java程序操作hbase会报错

启动hbase的顺序:Hadoop-》zookeeper-》hbase

停止zookeeper的顺序:Hbase-》zookeeper-》hadoop

启动hadoop

启动每台服务器的zookeeper:./zkServer start zoo.cfg

启动hbase:start-hbase.sh

Jps(主机)

 

节点服务器:jps

 

浏览器访问:http://10.126.53.16:60010/master-status

 

.一个HBaseJava客户端实例

(操作环境:window7myeclipse

1)下载hbase-0.90.6-tar.gz

2)创建一个javaproject——“HBaseClient”,将解压得到的hbase-0.90.6.jar,hbase-0.90.6-tests.jar添加到build path。

(3)新建hbase- site.xml(拷贝你的同名hbase配置文件过来也行),要将其添加到工程的classpath中,也即跟src平行,这是因为下面的代码中初始化 配置使用的是HBaseConfiguration.create(),关于这个在hbase的api使用说明中有这么一段注释:“Youneed a configuration object to tell the client where to connect.When you createa HBaseConfiguration, it reads in whatever you've set into yourhbase-site.xml and in hbase-default.xml, as long as these can be found onthe CLASSPATH”。

package com.util;

 

import java.io.IOException;

 

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.hbase.HBaseConfiguration;

import org.apache.hadoop.hbase.HColumnDescriptor;

import org.apache.hadoop.hbase.HTableDescriptor;

import org.apache.hadoop.hbase.client.HBaseAdmin;

 

publicclass HbaseUtil {

    privatestatic Configurationconf =null

   

    static

        conf = HBaseConfiguration.create(); 

   

     

 

    publicstaticvoid createTable(String tablename,String []cfs)throws IOException{ 

        HBaseAdmin admin = new HBaseAdmin(conf); 

        if(admin.tableExists(tablename)){ 

            System.out.println("table has existed."); 

       

        else

            HTableDescriptor tableDesc =newHTableDescriptor(tablename); 

            for(int i=0;i<cfs.length;i++){ 

                tableDesc.addFamily(newHColumnDescriptor(cfs[i])); 

           

            admin.createTable(tableDesc); 

            System.out.println("create table successfully."); 

       

   

     

    publicstaticvoid main(String []args){ 

     

        try

            createTable("dsinfo",new String[]{"publish","mark"}); 

        }catch(IOException e){ 

            e.printStackTrace(); 

       

         

   

}

运行代码:打印create table successfully.

主机执行 hbase shell

执行list

                                                                    

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值