hadoop2.2+zookeeper+hbase安装详解

hadoop2集群搭建详解------------------------天津九安医疗电子--吴伟

一、需要软件

Jdk1.8.0_linux

Hadoop-2.2.0(Apache官网Stable版本)

Hbase-0.96.2(与Hadoop-2.2.0是配套的,不用覆盖jar包)

Zookeepr-3.4.5

# 集群结构图


IP地址

主机名

ZK

NN

DN

JN

HRS

HM

192.168.12.109

Master1

192.168.12.122

Master2

是(备)

是(备)

192.168.12.123

Slave1

192.168.12.126

Slave2

192.168.12.127

Slave3

192.168.12.129

Slave4

192.168.12.131

Slave5


二、基础配置

1、配置hosts文件,方便hadoop用主机名访问

vi /etc/hosts

2、设置ssh免密码登录

1) 进入 ~ 根目录下的  .ssh 目录(没有的话,创建.ssh目录)

2) 执行ssh-keygen -t  rsa

3) ls  产生俩个文件(每台都要执行 )

 

id-rsa     #私钥  id-rsa.pub   #公钥

在每台服务器上将公钥复制到无需登录的服务器上,在每一台服务器上执ssh-copy-id的命令。

例如:

在192.168.12.109上执行

     

ssh-copy-id -i  ~/.ssh/id_rsa.pub root@192.168.12.122

ssh-copy-id -i  ~/.ssh/id_rsa.pub root@192.168.12.123

。。。。。

验证:

ssh slave1

3、关闭防火墙(centos 7)

systemctl stop firewalld.service #停止firewall

systemctl disable firewalld.service #禁止firewall开机启动

4、安装jdk

1)设置环境变量  vi  /etc/profile  

  增加 export JAVA_HOME=/usr/local/jdk

       export HBASE_HOME=/usr/local/hbase

 

export HADOOP_HOME=/usr/local/hadoop

export ZOOKEEPER_HOME=/usr/local/zk

export

PATH=$PATH:$HBASE_HOME/bin:$HIVE_HOME/bin:$HADOOP_HOME/bin:

2)立即生效    source profile

三、zookeeper安装

1. zk服务器集群规模不小于3个节点(必须是奇数个),要求各服务器之间系统时间要保持一致。

2. 在节点的/usr/local目录下,解压缩tar -zxvf ###。

3. 设置环境变量 vi /etc/profile  增加ZOOKEEPER_HOME=~~~

   立即生效

Source /etc/profile

4. 在zk/conf目录下,重命名文件 mv zoo_sample.cfg  zoo.cfg

   编辑该文件,执行vi zoo.cfg

  修改dataDir=/usr/local/zk/data   ------------------存放数据目录

  新增:zk节点=对应的hadoop节点

    Server.1=master1:2888:3888

(一个是通信端口,一个是选举端口)

    Server.2=master2:2888:3888 

   Server.3=slave1:2888:3888

。。。。。。

5 创建文件夹存放数据目录mkdir /usr/local/zk/data

6 在data目录下,创建文件myid,值为1

7 把zk目录复制到其他节点

8 把其他节点中相应的myid的值改为2

9 启动:

  在三个节点上分别执行命令(在zk/bin下执行)zkServer.sh start

 执行后bin下多了zookeeper.out(日志)

10 检验,在三个节点上分别执行命令zkServer.sh status (leader或者follower)

时间同步

# yum install -y ntp  #安装ntp服务

# ntpdate cn.pool.ntp.org  #同步网络时间


四、hadoop2.2安装

# 修改7个配置文件

~/hadoop-2.2.0/etc/hadoop/hadoop-env.sh

~/hadoop-2.2.0/etc/hadoop/core-site.xml

~/hadoop-2.2.0/etc/hadoop/hdfs-site.xml

~/hadoop-2.2.0/etc/hadoop/mapred-site.xml

~/hadoop-2.2.0/etc/hadoop/yarn-env.sh

~/hadoop-2.2.0/etc/hadoop/yarn-site.xml

~/hadoop-2.2.0/etc/hadoop/slaves


# 1修改hadoop-env.sh配置文件(jdk 路径)

