Hadoop和HBase安装设置入门篇

测试环境与版本:

Debian 7.8.0 amd64 (虚拟机运行)
JDK 1.7.0_80 64bit
Hadoop 2.7.2
HBase 1.1.3


一. 基础准备:

创建三台或更多虚拟机。(由于要在每台机器上都操作一遍下面的步骤,不少步骤是可以统一进行的,故可在安装完jdk、hadoop后,再复制虚拟机)
Hadoop 依赖JDK和ssh,首要做的就是安装相应的软件。


1.1. 安装JDK,设置环境变量 (必要)

把jdk安装包上传到linux中,并使用tar命令解压jdk:

tar zxvf jdk-7u80-linux-x64.tar.gz

这里解压到: /home/common/jdk1.7.0_80 目录中

编辑/etc/profile文件:

sudo vi /etc/profile

在结尾加上:

export JAVA_HOME=/home/common/jdk1.7.0_80
export CLASSPATH=.:${JAVA_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

其中JAVA_HOME部分按照自己实际情况修改


1.2. 安装ssh(必要)

不少linux发行版已安装好ssh,使用以下命令可以查看是否已经安装了ssh:

ps -e | grep sshd

若运行完后没有任何结果,则可以运行下面的命令进行安装。

deb系列的linux使用命令:

apt-get install ssh
apt-get install rsync

rmp系列的linux使用命令:

yum install ssh
yum install rsync



1.3. 创建程序使用的用户 (非必要)

# 增加hadoop用户组
sudo groupadd hadoop
# 增加hadoop用户
sudo useradd –d /home/hadoop –m hadoop –g hadoop -s /bin/bash
# 给hadoop用户设置密码
sudo passwd hadoop



1.4. 修改主机名 (建议)

由于是复制出来的虚拟机,各系统的主机名是一致的。为方便识别各台机器,把每台机器的主机名进行修改。
使用以下命令进行修改:

sudo vi /etc/hostname

hostname中的字符串就是主机名,把原来的值删除,输入自己需要的值。
这里的例子中,三个系统分别命名为: master, slave1, slave2


1.5. 修改hosts文件 (建议)

修改hosts文件,把ip与主机名进行对应匹配:

sudo vi /etc/hosts

增加下列三行(ip和主机名根据实际情况填写):

192.168.3.250   master
192.168.3.251   slave1
192.168.3.252   slave2



1.6. 配置Master无密码ssh登录所有Salve (必要)

Master(NameNode )需要通过ssh启动和停止 Salve(DataNode )上的各种守护进程。若没有设置无须密码访问,则在启动和停止时,每一个操作Slave的步骤都需要手动输入密码,非常不方便。Master(NameNode)设置密钥对, 并分享公钥, 可以使NameNode能够ssh无密码登录访问DataNode节点,简化操作流程。


1.6.1. 生成密钥对

使用命令:

ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa    
#或者
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa

运行后如果有密钥图形输出,则表示生成成功。
运行完成后,会在~/.ssh目录下生成两个文件:
私钥文件:id_rsa
公钥文件:id_rsa.pub



1.6.2. 分发公钥

将公钥文件id_rsa.pub分发到各dataNode节点,使用命令如下:

scp ~/.ssh/id_rsa.pub 远程用户名@远程服务器IP或主机名:~/

例如:

scp ~/.ssh/id_rsa.pub hadoop@slave1:~/
scp ~/.ssh/id_rsa.pub hadoop@slave2:~/

拷贝的时候,需要输入密码。等配置完成后,slave(dataNode) 节点已经有了master的公钥,则后续再使用ssh连接到slave时,不再需要密码。

在master和各个slave上,将公钥文件id_rsa.pub内容追加到authorized_keys文件中: (在master上,也会有使用ssh登录自己的情况,所以master上也需要将公钥放到自己的authorized_keys中)

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

说明:有的教程会要求在slave上也进行同样的操作:生成密钥对并且分发公钥到各个节点。但在实际测试中,只有master去连接并控制slave的情况,还没遇到过slave主动去ssh连接master或者其他slave的情况。故只分发master的公钥即可。



1.6.3. 测试连接

使用ssh命令进行测试连接,如:

ssh slave1

若没有要求输入密码,则配置成功。

注意:以上测试时,第一次需要输入yes确认,此后就不需要再输入任何内容了。



二. 安装Hadoop


2.1 解压Hadoop文件

使用tar命令解压hadoop:

tar zxvf hadoop-2.7.2.tar.gz

这里解压到:/home/common /hadoop-2.7.2 目录中

增加环境变量HADOOP_HOME (非必须,经测试未设置该变量也没有引起任何异常。)
编辑/etc/profile文件:

sudo vi /etc/profile

在结尾加上:

export HADOOP_HOME=/home/common/hadoop-2.7.2



2.2 配置Hadoop

hadoop大部分的设置都可以用默认的,一般要修改的文件为${HADOOP_HOME}/etc/hadoop/目录下的:

hadoop-env.sh   # 环境变量设置
slaves          # slave节点列表
core-site.xml    # 核心设置
hdfs-site.xml    # dfs文件系统,NameNode和DataNode 相关设置
yarn-site.xml    # yarn。 ResourceManager和NodeManager 相关设置
mapred-site.xml  # MapReduce 相关设置



2.2.1 配置 hadoop-env.sh文件 (必须)

修改hadoop安装目录下的etc/hadoop/hadoop-env.sh文件,
编辑JAVA_HOME变量:
(不能直接用默认的$JAVA_HOME,下同)

# The java implementation to use.
export JAVA_HOME=/home/common/jdk1.7.0_80



2.2.2 配置 slaves文件 (必须)

修改hadoop安装目录下的etc/hadoop/slaves文件,
填写slave节点列表,每一个节点单独一行,可以是主机名或者IP地址,如下:

slave1
slave2



2.2.3 配置 core-site.xml文件 (建议)

修改hadoop安装目录下的etc/hadoop/core-site.xml文件,建议配置。

编辑hadoop核心配置,示例如下:

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://master:9000</value>
    </property>
    <property>
        <name>io.file.buffer.size</name>
        <value>131072</value>
    </property>
    <property>
        <!-- 必须设置此属性,不要用默认值,默认在/tmp目录中,重启后会被删除 -->
        <name>hadoop.tmp.dir</name>
        <value>/home/common/hadoop-2.7.2/tmp</value>
        <description>A base for other temporary directories.</description>
    </property>
</configuration>

参数说明:

名称 说明
fs.defaultFS NameNode URI, 文件系统的host和port
io.file.buffer.size Size of read/write buffer used in SequenceFiles.
hadoop.tmp.dir 需要手动建立该文件夹。默认值为/tmp/hadoop-${user.name}。
系统默认的临时目录放在/tmp路径下。而这个目录很有可能在每次重启后都会被干掉,造成某些后续定稿的基础数据会丢失(如hdfs格式化之后写入的数据)。

更多选项及选项的默认值,可以参见以下官网说明:
http://hadoop.apache.org/docs/r2.7.2/hadoop-project-dist/hadoop-common/core-default.xml



2.2.4 配置 hdfs-site.xml文件 (可选)

修改hadoop安装目录下的etc/hadoop/hdfs-site.xml文件,可选配置,可以使用默认设置。
编辑NameNode和DataNode 相关设置,示例如下:

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>2</value>
    </property>
    <property>
        <!-- 可选。hdfs格式化时,namenode需要往此路径写基础数据 -->
        <name>dfs.namenode.name.dir</name>
        <value>file:/home/common/hadoop-2.7.2/tmp/dfs/name</value>
    </property>
    <property>
        <!-- 可选。hdfs格式化时,datanode需要往此路径写基础数据 -->
        <name>dfs.datanode.data.dir</name>
        <value>file:/home/common/hadoop-2.7.2/tmp/dfs/data</value>
    </property>
</configuration>

参数说明:

名称 说明
dfs.replication replication 是数据副本数量,默认为3。
dfs.namenode.name.dir 可选,默认值为:file://${hadoop.tmp.dir}/dfs/name。
hdfs格式化时,namenode需要往此路径写基础数据。
dfs.datanode.data.dir 可选,默认值为:file://${hadoop.tmp.dir}/dfs/data 。
hdfs格式化时,datanode需要往此路径写基础数据。

更多实用配置:

名称 说明
dfs.http.address hadoop网页管理端访问地址。默认为master的50070端口。
示例:<value>master:50070</value>
dfs.namenode.secondary.http-address 第二个(备份的)NameNode节点的http地址。
示例:<value>master2:50070</value>

更多选项及选项的默认值,可以参见以下官网说明:
http://hadoop.apache.org/docs/r2.7.2/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml


2.2.5 配置 yarn-site.xml文件(可选)

修改hadoop安装目录下的etc/hadoop/yarn-site.xml文件,可选配置,可以使用默认设置。
编辑ResourceManager和NodeManager 相关设置,示例如下:

<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.address</name>
        <value>master:8032</value>
    </property>
    <property>
        <name>yarn.resourcemanager.scheduler.address</name>
        <value>master:8030</value>
    </property>
    <property>
        <name>yarn.resourcemanager.resource-tracker.address</name>
        <value>master:8031</value>
    </property>
    <property>
        <name>yarn.resourcemanager.admin.address</name>
        <value>master:8033</value>
    </property>
    <property>
        <name>yarn.resourcemanager.webapp.address</name>
        <value>master:8088</value>
    </property>
</configuration>

参数说明:

名称 说明
yarn.resourcemanager.address ResourceManager host:port for clients to submit jobs.
client提交job的地址。参数格式:host:port.
默认端口为8032
yarn.resourcemanager.scheduler.address ResourceManager host:port for ApplicationMasters to talk to Scheduler to obtain resources.
Scheduler获取资源地址。参数格式:host:port。
默认端口为8030
yarn.resourcemanager.resource-tracker.address ResourceManager host:port for NodeManagers.
默认端口为8031
yarn.resourcemanager.admin.address ResourceManager host:port for administrative commands.
管理命令通讯地址。默认端口为8033
yarn.resourcemanager.webapp.address ResourceManager web-ui host:port.
网页地址。默认端口为8088

更多选项及选项的默认值,可以参见以下官网说明:
http://hadoop.apache.org/docs/r2.7.2/hadoop-yarn/hadoop-yarn-common/yarn-default.xml


2.2.6 配置 mapred-site.xml文件 (必须)

修改hadoop安装目录下的etc/hadoop/mapred-site.xml文件。

如果是单机模式,配置mapred-site.xml是可选的。
如果是分布式模式,那么最少要设置mapreduce.framework.name 参数,默认值为local,我们需要把它设置成yarn。否则mapreduce的job只在master上运行,不会分配下去。

编辑MapReduce配置,示例如下:

<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>master:10020</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>master:19888</value>
    </property>
</configuration>

参数说明:

名称 说明
mapreduce.framework.name 执行框架名称,默认值为local。
mapreduce.jobhistory.address MapReduce JobHistory Server host:port
Default port is 10020.
任务历史服务器地址,格式为:host:port。 默认端口为10020。
mapreduce.jobhistory.webapp.address MapReduce JobHistory Server Web UI host:port
Default port is 19888.
任务历史服务器WEB地址,格式为:host:port。 默认端口为19888。

更多选项及选项的默认值,可以参见以下官网说明:
http://hadoop.apache.org/docs/r2.7.2/hadoop-mapreduce-client/hadoop-mapreduce-client-core/mapred-default.xml


2.3 拷贝Hadoop配置到其他节点上

单个节点完成hadoop的配置后,把这些配置拷贝到其他节点上。
可以把整个hadoop目录打包拷贝,也可以使用命令:

scp -r 需要拷贝的文件夹 远程用户名@远程服务器ip:目标目录

把整个hadoop目录拷贝到其他节点上。


2.4 启动及验证Hadoop


2.4.1 格式化HDFS文件系统

就像一般的文件系统,使用前需要先格式化一次。只需格式化一次,后续启动无须再格式化。
在Master机器上切换到Hadoop安装目录,运行以下命令:(命令中的namenode是固定参数,不是host名称)

./bin/hdfs namenode –format

若这里格式化报URI has an authority component 错误, 则很有可能是hdfs-site.xml中dfs.namenode.name.dir dfs.datanode.data.dir 属性未正常配置。


2.4.2 启动Hadoop

在Master机器上切换到Hadoop安装目录,运行:

./sbin/start-all.sh

或者分别执行:

./sbin/start-dfs.sh
./sbin/start-yarn.sh

两者等效。

通过日志可以看出启动过程为:
1、start-dfs:首先启动namenode 接着启动datanode1,datanode2,…,然后启动secondary namenode。
2、start-yarn:启动resource manager,然后启动各个slave的nodemanager。


2.4.3 停止Hadoop

在Master机器上切换到Hadoop安装目录,运行:

./sbin/stop-all.sh

或者分别执行:

./sbin/stop-dfs.sh
./sbin/stop-yarn.sh

两者等效。

停止过程与启动过程类似。


2.4.4 验证

启动Hadoop。

验证方式一:用”jps”命令查看java进程

jps(Java Virtual Machine Process Status Tool)是JDK提供的一个显示当前所有java进程pid的命令。
在Master上运行jps查看进程,示例如下:

hadoop@master:/home/common/hadoop-2.7.2$ jps
20165 NameNode
20772 Jps
20356 SecondaryNameNode
20507 ResourceManager

在Slave上运行jps查看进程,示例如下:

hadoop@slave1:/home/common/hadoop-2.7.2$ jps
9593 DataNode
9702 NodeManager
9826 Jps

验证方式二:用”hadoop dfsadmin -report” 查看Hadoop集群的状态

在Master中切换到Hadoop安装目录,运行命令:

./bin/hadoop dfsadmin –report

查看Hadoop集群的状态。里面会列出各个dataNode的状态。



2.4.5 通过网页查看集群信息

启动Hadoop。
通过http://master:50070 查看hdfs的NameNode信息。 (该地址在hdfs-site.xml中定义)
通过http://master:8088 查看ResourceManager信息。 (该地址在yarn-site.xml中定义)



三. 安装HBase


3.1 解压HBase文件

使用tar命令解压hbase:

tar zxvf hbase-1.1.3-bin.tar.gz

这里解压到:/home/common /hbase-1.1.3 目录中



3.2 配置HBase

一般要修改的文件为conf目录下的:

hbase-env.sh   # 环境变量设置
regionservers    # slave节点列表
hbase-site.xml    # hbase和zookeeper设置



3.2.1 配置hbase-env.sh (必须)

修改hbase安装目录下的conf/hbase-env.sh文件,
编辑JAVA_HOME变量:

# The java implementation to use.  Java 1.7+ required.
export JAVA_HOME=/home/common/jdk1.7.0_80

编辑HBASE_MANAGES_ZK。 hbase在分布式模式运行时,需要依赖zookeeper集群。此参数定义是否使用hbase内置的zookeeper,true为是,fase为否,注释掉该参数时默认为true。

# Tell HBase whether it should manage it's own instance of Zookeeper or not.
export HBASE_MANAGES_ZK=true



3.2.2 配置hbase-site.xml (必须)

修改hbase安装目录下的conf/hbase-site.xml文件。
配置hbase和zookeeper设置。示例如下:

<configuration>
    <property>
        <name>hbase.rootdir</name> 
        <value>hdfs://master:9000/hbase</value>
    </property>
    <property>
        <name>hbase.cluster.distributed</name>
        <value>true</value>
    </property>
    <property>
        <name>hbase.zookeeper.quorum</name>
        <value>master,slave1,slave2</value>
    </property>
</configuration>

参数说明:

名称 说明
hbase.rootdir 数据库文件存储路径。
非集群下使用本地文件系统,参数值格式为:file:///path;
集群环境下可以使用hdfs文件系统,值格式为:hdfs://host:port/path;
在hdfs中,不需要事先创建好该文件夹,hbase会自动创建。
hbase.cluster.distributed 定义hbase是否运行在分布式模式。false为单机模式,true为分布式模式。
hbase.zookeeper.quorum zookeeper集群节点,以英文逗号分割。



3.2.3 配置regionservers (必须)

修改hbase安装目录下的conf/regionservers文件,需要跑region server的节点列表,每行一个, 示例如下:

slave1
slave2



3.2.4 替换hadoop依赖包 (未验证)

(说明:有的教程有替换jar包的步骤,有的教程没有此步骤。此次实验已经替换了jar包,故当前尚未确定该步骤是否必须。)
    由于 HBase 依赖 Hadoop,所以HBase的lib目录中配套发布了一份Hadoop的jar包。该套装jar仅用于独立模式。在分布式模式下,Hadoop版本必须和HBase下的版本一致。用你运行的分布式Hadoop版本jar文件替换HBase lib目录下的Hadoop jar文件,以避免版本不匹配问题。Hadoop版本不匹配问题有不同表现,但看起来都像挂掉了。
    步骤:
    1. 删除hbase安装目录的lib目录下、以hadoop开头的jar包。
    2. 在 hadoop安装目录的share/hadoop目录下,从common、hdfs、mapreduce、yarn这几个子目录中,找出hadoop开头的jar包,拷贝到hbase安装目录的lib目录下。



3.3 拷贝到其他集群节点上

使用命令:

scp -r 需要拷贝的文件夹 远程用户名@远程服务器ip:目标目录



3.4 启动hbase

3.4.1 启动hbase

先启动hadoop。在Master机器上切换到hbase安装目录,运行:

./bin/start-hbase.sh

启动过程:
1. 启动zookeeper
2. 启动master
3. 启动region server


3.4.2 停止hbase

在Master机器上切换到hbase安装目录,运行:

./bin/stop-hbase.sh



3.4.3 通过网页查看HBase信息

启动HBase。
通过http://master:16010 查看Hbase 的状态信息。
(该端口可以在hbase-site.xml文件中自定义,属性名为hbase.master.info.port, 默认值为16010)


3.4.4 启动hbase shell

启动HBase。
运行下列命令启动hbase的shell程序:

./bin/hbase shell

关于hbase shell的常用命令,参考另一篇文档《HBase基本概念和常用shell命令》(待发布)





猜你喜欢

转载自blog.csdn.net/ljskr/article/details/62230002