目录
最近看了好多大数据相关的技术框架,这里简单总结一下一个Hadoop集群的安装过程,部分会有自己的理解。
预配置
在安装Hadoop集群之前需要做一些准备工作
- 无密码访问
我们需要在每个Cluster上面执行 ssh-keygen -t rsa -P ''
,生成 AccessKey
之后将所有的 public key 集中到文件 authorized_keys
中,并将文件分发到所有的机器上
- JDK环境配置
下载JDK,并配置 JAVA_HOME
和 PATH
- 修改
/etc/hosts
文件
将所有机器的IP对应不同的名字(我这起的是clusterN),写入到每个机器的 /etc/hosts
文件内
Zookeeper
Zookeeper是其中非常重要的一环,这里介绍Zookeeper的安装和使用方法
关于Zookeeper的所有内容都可以在 官网 找到,这也是最推荐的学习方法(如果你英语还不错的话)
安装方法
程序包下载
下载Zookeeper的话,可以从 这个网址 随意找到一个源,进去之后最好下载一个 stable 的源,这个算是一个稳定版,比如,我写这篇文章的时候,里面只有这个 http://apache.arvixe.com/zookeeper/stable/zookeeper-3.4.8.tar.gz 下载地址,点击即可下载。
wget http://apache.arvixe.com/zookeeper/stable/zookeeper-3.4.8.tar.gz
tar -xvzf zookeeper-3.4.8.tar.gz
修改配置文件
Zookeeper的配置文件默认为 conf/zoo.cfg,所以我们需要通过一个 sample 的配置文件复制一份,并加以修改。
cp zoo_sample.cfg zoo.cfg
vi zoo.cfg
dataDir=/opt/zookeeper/data
dataLogDir=/opt/zookeeper/logs
clientPort=2181
tickTime=2000
initLimit=5
syncLimit=2
server.1=cluster1:2888:3888
server.2=cluster2:2888:3888
server.3=cluster3:2888:3888
- dataDir:数据目录
- dataLogDir:日志目录
- clientPort:客户端连接端口
- tickTime:Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。
- initLimit:Zookeeper的Leader 接受客户端(Follower)初始化连接时最长能忍受多少个心跳时间间隔数。当已经超过 5个心跳的时间(也就是tickTime)长度后 Zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是
5*2000=10
秒 - syncLimit:表示 Leader 与 Follower 之间发送消息时请求和应答时间长度,最长不能超过多少个tickTime 的时间长度,总的时间长度就是
2*2000=4
秒。 - server.A=B:C:D:其中A 是一个数字,表示这个是第几号服务器;B 是这个服务器的 ip 地址;C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;D 表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口。如果是伪集群的配置方式,由于 B 都是一样,所以不同的 Zookeeper 实例通信端口号不能一样,所以要给它们分配不同的端口号。
这个里面的 A 需要在 $dataDir/myid 里面写上对应的A,比如cluster1里面写的就是1
配置 Zookeeper 的路径
export ZOOKEEPER_HOME=/path/to/zookeeper
export PATH=$PATH:$ZOOKEEPER/bin
启动停止状态
- 启动Zookeeper:
zkServer.sh start
- 停止Zookeeper:
zkServer.sh stop
- Zookeeper状态:
zkServer.sh status
补充
独立安装 Zookeeper 可以在一台机器上运行
集群安装的 Zookeeper 必须在基数台机器上运行,并且数量必须大于等于3
在查看Zookeeper状态的时候,必须将集群全部启动,否则会有问题。
Zookeeper的启动和停止都是针对单台服务器,如果想都启动或停止,必须在每台机器上都执行操作。
Zookeeper理解
Zookeeper可以看成是一个特殊的文件系统,我们可以在里面存储数据,但这个文件系统没有文件夹这一个说法,可以堪称是一个巨大的树,每个结点可以有自己的数据,可以有多个孩子,就容易理解他了。
具体的操作可以通过 zkCli.sh 来进行,进去之后各种操作都很容易了解。就不多说了。
Hadoop
之所以先安装Zookeeper是因为在用Hadoop的时候我们需要配置Zookeeper的路径(因为我没有用Hadoop内含的Zookeeper),具体Hadoop的文档可以参看 官方文档,以下是我安装部署的过程。
安装方法
程序包下载
和Zookeeper一样,下载Hadoop也有很多源可以选,可以到 这里 选一个源来下载。下面是我下载的链接和解压的命令
wget http://apache.fayea.com/hadoop/common/hadoop-2.6.0/hadoop-2.6.0.tar.gz
tar -xvzf hadoop-2.6.0.tar.gz
修改配置文件
Hadoop的配置文件有几个需要进行修改:
- hadoop-env.sh 修改
JAVA_HOME
- yarn-env.sh 修改
JAVA_HOME
- core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>·
<value>hdfs://cluster1:9000</value>
</property>
</configuration>
- hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/xingming/package/hadoop-2.6.0/data</value>
</property>
</configuration>
- mapred-site.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
- yarn-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>cluster1</value>
</property>
</configuration>
- slaves
cluster1
cluster2
cluster3
我的集群只用到的三台主机,所以以上配置主要就是针对三台主机的配置,如果更多的台数,配置情况会有所不同,这个需要我们注意。
- 配置Hadoop的路径
export HADOOP_HOME=/path/to/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
启动停止状态
使用Hadoop之前我们需要先format一下,实则就是清理下数据
hdfs namenode -format
Hadoop 的启动可以通过 start-all.sh
来启动,其实际上是调用了一下两条命令:
start-dfs.sh
start-yarn.sh
相对应的停止命令就是 stop-all.sh
(将start变成stop即可)
查看状态
- http://cluster1:50070 即可查看hdfs的状态
- http://cluster1:8088 查看yarn状态
- http://cluster1:19888 查看JobHistory Server状态
或者通过各种命令来查看集群的运行状态
hdfs dfsadmin -report
yarn node -list
HBase
HBase 作为Hadoop集群的一员,官方的说法为 A scalable, distributed database that supports structured data storage for large tables.,具体的内容可以查看 官方文档
- 这里有一份关于HBase的中文文档:http://abloz.com/hbase/book.html
- 关于HBase的扩展阅读:http://www.daxixiong.com/?/article/20
安装方法
可以到 这里 选择一个地址,之后进去找到对应的下载链接,下载一个tar包即可。
以下是我用到的下载地址和解压缩命令
wget http://apache.arvixe.com/hbase/1.1.3/hbase-1.1.3-bin.tar.gz
tar hbase-1.1.3-bin.tar.gz
修改配置
hbase-env.sh
export HBASE_MANAGES_ZK=false 是否使用内置的zookeeper
export JAVA_HOME=/path/to/jdk 配置环境变量
hbase-site.sh
<configuration>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.rootdir</name>
<value>hdfs://cluster1:9000/hbase</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>cluster1,cluster2,cluster3</value>
</property>
</configuration>
regionservers
cluster2
cluster3
复制hadoop下面的hdfs-site.xml到配置文件文件夹
/etc/profile
export HBASE_HOME=/path/to/hbase
export PATH=$PATH:$HBASE_HOME/bin
启动
start-hbase.sh
测试
(pyvirt)xingming@cluster1:~/package/hbase-1.1.3/conf$ hbase shell
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/home/xingming/package/hbase-1.1.3/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/home/xingming/package/hadoop-2.6.0/share/hadoop/common/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
HBase Shell; enter 'help<RETURN>' for list of supported commands.
Type "exit<RETURN>" to leave the HBase Shell
Version 1.1.3, r72bc50f5fafeb105b2139e42bbee3d61ca724989, Sat Jan 16 18:29:00 PST 2016
hbase(main):001:0> list
TABLE
0 row(s) in 0.4020 seconds
=> []
hbase(main):002:0>
使用
使用 HBase 很简单的几条命令就可以:
create 'indexdemo-user', { NAME => 'info', REPLICATION_SCOPE => '1' }
hbase> put 'indexdemo-user', 'row1', 'info:firstname', 'John'
hbase> put 'indexdemo-user', 'row1', 'info:lastname', 'Smith'
简介
HBase是一种数据库:Hadoop数据库,它是一种NoSQL存储系统,专门设计用来快速随机读写大规模数据。
什么是HBase(Hadoop Database)呢?有以下两种常见的说法:
- 它是一种稀疏的、分布式的、持久化的、多维有序映射,它基于行键(row key)、列键(column key)和时间戳(timestamp)建立索引。
- 它是一种键值(key value)存储,面向列族的数据库,有时也是一种存储多时间戳版本映射的数据库。
以上两种描述都是对的。但从根本上来说,HBase是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,是一个可以随机访问的存储和检索数据的平台。大家可以按照需要写入数据,然后再按照需要读取数据。
HBase有如下特点:
- 它不介意数据类型,允许动态的、灵活的数据模型,并不限制存储的数据的种类。因此,它可以自如地存储结构化和半结构化的数据。
- 它不用SQL语言,也不强调数据之间的关系。
- 它不允许跨行的事务,可以在一行的某一列存储一个整数,而在另一行的同一列存储字符串。 第四,它被设计成在一个服务器集群上运行,而不是单台服务器。这意味着一种强大的、可扩展的数据的使用方式。
从HBase的特点可以看出,HBase的设计与目标都与传统的关系型数据库不同。