exportJAVA_HOME=/usr/local/jdk

# 2修改core-site.xml文件修改 

<configuration>

       <property>

              <name>fs.defaultFS</name>

              <value> hdfs://mycluster </value>

       </property>

   <property>

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

              <value>/usr/local/hadoop/tmp</value>

       </property>【这里的路径默认是NameNode、DataNode、JournalNode等存放数据的公共目录。用户也可以自己单独指定这三类节点的目录。】 

       <property>

              <name>dfs.nameservices</name>

              <value>mycluster</value>

       </property>

【NameService实际就是HDFS集群的别名。使用federation时,可使用了多个HDFS集群。】 

       <property>

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

              <value>master1:2181,master2:2181,slave1:2181,slave2:2181,slave3:2181,slave4:2181,slave5:2181</value>

       </property>

【这里是ZooKeeper集群的地址和端口。注意,数量一定是奇数,且不少于三个节点】 

</configuration>

# 3修改hdfs-site.xml配置文件

<configuration>

       <property>

              <name>dfs.nameservices</name>

              <value> mycluster </value>

       </property>

       <property>

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

              <value>master1,master2</value>

       </property>

【指定NameService是mycluster时的namenode有哪些】 


       <property>

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

              <value>master1:9000</value>

       </property>

【指定master1的RPC地址】

       <property>

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

              <value>master2:9000</value>

       </property>

【指定master2的RPC地址】

       <property>

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

              <value>master1:50070</value>

       </property>

【指定master1的http地址】

       <property>

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

              <value>master2:50070</value>

       </property>

【指定master2的http地址】

       <property>

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

              <value>qjournal://master1:8485;master2:8485;slave1:8485;slave2:8485;slave3:8485/mycluster</value>

       </property>

【指定mycluster的两个NameNode共享edits文件目录时,使用的JournalNode集群信息】

      <property>

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

        <value>true</value>

    </property>

【指定mycluster是否启动自动故障恢复,即当NameNode出故障时,是否自动切换到另一台NameNode】

       <property>

              <name>dfs.client.failover.proxy.provider.mycluster</name>

       <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>

       </property>

【指定mycluster出故障时,哪个实现类负责执行故障切换】 

       <property>

              <name>dfs.ha.fencing.methods</name>

              <value>sshfence</value>

       </property>

【一旦需要NameNode切换,使用ssh方式进行操作】 

       <property>

              <name>dfs.ha.fencing.ssh.private-key-files</name>

              <value>/root/.ssh/id_rsa</value>

       </property>

【如果使用ssh进行故障切换,使用ssh通信时用的密钥存储的位置】

       <property>

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

              <value>/usr/local/hadoop/tmp/journal</value>

       </property>

       <property>

              <name>dfs.replication</name>

              <value>3</value>

       </property>

【指定DataNode存储block的副本数量。默认值是3个,我们现在有7个DataNode,该值不大于7即可。】

       <property>

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

              <value>true</value>

       </property>

</configuration>

# 4修改 mapred¬-site.xml配置文件

<configuration>

<property>

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

<value>yarn</value>

</property>

【指定运行mapreduce的环境是yarn,与hadoop1截然不同的地方】 


</configuration>


# 5修改yarn-env.sh配置文件

exportJAVA_HOME=/usr/local/jdk

【这里的JAVA_HOME的值是jdk的安装路径】


# 6修改yarn-site.xml配置文件 

<configuration>

        <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.resourcemanager.hostname</name>

              <value>master1</value>

       </property>

【自定ResourceManager的地址,还是单点,这是隐患】

</configuration>


# 7修改slaves配置文件

master1

master2

slave1

slave2

slave3

slave4

slave5

【指定所有的DataNode节点列表,每行一个节点名称】














五、启动集群

1、启动Zookeeper集群

在usr/local/zk/bin 目录下

执行启动命令:zkServer.sh start

# 验证Zookeeper是否启动成功1

查看状态命令:zkServer.sh status 

在 master1上查看 zookeeper 的状态发现是 leader

在其他的机器上查看 zookeeper 的状态发现是 follower

#验证Zookeeper是否启动成功2

在usr/local/zk/bin 目录下

