Hadoop_HBase_Zookeeper_Cluster_Setup

Hadoop HBase Zookeeper的集群搭建


总体流程
  • 先配置一个节点(Master),再配置其他节点(Slaves)

环境说明
  • Arch Linux 4.9.11 — 三台虚拟机
  • Java version 1.7.0_131
  • Hadoop 2.7.3
  • HBase 1.2.6
  • Zookeeper 3.4.10

Getting Started

1. 配置hosts文件

打开/etc/hosts文件,将各节点的IP及主机名写入,形成映射。
格式如下:

192.168.56.101 hadoopmaster
192.168.56.102 hadoopslave1
192.168.56.102 hadoopslave2

然后将hosts文件复制给其他节点,如:

scp /etc/hosts root@hadoopslave1:/etc/hosts
scp /etc/hosts root@hadoopslave2:/etc/hosts

配置好后可以用命令 ping -c 4 hadoopslave1 来检测是否成功。(在任意节点上ping任意节点的主机名都成功,表明配置成功。)

2. 配置SSH免密登录

如果SSH服务没有启动,请先启动SSH服务,并设置为开机自启。(在Arch下为 systemctl start sshd;systemctl enable sshd

先打开/etc/ssh/sshd_config,将下面行的注释去掉:

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile        .ssh/authorized_keys

如果是用root用户来配置hadoop,即是root用户来使用ssh远程登录,还需要将PermitRootLogin这行的注释去掉并将其值改为yes

之后用scp命令将此文件传给其他各节点。传到slave1节点如: scp /etc/ssh/sshd_config root@hadoopslave1:/etc/ssh/sshd_config

然后在每台节点上执行 ssh-keygen -t rsa 来生成公钥。

将各节点上生成的公钥合并到主节点下的authorized_keys文件,并将此文件复制给所有从节点,执行:

cd ~/.ssh  # 如果没有.ssh目录,就先执行一下 `ssh 当前主机的主机名`
cat id_rsa.pub >> authorized_keys
ssh root@hadoopslave1 cat ~/.ssh/id_rsa.pub >> authorized_keys # 将slave1节点上的公钥加入主节点的authorized_keys文件
ssh root@hadoopslave2 cat ~/.ssh/id_rsa.pub >> authorized_keys
scp authorized_keys root@hadoopslave1:~/.ssh/authorized_keys # 将包含所有节点的公钥的authorized_keys文件复制给slave1节点
scp authorized_keys root@hadoopslave2:~/.ssh/authorized_keys

此时,SSH应该已经配置成功,可以执行 ssh hadoopslave1 来检查是否是免密登录。(按上述步骤配置,最后效果为 主节点与从节点间/从节点与从节点间 均可进行免密登录)

3. 配置需要的变量

在环境变量文件(如/etc/profile, /etc/bash.bashrc, /home/配置hadoop的用户/.bashrc, 有的文件在其他Linux发行版本中可能没有,请根据实际情况选择)中,添加如下配置:(各变量的值请按自己的路径写)

JAVA_HOME=/usr/lib/jvm/java-7-openjdk
HADOOP_HOME=/home/hadoop/hadoop-2.7.3
HBASE_HOME=/home/hbase-1.2.6
export HADOOP_CLASSPATH=$JAVA_HOME/lib/tools.jar
PATH=$HBASE_HOME/bin:$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH:$HOME/bin
export PATH

然后将文件传给其余节点。集群中所有节点的上述配置应保持一致。
可以在任意目录下执行 java -version$JAVA_HOME/bin/java -version 看输出信息是否一致,执行 hadoop , hbase 看能否得到对应输出(若输出command not found说明路径有错)。

4. 配置Hadoop

在本例子中,hadoop的安装路径为/home/hadoop/hadoop-2.7.3/

接下来,需要配置四个文件,先进入hadoop的配置文件目录,即执行 cd $HADOOP_HOME/etc/hadoop/ ,此目录下有很多xml文件。

添加如下配置到core-site.xml文件:

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hadoopmaster:9000</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/home/hadoop/tmp</value>
    </property>
    <property>
        <name>io.file.buffer.size</name>
        <value>131072</value>
    </property>
</configuration>

注意此例中主节点的主机名为hadoopmaster,配置时请填写自己的主节点主机名, hadoop.tmp.dir的路径也请填写自己配置的实际路径。

添加如下配置到hdfs-site.xml文件:

<configuration>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>/home/hadoop/hdfs/name</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>/home/hadoop/hdfs/data</value>
    </property>
    <property>
        <name>dfs.replication</name>
        <value>2</value>
    </property>
    <property>
        <name>dfs.blocksize</name>
        <value>256m</value>
    </property>
</configuration>

配置中涉及到路径的地方请换成自己的实际路径。replication为数据的份数,默认为3。blocksize的默认值为64m。

添加如下配置到yarn-site.xml文件:

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

注意将’hadoopmaster’换为实际的主节点主机名。

添加如下配置到mapred-site.xml文件:
(此文件在从节点上需要,主节点不需要。)

<configuration>
<property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
</property>
<property>
    <name>dfs.permissions</name>
    <value>false</value>
</property>
</configuration>

此文件的配置不需要进行更改。

添加如下配置到slaves文件:

hadoopslave1
hadoopslave2

此文件需要包含所有从节点的主机名,此例中只有两个从节点。

在hadoop-env.sh, mapred-env.sh, yarn-env.sh文件中配置所需变量,添加下面的变量到前述的三个文件中:

export JAVA_HOME=/usr/lib/jvm/java-7-openjdk
HADOOP_LOG_DIR=/home/hadoop/hadoop_logs
export HADOOP_LOG_DIR=${HADOOP_LOG_DIR}/$USER
HADOOP_PID_DIR=/home/hadoop/hadoop_pids
export HADOOP_PID_DIR=${HADOOP_PID_DIR}

JAVA_HOME变量是必须配置的,log目录和pid目录可以不配置,只是官网上说最好将pid和log的目录设置为自定义的路径。

至此,主节点上的hadoop已经配置完成。接下来只要将/home/hadoop目录scp -r到从节点hadoopslave1和hadoopslave2上就可以了。

官网上有上述配置文件中各属性的含义:
* core-default.xml
* hdfs-default.xml
* mapred-default.xml
* yarn-default.xml

5. 配置Zookeeper

将zookeeper安装到主节点后,配置zoo.cfg文件即可完成配置。此例中zookeeper安装在/home/zookeeper-3.4.10/ 。

进入zookeeper安装目录的conf目录下,新建文件zoo.cfg,添加如下配置:

tickTime=2000
dataDir=/home/zookeeper/datadir
clientPort=2181
initLimit=5
syncLimit=2
server.1=hadoopmaster:2888:3888
server.2=hadoopslave1:2888:3888
server.3=hadoopslave2:2888:3888

注意替换dataDir和server的值。

然后将主节点的zookeeper目录scp -r到各个从节点就行了。

6. 配置HBase —基于HDFS

此例中HBase安装在/home/hbase-1.2.6/ 。

添加如下配置到hbase-site.xml:

<configuration>
  <property>
    <name>hbase.zookeeper.quorum</name>
    <value>hadoopmaster,hadoopslave1,hadoopslave2</value>
    <description>The directory shared by RegionServers.
    </description>
  </property>
  <property>
    <name>hbase.zookeeper.property.dataDir</name>
    <value>${hbase.tmp.dir}/zookeeper</value>
    <description>Property from ZooKeeper config zoo.cfg.
    The directory where the snapshot is stored.
    </description>
  </property>
  <property>
    <name>hbase.rootdir</name>
    <value>hdfs://hadoopmaster:9000/hbase</value>
    <description>The directory shared by RegionServers.
    </description>
  </property>
  <property>
    <name>hbase.cluster.distributed</name>
    <value>true</value>
    <description>The mode the cluster will be in. Possible values are
      false: standalone and pseudo-distributed setups with managed ZooKeeper
      true: fully-distributed with unmanaged ZooKeeper Quorum (see hbase-env.sh)
    </description>
  </property>
  <property>
    <name>hbase.tmp.dir</name>
    <value>/home/hbase/tmp</value>
  </property>
</configuration>

注意替换相关配置为自己的实际值。

/home/hbase-1.2.6/conf/hbase-env.sh文件中也需要配置JAVA_HOME。(pid和log变量选配)

/home/hbase-1.2.6/conf/regionservers文件中的内容和hadoop的slaves文件一样。(所有从节点的主机名)

将hdfs-site.xml文件复制到conf目录下,或者创建链接也可以。

然后将hbase目录scp -r到各个从节点上。

7. 启动
start-dfs.sh
start-yarn.sh
start-hbase.sh

在浏览器地址栏访问 hadoopmaster:50070 可以进入hadoop页面, 访问 hadoopmaster:16010 可以进入hbase页面。hadoop页面中查看live nodes若与从节点个数相等,则成功。

运行上面的三个脚本后,各节点下的jps结果为:

主节点:

hadoopmaster

从节点1:

hadoopslave1

从节点2:

hadoopslave2


Attentions

  • hosts/ssh/jdk等环境变量/hadoop/hbase/zookeeper的路径在各节点上应该保持一致 —所以最好是先配好一个,然后scp给其余节点
  • CDH是一个在集群上部署hadoop的方便工具 —我还没用过,暂时不写
  • 配置文件里的单词/语句一定要写对
  • 多关注输出信息,遇到问题先看log日志(namenode/datanode/yarn等都有对应的.log文件)。如果看了日志还不会解决,就上网搜错误信息

References


©Liberty

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值