执行进入命令行命令:

zkCli.sh

Connecting to localhost:2181

 [zk: localhost:2181(CONNECTED) 0] ls /

[zookeeper]

[zk: localhost:2181(CONNECTED) 1]

出现这样的提示的话,那么 zookeeper 就启动成功了


2、格式化ZooKeeper集群,目的是在ZooKeeper集群上建立HA的相应节点。

在usr/local/hadoop/bin 目录下

执行命令: hdfs zkfc -formatZK

# 验证zkfc是否格式化成功

进入客户端 zkCli.sh 

[zk: localhost:2181(CONNECTED) 1] ls /hadoop-ha 

[mycluster] 

【格式化操作的目的是在ZK集群中建立一个节点,用于保存集群c1中NameNode的状态数据】


3、完全分布式 启动Hadoop(切记顺序不能乱)

# 在 master1,master2,slave1,slave2,slave3上分别启动 journalnode

[root@master1sbin]# ./hadoop-daemon.sh start journalnode

# 在master1,master2上分别格式化和启动namenode

从 master1和 master2中任选一个即可,这里选择的是 master1

[root@master1sbin]# ../bin/hdfs namenode –format

[root@master1sbin]# ./hadoop-daemon.sh start namenode

# 将master1上namenode的数据同步到master2中去,需要在master2上执行hadoop的命令

[root@rs227 sbin]# ../bin/hdfs namenode -bootstrapStandby

[root@rs227 sbin]# ./hadoop-daemon.sh start namenode

# 打开浏览器,访问master1跟master2的50070端口

如果都能访问到,说明你 namenode 启动成功了,并且这两个 namenode 都是 standby 状态

# namenode ( master1)转换成 active (这里不需要手动将 namenode 转换为 active 状态了,因为我们是交给 Zookeeper 管理,在后面会启动 ZooKeeperFailoverController )

# 启动所有的 datanodes(在master1上执行命令)

[root@master1sbin]# ./hadoop-daemons.sh start datanode

 [root@master1sbin]# jps

25627 Jps

24037 NameNode

25168 DataNode

23343 JournalNode

29367 QuorumPeerMain

# 实验一下手动切换 namenode 的状态 (这里也不需要做, Zookeeper 管理的,自动切换,下面会讲到)

# yarn启动

[root@master1sbin]# ./start-yarn.sh

starting yarn daemons

# 访问master1的8088端口查看ResourceManager的UI界面

 


# 启动ZooKeeperFailoverController

#在master1上执行命令

[root@master1sbin]# ./hadoop-daemon.sh start zkfc

#在master2上执行命令

[root@master2 sbin]# ./hadoop-daemon.sh start zkfc

# 打开浏览器,再访问master1跟master2的50070端口

发现 master1变成 active 状态了,而 master2还是 standby 状态

# 验证HDFS是否好用

[root@master1sbin]# ../bin/hadoop fs -putyarn-daemon.sh /yting

[root@master1sbin]# ../bin/hadoop fs -ls /yting

Found 1 items

-rw-r--r--   3root supergroup       4278 2014-06-1018:29 /yting/yarn-daemon.sh


# 验证YARN是否好用

[root@master1bin]# pwd

/usr/local/adsit/yting/apache/hadoop/hadoop-2.2.0/bin

[root@master1bin]# ./hadoop jar../share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jar pi 10 100

…( 不重要的部分就省略了,能出这个值就是对的,虚拟机可能会卡着不动,也可能会卡死,属于正常现象,内存消耗比较大 )

Job Finished in 25.361 seconds

valueof Pi is 3.14800000000000000000

# 验证HA高可用性,是否自动故障转移

在master1节点active namenode上执行 jps ,确定namenode进程,kill 将其杀掉,之后刷新页面我们发现master2节点(原standy)自动变成了 active namenode。




六、安装hbase

 

按照上图下载正确的hbase版本(版本问题很重要,是很多错误的根源)


# Hbase-0.96.2-hadoop2(启动双HMaster的配置,master1是主HMaster,master2是从HMaster)

# 解压Hbase-0.96.2-hadoop2-bin.tar.gz

  tar -zxvfhbase-0.96.2-hadoop2-bin.tar.gz

# 修改hbase-env.sh 文件

 [root@master conf]# vi hbase-env.sh

export JAVA_HOME=/usr/local/jdk

export HBASE_MANAGES_ZK=false

# 配置hbase-site.xml 文件

<configuration>

       <property>

               <name>hbase.rootdir</name>

               <value>hdfs://mycluster/hbase</value> <!-- 这里必须跟 core-site.xml 中的配置一样 -->

       </property>

       <property>

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

               <value>true</value>

       </property>

       <property>

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

               <value>/usr/local/hbase/tmp</value>

       </property>

       <property>

               <name>hbase.master</name>

               <value>60000</value> # 这里是对的,只配置端口,为了配置多个 HMaster

        </property>

       <property>

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

               <value>master1,master2,slave1,slave2,slave3,slave4,slave5</value>

       </property>

       <property>

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

                <value>2181</value>

       </property>

       <property>

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

               <value>/usr/local/zookeeper/data</value>

       </property>

</configuration>

# 配置regionservers

[root@master1conf]# vi regionservers

slave1

slave2

slave3

slave4

slave5

# 创建hdfs-site.xml的软连接

 [root@master1conf]# ln /usr/local/hadoop/etc/hadoop/hdfs-site.xml hdfs-site.xml

# 启动hbase

[root@master1hbase-0.96.2-hadoop2]# ./bin/start-hbase.sh

 [root@master1hbase-0.96.2-hadoop2]# jps

5131 Jps

4827 HRegionServer

4661 HMaster

6395 NodeManager

6272 DataNode

29849 QuorumPeerMain

# hbase shell 验证 1(查看hbase的版本跟状态)

hbase(main):003:0> list  # 刚刚创建的表

hbase(main):004:0> version

0.96.2-hadoop2, r1581096, Mon Mar 24 16:03:18 PDT2014

hbase(main):005:0> status

5 servers, 0 dead, 0.8000 average load

# hbase shell 验证 2(建表插入数据获取数据实时)

hbase(main):006:0> create'test','id','info'

0 row(s) in 0.4706 seconds

=> Hbase::Table - test

hbase(main):007:0> put'test','1314520','info:yousmile','forever’

hbase(main):008:0> get 'test,'1314520'

hbase(main):009:0> scan 'test'                                  

# 在master2上启动HMaster

[root@master2 bin]# ./hbase-daemon.sh start master

# 验证HMaster自动切换

# rs227上的日志查看

2014-07-03 15:43:47,798 INFO  [master:rs227:60000] mortbay.log: StartedSelectChannelConnector@0.0.0.0:60010

2014-07-03 15:43:47,897 INFO  [master:rs22760000]zookeeper.RecoverableZooKeeper: Node /hbase/master already exists and this isnot a retry

2014-07-03 15:43:47,898 INFO  [master:rs227:60000]master.ActiveMasterManager: Adding ZNode for/hbase/backup-masters/rs227,60000,1402645426368 in backup master directory

2014-07-03 15:43:47,908 INFO  [master:master2:60000] master.ActiveMasterManager:Another master is the active master, rs229,60000,1402645371520; waiting tobecome the next active master

这里说明zookeeper已经接管了,并且把master2作为一个备份的Hbase了,并且这里提示

waiting to become thenext active master (等待变成下一个活动的master),然后我们可以将master1上的hmaster进程给kill掉,当然,也可以使用 ./hbase-daemon.shstop master 来结束master1上的hmaster进程

只看红色标注的地方,意思就是说当我们 kill 掉 master1上的 hmaster 的时候, Nomaster available. Notifying waiting threads . A master is now available (找不到 master,唤醒等待的 hmaster 线程(认识 96 ),然后找到了等待的 hmaster ( master2)),然后 zookeeper 就接管并且将 master2上的 hmaster 从 等待 状态切换为 激活 状态了,然后就 ok 了。(当然也可以多开几个备用的 hmaster )

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,948评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,371评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,490评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,521评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,627评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,842评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,997评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,741评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,203评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,534评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,673评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,339评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,955评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,770评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,000评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,394评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,562评论 2 349

推荐阅读更多精彩内容