文档下载地址:http://download.csdn.net/detail/xuwannian/9569818
Hadoop-hbase大数据环境安装
Hadoop-2.7.1 zookeeper-3.4.6 hbase-1.1.2 phoenix-4.5.1
徐万年 2015-10-15
目录
一、
集群环境总述
3
1.1、操作系统
3
1.2、主机分配及安装内容
3
二、
安装前准备
4
2.1、Hadoop用户
4
2.2、主机网络设置
4
2.3、主机防火墙设置
4
2.4、系统主机名称及hosts文件
5
2.5、主机Java版本
5
2.6、主机间免密码访问
6
2.7、时钟同步
6
三、
安装hadoop
7
3.1、hadoop介绍
7
3.2、下载最新版本hadoop
7
3.3、配置文件
7
3.4、创建namenode及datanode的目录
7
3.5、启动hadoop
8
3.6、查看hadoop启动
8
四、
安装zookeeper
10
4.1、下载最新版本zookeeper
10
4.2、zookeeper配置
10
4.3、创建zookeeper目录
10
4.4、创建zookeeper配置文件
10
4.5、复制zookeeper库文件到hbase
11
4.6、启动zookeeper
11
五、
安装hbase
11
5.1、下载最新版本hbase
11
5.2、修改hbase配置文件
11
5.3、复制hadoop库文件到hbase
11
5.4、创建hbase存储目录
12
5.5、启停hbase
12
5.6、hbase运行后可以通过自带的web查看运行状态
13
六、
安装phoenix
13
6.1、下载最新版本phoenix
13
6.2、配置phoenix
13
6.3、配置hbase
13
6.4、phoenix简单使用
13
6.5、phoenix运行图
14
七、
常见故障
14
7.1、重启Regionserver及Zookeeper
14
八、其它
15
8.1、hbase的分页查询
15
8.2、WordCount.java的编译、打包、运行
15
8.3、64位版本的hadoop编译
15
8.4、Phoenix语法
16
8.5、Hadoop生态中Hive HBase 项目的区别
16
8.6、hbase配置信息说明
19
8.7、hadoop 根据SecondaryNameNode恢复Namenode
26
8.8、Hadoop调优
29
九、附录(配置文件)
30
9.1、hadoop配置文件
30
9.2、zookeeper配置文件
32
9.3、hbase配置文件
33
一、
集群环境总述
1.1、操作系统
CentOS6.5 64位
1.2、主机分配及安装内容
目前生产环境集群环境共计6台linux(centOS)主机。
主要配置如下:
主机名称
主机IP
CPU
MEM
DISK
sec-namenode01-130-161
172.200.130.161
4核
24G
300G
sec-datanode01-130-162
172.200.130.162
4核
24G
1000G
sec-datanode01-130-163
172.200.130.163
4核
24G
1000G
sec-datanode01-130-164
172.200.130.164
4核
24G
1000G
sec-datanode01-130-165
172.200.130.165
4核
24G
1000G
sec-datanode01-130-166
172.200.130.166
4核
24G
1000G
部署内容如下:
主机名称
主机IP
功能
部署软件
sec-namenode01-130-161
172.200.130.161
Namenode
HMaster
Hadoop、hbase、phoenix
sec-datanode01-130-162
172.200.130.162
Datanode
Regionserver
QuorumPeerMain
Hadoop、hbase、zookeeper
sec-datanode01-130-163
172.200.130.163
Datanode
Regionserver
QuorumPeerMain
Hadoop、hbase、zookeeper
sec-datanode01-130-164
172.200.130.164
Datanode
Regionserver
QuorumPeerMain
Hadoop、hbase、zookeeper
sec-datanode01-130-165
172.200.130.165
Datanode
Regionserver
QuorumPeerMain
Hadoop、hbase、zookeeper
sec-datanode01-130-166
172.200.130.166
Datanode
Regionserver
QuorumPeerMain
Hadoop、hbase、zookeeper
二、
安装前准备
说明:本节内容需要使用具有root权限的用户操作。【2016-01-20】
2.1、Hadoop用户
要求: hadoop集群环境需要相同用户名、密码、及安装路径。
1、新增hadoop用户并设置密码
如:useradd -d /home/hadoop -s /bin/bash Hadoop
如:passwd Hadoop 设置密码
2、更改宿主【好像不需要改】
chown -R hadoop:hadoop hadoop
注意:集群主机用户名及密码必须相同。
2.2、主机网络设置
Hadoop平台需要固定IP,所以所有主机需要配置固定IP。
修改:/etc/sysconfig/network-scripts/ifcfg-eth0
注意:通过ipconfig是否为配置的ip地址
此配置需要咨询网络管理人员确认是哪个文件
2.3、主机防火墙设置
Hadoop环境需要关闭Linux系统的防火墙
修改文件:/etc/sysconfig/selinux
改:
SELINUX=disabled【默认是enforcing】
如图:
查看状态,并设置主机重新启动后仍是关闭状态。
查看状态:service iptables status
关闭防火墙:service iptables stop
添加系统服务:chkconfig iptables off
2.4、系统主机名称及hosts文件
1、修改:/etc/hosts
如图:
2、修改:/etc/sysconfig/network
如图:
测试如下:
2.5、主机Java版本
1、删除Linux系统自带的java
rpm –qa | grep java查找系统已安装的java
yum remove –y xxxxx删除系统已安装的java
2、安装最新版本的java
rpm –ivh java-xxxxx.rpm
配置java环境变量:
java –version
2.6、主机间免密码访问
由于hadoop集群环境的master主机在启动服务时需要远程启动其它slave节点相关服务,所以需要配置无密码访问。
1、ssh-keygen -t rsa会在当前目录下生成.ssh的隐藏目录,目录内容如下:
2、cat id_rsa.pub >> authorized_keys
以上是在必须在master主机执行,再将authorized_keys文件scp到其它slave主机
3、所有.ssh目录及authorized_keys文件需要修改相应属性
chmod 700 .ssh
chmod 600 authorized_keys
注意:如果无法ssh userName@hostName,则需要查看文件夹的权限
2.7、时钟同步
1、
添加时钟同步任务到操作系统任务列表
crontab –e
0-59/10 * * * * /usr/sbin/ntpdate us.pool.ntp.org | logger -t NTP
每隔10分钟同步一下时钟,当然也可以设置其它时间同步。
2、
查看是否添加成功
crontab –l
注意:
1、
需要root用户或有sudo权限的用户
2、
如果时钟不同步会影响hbase的正常启动。
3、
如果生产服务器无法链接公网的话,需要部署一台linux时钟服务器。
详细:http://www.kuqin.com/shuoit/20131024/335846.html
三、
安装hadoop
3.1、hadoop介绍
参见Apache官网。
3.2、下载最新版本hadoop
下载地址:http://hadoop.apache.org/releases.html
最新版本hadoop:2.7.1
3.3、配置文件
hadoop有如下重要配置文件:
$HADOOP_HOME/etc/Hadoop/hdfs-site.xml
$HADOOP_HOME/etc/Hadoop/core-site.xml
$HADOOP_HOME/etc/Hadoop/hadoop-env.sh
$HADOOP_HOME/etc/Hadoop/masters
$HADOOP_HOME/etc/Hadoop/slaves
$HADOOP_HOME/etc/Hadoop/yarn-site.xml
详细配置信息请参考生产系统相应配置文件,见附录。
3.4、创建namenode及datanode的目录
根据配置文件格式化hadoop文件目录,文件目录配置如下图(文件名:hdfs-site.xml):
创建目录:
1、/home/app/hadoop/hadoop/dfs/nata
2、/home/app/hadoop/hadoop/dfs/data
格式化命令如下:
1、格式化namenode目录:命令:$HADOOP_HOME/bin/hadoop namenode -format
2、格式化datanode目录:命令:$HADOOP_HOME/bin/hadoop datanode -format
注意:这2个目录需要手工创建,且需要格式化,否则hadoop会出现启动异常。如果需要重新格式上述目录,需要删除以上两目录中的内容方可再次格式化。
3.5、启动hadoop
在hadoop集群环境启动hadoop命令如下:
$HADOOP_HOME/sbin/start-all.sh
3.6、查看hadoop启动
在IE中输入以下地址可以查看hadoop集群环境的启动状态:
http://192.168.131.16:50070
http://192.168.131.16:8088
3.7、hadoop日志查看
Hadoop日志目录:$HADOOP_HOME/logs
可以用more、cat、tail –f 查看日志内容
四、
安装zookeeper
4.1、下载最新版本zookeeper
最新版本下载地址:http://www.apache.org/dyn/closer.cgi/zookeeper/
最新版本的zookeeper为:3.4.6
4.2、zookeeper配置
见附录:zookeeper配置
4.3、创建zookeeper目录
根据配置文件中的配置项:
创建目录:/home/app/Hadoop/zookeeper,需要根据zoo.cfg中的配置项来创建。
4.4、创建zookeeper配置文件
在目录:/home/app/Hadoop/zookeeper/目录下创建myid文件,编辑myid文件,与zoo.cfg文件中的server.x=ip:port:port的x相同。
如:
4.5、复制zookeeper库文件到hbase
请从zookeeper安装目录下将:zookeeper-3.4.6.jar复制到hbase的lib目录下。
注意:注意zookeeper.x.x.x.jar的版本号,一定要使用当前正在使用zookeeper版本。
4.6、启动zookeeper
启动脚本:$ZOOKEEPER_HOME/bin/zkServer start
停止脚本:$ZOOKEEPER_HOME/bin/zkServer stop
查看状态:$ZOOKEEPER_HOME/bin/zkServer status
由于zookeeper未提供远程启动、停止脚本,所有,如果需要启动或停止zookeeper集群,必须手工到所有的安装了zookeeper的主机手工启动或停止脚本。
五、
安装hbase
5.1、下载最新版本hbase
最新版本hbase下载地址:http://hbase.apache.org
最新版本的hbase为:1.1.2。
hbase系统功能说明:http://www.tuicool.com/articles/R3UB73【2016-01-20】
5.2、修改hbase配置文件
hbase重要配置文件如下:
1、hbase-site.xml
2、hbase-env.sh
3、regionservers
详细配置见附录hbase相关配置文件项。
5.3、复制hadoop库文件到hbase
由于hbase运行时需要hadoop相关的lib文件,需要从$HADOOP_HOME目录将以下文件复制到hbase目录
hadoop-annotations-2.5.1.jar
hadoop-auth-2.5.1.jar
hadoop-client-2.5.1.jar
hadoop-common-2.5.1.jar
hadoop-hdfs-2.5.1.jar
hadoop-mapreduce-client-app-2.5.1.jar
hadoop-mapreduce-client-common-2.5.1.jar
hadoop-mapreduce-client-core-2.5.1.jar
hadoop-mapreduce-client-jobclient-2.5.1.jar
hadoop-mapreduce-client-shuffle-2.5.1.jar
hadoop-yarn-api-2.5.1.jar
hadoop-yarn-client-2.5.1.jar
hadoop-yarn-common-2.5.1.jar
hadoop-yarn-server-common-2.5.1.jar
注意:请注意库文件相应的版本号,应当和当前hadoop版本一致(即:从当前版本的hadoop目录复制)
5.4、创建hbase存储目录
hbase存储目录[新版本的hbase会自动在hadoop文件系统创建hbase目录]:
需要通过hadoop的shell命令创建hbase目录(最新版本的hbase已经不需要手工创建该目录了)。
5.5、启停hbase
启动脚本:$HBASE_HOME/bin/start-hbase.sh
停止脚本:$HBASE_HOME/bin/stop-hbase.sh
由于hbase提供了远程启动、停止脚本,所以,只需要在hbase的Master主机执行即可,该start-hbase.sh脚本会根据配置文件:regionservers文件的内容自动启动、停止远程主机的hbase。
5.6、hbase运行后可以通过自带的web查看运行状态
六、
安装phoenix
6.1、下载最新版本phoenix
最新版本安装包下载地址:http://phoenix.apache.org,最新版本为:4.5.1
6.2、配置phoenix
将hbase的配置文件hbase-site.xml拷贝到phoenix的bin目录。
6.3、配置hbase
将phoenix的jar包拷贝到hbase的lib目录
6.4、phoenix简单使用
phoenix常用脚本:sqlline.py,该shell可以创建、删除、修改相应的表、索引。
启动命令:./sqlline.py Hadoop.Slave1:port,默认端口。
常用命令:
1、!tables
查看表
2、!exit
退出phoenix
3、create table、drop table、desc table
更多命令请参见官网。
6.5、phoenix运行图
七、
常见故障
7.1、重启Regionserver及Zookeeper
1、datanode 宕机了,如何重启:
hadoop-daemon.sh start datanode
2、regionserver挂了,如何重启:
${HBASE_HOME}/bin/hbase-daemon.sh start regionserver
八、其它
8.1、hbase的分页查询
分页查询:主要使用关键字limit,如下,limit 5即每次返回5条记录
第一次查询:
select * from CDR_201507 where serial_number='17001200000' limit 5;
第二次查询:主要记录上次的start_time,作为本次的条件
select * from CDR_201507 where serial_number='17001200000' and
to_char(start_time, 'yyyyMMddhhmmss') > '20150704015706' ORDER BY serial_number, start_time limit 5;
8.2、WordCount.java的编译、打包、运行
javac -classpath /home/hadoop/hadoop-2.6.0/share/hadoop/common/hadoop-common-2.6.0.jar:/home/hadoop/hadoop-2.6.0/share/hadoop/common/lib/commons-cli-1.2.jar:/home/hadoop/hadoop-2.6.0/share/hadoop/common/lib/hadoop-annotations-2.6.0.jar:/home/hadoop/hadoop-2.6.0/share/hadoop/mapreduce/hadoop-mapreduce-client-core-2.6.0.jar WordCount.java
打包:
jar -cvf WordCount.jar *.class
运行:
./hadoop jar WordCount.jar com/du/simple/WordCount /input /output
8.3、64位版本的hadoop编译
由于服务器一般都64位系统, hadoop网站的release版本32位native库不能运行,所以需要自己在编译一下。以下是我采用的一个编译的过程,比较简单,不用下载各种版本及环境配置,通过命令就能自动完成了。系统环境为ubuntu server 64位版。
1、安装JDK,我这里使用的是OenJDK
sudo apt-get install default-jdk
java -version
显示版本信息:
java version "1.7.0_65"
OpenJDK Runtime Environment (IcedTea 2.5.3) (7u71-2.5.3-0ubuntu0.14.04.1)
OpenJDK 64-Bit Server VM (build 24.65-b04, mixed mode)
2、安装maven
sudo apt-get install maven
mvn --version
显示版本信息:
Maven home: /usr/share/maven
Java version: 1.7.0_65, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-7-openjdk-amd64/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.13.0-32-generic", arch: "amd64", family: "unix"
3、安装openssh
sudo apt-get install openssh-server
4、安装依赖库
sudo apt-get install g++ autoconf automake libtool cmake zlib1g-dev pkg-config libssl-dev
5、安装protoc
wget https://protobuf.googlecode.com/files/protobuf-2.5.0.tar.gz
sudo apt-get install protobuf-compiler
protoc --version
显示版本信息:
libprotoc 2.5.0
6、OK开始编译,进入HADOOP源代码目录 hadoop-2.6.0-src,执行:
mvn clean package -Pdist,native -DskipTests -Dtar
8.4、Phoenix语法
http://phoenix.apache.org/language/index.html
8.5、Hadoop生态中Hive HBase 项目的区别
导读:Apache Hive是一个构建于Hadoop(分布式系统基础架构)顶层的数据仓库,Apache HBase是运行于HDFS顶层的NoSQL(=Not Only SQL,泛指非关系型的数据库)数据库系统。区别于Hive,HBase具备随即读写功能,是一种面向列的数据库。
对于刚接触大数据的用户来说,要想区分Hive与HBase是有一定难度的。本文将尝试从其各自的定义、特点、限制、应用场景等角度来进行分析,以作抛砖引玉之用。
Hive是什么?
Apache Hive是一个构建于Hadoop(分布式系统基础架构)顶层的数据仓库,注意这里不是数据库。Hive可以看作是用户编程接口,它本身不存储和计算数据;它依赖于HDFS(Hadoop分布式文件系统)和MapReduce(一种编程模型,映射与化简;用于大数据并行运算)。其对HDFS的操作类似于SQL—名为HQL,它提供了丰富的SQL查询方式来分析存储在HDFS中的数据;HQL经过编译转为MapReduce作业后通过自己的SQL 去查询分析需要的内容;这样一来,即使不熟悉MapReduce 的用户也可以很方便地利用SQL 语言查询、汇总、分析数据。而MapReduce开发人员可以把己写的mapper 和reducer 作为插件来支持Hive 做更复杂的数据分析。
HBase是什么?
Apache HBase是运行于HDFS顶层的NoSQL(=Not Only SQL,泛指非关系型的数据库)数据库系统。区别于Hive,HBase具备随即读写功能,是一种面向列的数据库。HBase以表的形式存储数据,表由行和列组成,列划分为若干个列簇(row family)。例如:一个消息列簇包含了发送者、接受者、发送日期、消息标题以及消息内容。每一对键值在HBase会被定义为一个Cell,其中,键由row-key(行键),列簇,列,时间戳构成。而在HBase中每一行代表由行键标识的键值映射组合。Hbase目标主要依靠横向扩展,通过不断增加廉价的商用服务器,来增加计算和存储能力。
特性
遵从JDBC的Hive不但可以让具SQL知识的用户来间接执行MapReduce作业,同时里面也整合了目前基于SQL的操作工具。不过,由于默认的数据读取是全表遍历的,其时间的耗费也不可避免地相对较大。尽管如此,不尽相同的Hive分区方法,其遍历读取的数据量也是能够有所限制的。Hive分区允许对存储在独立文件上的数据进行筛选查询,返回的是筛选后的数据。例如针对日期的日志文件访问,前提是该类文件的文件名包含日期信息。
HBase以键值对的形式储存数据。其包含了4种主要的数据操作方式:
添加或更新数据行
扫描获取某范围内的cells
为某一具体数据行返回对应的cells
从数据表中删除数据行/列,或列的描述信息
列信息可用于获取数据变动前的取值(透过HBase压缩策略可以删除列信息历史记录来释放存储空间)。
限制
Hive不支持常规的SQL更新语句,如:数据插入,更新,删除。因为其对数据的操作是针对整个数据表的。同时该特点也使得数据查询用时以数分钟甚至数小时来进行计算。此外,其MapReduce转换过程必须遵从预定义的转换规则。
HBase的数据查询是有一套属于自己类似SQL的操作语言的,这个需要一定的学习来掌握。此外,要运行HBase,ZooKeeper是需要配备的。ZooKeeper是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护、名字服务、分布式同步、组服务等。
应用举例
Hive适用于网络日志等数据量大、静态的数据查询。例如:用户消费行为记录,网站访问足迹等。但是不适用于联机实时在线查询的场合。
HBase能在大数据联机实时查询场合大展身手。例如:Fackbook就利用其对用户间的传送的消息进行联机实时分析。
小结
Hive与HBase两者是基于Hadoop上不同的技术。Hive是一种能执行MapReduce作业的类SQL编程接口,Hbase是一种非关系型的数据库结构。结合这两者自身的特点,互相结合使用或许能收到相得益彰的效果。例如:利用Hive处理静态离线数据,利用HBase进行联机实时查询,而后对两者间的结果集进行整合归并,从而使得数据完整且永葆青春,为进一步的商业分析提供良好支持。
hbase
HBase – Hadoop Database,是一个分布式的、面向列的开源数据库,该技术来源于Chang et al所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储一样,HBase在Hadoop之上提供了类似于Bigtable的能力。HBase是Apache的Hadoop项目的子项目。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库.另一个不同的是HBase基于列的而不是基于行的模式。
按行:以一行一行为单位存,反正各有优势
HBase中的所有数据文件都存储在Hadoop HDFS文件系统上,主要包括上述提出的两种文件类型:
1. HFile, HBase中KeyValue数据的存储格式,HFile是Hadoop的二进制格式文件,实际上StoreFile就是对HFile做了轻量级包装,即StoreFile底层就是HFile
2. HLog File,HBase中WAL(Write Ahead Log)的存储格式,物理上是Hadoop的Sequence File
hive
hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。另外一个是Windows注册表文件。
mapreduce
MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。概念"Map(映射)"和"Reduce(化简)",和他们的主要思想,都是从函数式编程语言里借来的,还有从矢量编程语言里借来的特性。他极大地方便了编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统上。当前的软件实现是指定一个Map(映射)函数,用来把一组键值对映射成一组新的键值对,指定并发的Reduce(化简)函数,用来保证所有映射的键值对中的每一个共享相同的键组
ZooKeeper
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,包含一个简单的原语集,是Hadoop和Hbase的重要组件。分布式应用可以使用它来实现诸如:统一命名服务、配置管理、分布式锁服务、集群管理等功能。
8.6、hbase配置信息说明
hbase.rootdir
这个目录是region server的共享目录,用来持久化Hbase。URL需要是'完全正确'的,还要包含文件系统的scheme。例如,要表示hdfs中的 '/hbase'目录,namenode 运行在namenode.example.org的9090端口。则需要设置为hdfs://namenode.example.org:9000 /hbase。默认情况下Hbase是写到/tmp的。不改这个配置,数据会在重启的时候丢失。
默认: file:///tmp/hbase-${user.name}/hbase
hbase.master.port
Hbase的Master的端口.
默认: 60000
hbase.cluster.distributed
Hbase的运行模式。false是单机模式,true是分布式模式。若为false,Hbase和Zookeeper会运行在同一个JVM里面。
默认: false
hbase.tmp.dir
本地文件系统的临时文件夹。可以修改到一个更为持久的目录上。(/tmp会在重启时清楚)
默认: /tmp/hbase-${user.name}
hbase.master.info.port
HBase Master web 界面端口. 设置为-1 意味着你不想让他运行。
默认: 60010
hbase.master.info.bindAddress
HBase Master web 界面绑定的端口
默认: 0.0.0.0
hbase.client.write.buffer
HTable 客户端的写缓冲的默认大小。这个值越大,需要消耗的内存越大。因为缓冲在客户端和服务端都有实例,所以需要消耗客户端和服务端两个地方的内存。得到的好处 是,可以减少RPC的次数。可以这样估算服务器端被占用的内存: hbase.client.write.buffer * hbase.regionserver.handler.count
默认: 2097152
hbase.regionserver.port
HBase RegionServer绑定的端口
默认: 60020
hbase.regionserver.info.port
HBase RegionServer web 界面绑定的端口 设置为 -1 意味这你不想与运行 RegionServer 界面.
默认: 60030
hbase.regionserver.info.port.auto
Master或RegionServer是否要动态搜一个可以用的端口来绑定界面。当hbase.regionserver.info.port已经被占用的时候,可以搜一个空闲的端口绑定。这个功能在测试的时候很有用。默认关闭。
默认: false
hbase.regionserver.info.bindAddress
HBase RegionServer web 界面的IP地址
默认: 0.0.0.0
hbase.regionserver.class
RegionServer 使用的接口。客户端打开代理来连接region server的时候会使用到。
默认: org.apache.hadoop.hbase.ipc.HRegionInterface
hbase.client.pause
通常的客户端暂停时间。最多的用法是客户端在重试前的等待时间。比如失败的get操作和region查询操作等都很可能用到。
默认: 1000
hbase.client.retries.number
最大重试次数。例如 region查询,Get操作,Update操作等等都可能发生错误,需要重试。这是最大重试错误的值。
默认: 10
hbase.client.scanner.caching
当 调用Scanner的next方法,而值又不在缓存里的时候,从服务端一次获取的行数。越大的值意味着Scanner会快一些,但是会占用更多的内存。当 缓冲被占满的时候,next方法调用会越来越慢。慢到一定程度,可能会导致超时。例如超过了 hbase.regionserver.lease.period。
默认: 1
hbase.client.keyvalue.maxsize
一 个KeyValue实例的最大size.这个是用来设置存储文件中的单个entry的大小上界。因为一个KeyValue是不能分割的,所以可以避免因为 数据过大导致region不可分割。明智的做法是把它设为可以被最大region size整除的数。如果设置为0或者更小,就会禁用这个检查。默认10MB。
默认: 10485760
hbase.regionserver.lease.period
客户端租用HRegion server 期限,即超时阀值。单位是毫秒。默认情况下,客户端必须在这个时间内发一条信息,否则视为死掉。
默认: 60000
hbase.regionserver.handler.count
RegionServers受理的RPC Server实例数量。对于Master来说,这个属性是Master受理的handler数量
默认: 10
hbase.regionserver.msginterval
RegionServer 发消息给 Master 时间间隔,单位是毫秒
默认: 3000
hbase.regionserver.optionallogflushinterval
将Hlog同步到HDFS的间隔。如果Hlog没有积累到一定的数量,到了时间,也会触发同步。默认是1秒,单位毫秒。
默认: 1000
hbase.regionserver.regionSplitLimit
region的数量到了这个值后就不会在分裂了。这不是一个region数量的硬性限制。但是起到了一定指导性的作用,到了这个值就该停止分裂了。默认是MAX_INT.就是说不阻止分裂。
默认: 2147483647
hbase.regionserver.logroll.period
提交commit log的间隔,不管有没有写足够的值。
默认: 3600000
hbase.regionserver.hlog.reader.impl
HLog file reader 的实现.
默认: org.apache.hadoop.hbase.regionserver.wal.SequenceFileLogReader
hbase.regionserver.hlog.writer.impl
HLog file writer 的实现.
默认: org.apache.hadoop.hbase.regionserver.wal.SequenceFileLogWriter
hbase.regionserver.thread.splitcompactcheckfrequency
region server 多久执行一次split/compaction 检查.
默认: 20000
hbase.regionserver.nbreservationblocks
储备的内存block的数量(译者注:就像石油储备一样)。当发生out of memory 异常的时候,我们可以用这些内存在RegionServer停止之前做清理操作。
默认: 4
hbase.zookeeper.dns.interface
当使用DNS的时候,Zookeeper用来上报的IP地址的网络接口名字。
默认: default
hbase.zookeeper.dns.nameserver
当使用DNS的时候,Zookeepr使用的DNS的域名或者IP 地址,Zookeeper用它来确定和master用来进行通讯的域名.
默认: default
hbase.regionserver.dns.interface
当使用DNS的时候,RegionServer用来上报的IP地址的网络接口名字。
默认: default
hbase.regionserver.dns.nameserver
当使用DNS的时候,RegionServer使用的DNS的域名或者IP 地址,RegionServer用它来确定和master用来进行通讯的域名.
默认: default
hbase.master.dns.interface
当使用DNS的时候,Master用来上报的IP地址的网络接口名字。
默认: default
hbase.master.dns.nameserver
当使用DNS的时候,RegionServer使用的DNS的域名或者IP 地址,Master用它来确定用来进行通讯的域名.
默认: default
hbase.balancer.period
Master执行region balancer的间隔。
默认: 300000
hbase.regions.slop
当任一regionserver有average + (average * slop)个region是会执行Rebalance
默认: 0
hbase.master.logcleaner.ttl
Hlog存在于.oldlogdir 文件夹的最长时间, 超过了就会被 Master 的线程清理掉.
默认: 600000
hbase.master.logcleaner.plugins
LogsCleaner 服务会执行的一组LogCleanerDelegat。值用逗号间隔的文本表示。这些WAL/HLog cleaners会按顺序调用。可以把先调用的放在前面。你可以实现自己的LogCleanerDelegat,加到Classpath下,然后在这里写 下类的全称。一般都是加在默认值的前面。
默认: org.apache.hadoop.hbase.master.TimeToLiveLogCleaner
hbase.regionserver.global.memstore.upperLimit
单个region server的全部memtores的最大值。超过这个值,一个新的update操作会被挂起,强制执行flush操作。
默认: 0.4
hbase.regionserver.global.memstore.lowerLimit
当强制执行flush操作的时候,当低于这个值的时候,flush会停止。默认是堆大小的 35% . 如果这个值和 hbase.regionserver.global.memstore.upperLimit 相同就意味着当update操作因为内存限制被挂起时,会尽量少的执行flush(译者注:一旦执行flush,值就会比下限要低,不再执行)
默认: 0.35
hbase.server.thread.wakefrequency
service工作的sleep间隔,单位毫秒。 可以作为service线程的sleep间隔,比如log roller.
默认: 10000
hbase.hregion.memstore.flush.size
当memstore的大小超过这个值的时候,会flush到磁盘。这个值被一个线程每隔hbase.server.thread.wakefrequency检查一下。
默认: 67108864
hbase.hregion.preclose.flush.size
当一个region中的memstore的大小大于这个值的时候,我们又触发了close.会先运行“pre-flush”操作,清理这个需要关闭的 memstore,然后将这个region下线。当一个region下线了,我们无法再进行任何写操作。如果一个memstore很大的时候,flush 操作会消耗很多时间。"pre-flush"操作意味着在region下线之前,会先把memstore清空。这样在最终执行close操作的时 候,flush操作会很快。
默认: 5242880
hbase.hregion.memstore.block.multiplier
如果memstore有hbase.hregion.memstore.block.multiplier倍数的 hbase.hregion.flush.size的大小,就会阻塞update操作。这是为了预防在update高峰期会导致的失控。如果不设上 界,flush的时候会花很长的时间来合并或者分割,最坏的情况就是引发out of memory异常。(译者注:内存操作的速度和磁盘不匹配,需要等一等。原文似乎有误)
默认: 2
hbase.hregion.memstore.mslab.enabled
体验特性:启用memStore分配本地缓冲区。这个特性是为了防止在大量写负载的时候堆的碎片过多。这可以减少GC操作的频率。(GC有可能会Stop the world)(译者注:实现的原理相当于预分配内存,而不是每一个值都要从堆里分配)
默认: false
hbase.hregion.max.filesize
最大HStoreFile大小。若某个Column families的HStoreFile增长达到这个值,这个Hegion会被切割成两个。 Default: 256M.
默认: 268435456
hbase.hstore.compactionThreshold
当一个HStore含有多于这个值的HStoreFiles(每一个memstore flush产生一个HStoreFile)的时候,会执行一个合并操作,把这HStoreFiles写成一个。这个值越大,需要合并的时间就越长。
默认: 3
hbase.hstore.blockingStoreFiles
当一个HStore含有多于这个值的HStoreFiles(每一个memstore flush产生一个HStoreFile)的时候,会执行一个合并操作,update会阻塞直到合并完成,直到超过了hbase.hstore.blockingWaitTime的值
默认: 7
hbase.hstore.blockingWaitTime
hbase.hstore.blockingStoreFiles所限制的StoreFile数量会导致update阻塞,这个时间是来限制阻塞时间的。当超过了这个时间,HRegion会停止阻塞update操作,不过合并还有没有完成。默认为90s.
默认: 90000
hbase.hstore.compaction.max
每个“小”合并的HStoreFiles最大数量。
默认: 10
hbase.hregion.majorcompaction
一个Region中的所有HStoreFile的major compactions的时间间隔。默认是1天。 设置为0就是禁用这个功能。
默认: 86400000
hbase.mapreduce.hfileoutputformat.blocksize
MapReduce 中HFileOutputFormat可以写 storefiles/hfiles. 这个值是hfile的blocksize的最小值。通常在Hbase写Hfile的时候,bloocksize是由table schema(HColumnDescriptor)决定的,但是在mapreduce写的时候,我们无法获取schema中blocksize。这个值 越小,你的索引就越大,你随机访问需要获取的数据就越小。如果你的cell都很小,而且你需要更快的随机访问,可以把这个值调低。
默认: 65536
hfile.block.cache.size
分配给HFile/StoreFile的block cache占最大堆(-Xmx setting)的比例。默认是20%,设置为0就是不分配。
默认: 0.2
hbase.hash.type
哈希函数使用的哈希算法。可以选择两个值:: murmur (MurmurHash) 和 jenkins (JenkinsHash). 这个哈希是给 bloom filters用的.
默认: murmur
hbase.master.keytab.file
HMaster server验证登录使用的kerberos keytab 文件路径。(译者注:Hbase使用Kerberos实现安全)
默认:
hbase.master.kerberos.principal
例如. "hbase/
[email protected]". HMaster运行需要使用 kerberos principal name. principal name 可以在: user/hostname@DOMAIN 中获取. 如果 "_HOST" 被用做hostname portion,需要使用实际运行的hostname来替代它。
默认:
hbase.regionserver.keytab.file
HRegionServer验证登录使用的kerberos keytab 文件路径。
默认:
hbase.regionserver.kerberos.principal
例如. "hbase/
[email protected]". HRegionServer运行需要使用 kerberos principal name. principal name 可以在: user/hostname@DOMAIN 中获取. 如果 "_HOST" 被用做hostname portion,需要使用实际运行的hostname来替代它。在这个文件中必须要有一个entry来描述 hbase.regionserver.keytab.file
默认:
zookeeper.session.timeout
ZooKeeper 会话超时.Hbase把这个值传递改zk集群,向他推荐一个会话的最大超时时间。详见http://hadoop.apache.org/zookeeper/docs/current/zookeeperProgrammers.html#ch_zkSessions "The client sends a requested timeout, the server responds with the timeout that it can give the client. "。 单位是毫秒
默认: 180000
zookeeper.znode.parent
ZooKeeper中的Hbase的根ZNode。所有的Hbase的ZooKeeper会用这个目录配置相对路径。默认情况下,所有的Hbase的ZooKeeper文件路径是用相对路径,所以他们会都去这个目录下面。
默认: /hbase
zookeeper.znode.rootserver
ZNode 保存的 根region的路径. 这个值是由Master来写,client和regionserver 来读的。如果设为一个相对地址,父目录就是 ${zookeeper.znode.parent}.默认情形下,意味着根region的路径存储在/hbase/root-region- server.
默认: root-region-server
hbase.zookeeper.quorum
Zookeeper 集群的地址列表,用逗号分割。例 如:"host1.mydomain.com,host2.mydomain.com,host3.mydomain.com".默认是 localhost,是给伪分布式用的。要修改才能在完全分布式的情况下使用。如果在hbase-env.sh设置了HBASE_MANAGES_ZK, 这些ZooKeeper节点就会和Hbase一起启动。
默认: localhost
hbase.zookeeper.peerport
ZooKeeper节点使用的端口。详细参见:http://hadoop.apache.org/zookeep ... ReplicatedZooKeeper
默认: 2888
hbase.zookeeper.leaderport
ZooKeeper用来选择Leader的端口,详细参见:http://hadoop.apache.org/zookeep ... ReplicatedZooKeeper
默认: 3888
hbase.zookeeper.property.initLimit
ZooKeeper的zoo.conf中的配置。 初始化synchronization阶段的ticks数量限制
默认: 10
hbase.zookeeper.property.syncLimit
ZooKeeper的zoo.conf中的配置。 发送一个请求到获得承认之间的ticks的数量限制
默认: 5
hbase.zookeeper.property.dataDir
ZooKeeper的zoo.conf中的配置。 快照的存储位置
默认: ${hbase.tmp.dir}/zookeeper
hbase.zookeeper.property.clientPort
ZooKeeper的zoo.conf中的配置。 客户端连接的端口
默认: 2181
hbase.zookeeper.property.maxClientCnxns
ZooKeeper的zoo.conf中的配置。 ZooKeeper集群中的单个节点接受的单个Client(以IP区分)的请求的并发数。这个值可以调高一点,防止在单机和伪分布式模式中出问题。
默认: 2000
hbase.rest.port
HBase REST server的端口
默认: 8080
hbase.rest.readonly
定义REST server的运行模式。可以设置成如下的值: false: 所有的HTTP请求都是被允许的 - GET/PUT/POST/DELETE. true:只有GET请求是被允许的
默认: false
8.7、hadoop 根据SecondaryNameNode恢复Namenode
1、修改conf/core-site.xml
增加
<property>
<name>fs.checkpoint.period</name>
<value>3600</value>
<description>The number of seconds between two periodic checkpoints. </description>
</property>
<property>
<name>fs.checkpoint.size</name>
<value>67108864</value>
<description>The size of the current edit log (in bytes) that triggers a periodic checkpoint even if the fs.checkpoint.period hasn't expired. </description>
</property>
<property>
<name>fs.checkpoint.dir</name>
<value>/data/work/hdfs/namesecondary</value>
<description>Determines where on the local filesystem the DFS secondary name node should store the temporary images to merge. If this is a comma-delimited list of directories then the image is replicated in all of the directories for redundancy. </description>
</property>
fs.checkpoint.period表示多长时间记录一次hdfs的镜像。默认是1小时。
fs.checkpoint.size表示一次记录多大的size,默认64M
2、修改conf/hdfs-site.xml
增加
<property>
<name>dfs.http.address</name>
<value>master:50070</value>
<description> The address and the base port where the dfs namenode web ui will listen on. If the port is 0 then the server will start on a free port. </description>
</property>
0.0.0.0改为namenode的IP地址
3、重启hadoop,然后检查是否启动是否成功
登录secondarynamenode所在的机器,输入jps查看secondarynamenode进程
进入secondarynamenode的目录/data/work/hdfs/namesecondary
正确的结果:
如果没有,请耐心等待,只有到了设置的checkpoint的时间或者大小,才会生成。
4、恢复
制造namenode宕机的情况
1) kill 掉namenode的进程
[root@master name]# jps
11749 NameNode
12339 Jps
11905 JobTracker
[root@master name]# kill 11749
2)删除dfs.name.dir所指向的文件夹,这里是/data/work/hdfs/name
[root@master name]# rm -rf *
删除name目录下的所有内容,但是必须保证name这个目录是存在的
3)从secondarynamenode远程拷贝namesecondary文件到namenode的namesecondary
[root@master hdfs]# scp -r slave-001:/data/work/hdfs/namesecondary/ ./
4)启动namenode
[root@master /data]# hadoop namenode –importCheckpoint
正常启动以后,屏幕上会显示很多log,这个时候namenode就可以正常访问了
5)检查
使用hadoop fsck /user命令检查文件Block的完整性
hadoop fsck /
6)停止namenode,使用ctrl+C或者会话结束
7)删除namesecondary目录下的文件(保存干净)
[root@master namesecondary]# rm -rf *
8)正式启动namenode
[root@master bin]# ./hadoop-daemon.sh start namenode
恢复工作完成,检查hdfs的数据
9)balancer
在使用start-balancer.sh时,
默认使用1M/S(1048576)的速度移动数据(so slowly...)
修改hdfs-site.xml配置,这里我们使用的是20m/S
<property>
<name>dfs.balance.bandwidthPerSec</name>
<value>20971520</value>
<description> Specifies the maximum bandwidth that each datanode can utilize for the balancing purpose in term of the number of bytes per second. </description>
</property>
然后结果是导致job运行变得不稳定,出现一些意外的长map单元,某些reduce时间处理变长(整个集群负载满满的情况下,外加20m/s的balance),据说淘宝的为10m/s,需要调整后实验,看看情况如何。
8.8、Hadoop调优
1、修改:/etc/security/limits.d/90-nproc.conf
sudo vi /etc/security/limits.d/90-nproc.conf
添加以下内容:
* soft nproc 10240
root soft nproc unlimited
2、调整 Linux 参数来避免swap,可能解决ZooKeeper 的 session 过期的问题
# echo "vm.swappiness = 0" >> /etc/sysctl.conf
注意:系统需要重新启动。
3、配置/etc/security/limits.conf
sudo vim /etc/security/limits.conf
在文件尾追加
* hard nofile 40960
* soft nofile 40960
* soft noproc 32000
* hard noproc 32000
* soft stack 8192
* hard stack 8192
九、附录(配置文件)
9.1、hadoop配置文件
Hadoop有以下文件需要配置:core-site.xml、hdfs-site.xml、yarn-site.xml、hadoop-env.sh、masters、slaves
文件名
Core-site.xml
路径
$HADOOP_HOME/etc/Hadoop/core-site.xml
内容
文件名
Hdfs-site.xml
路径
$HADOOP_HOME/etc/Hadoop/hdfs-site.xml
文件
Mapred-site.xml
路径
$HADOOP_HOME/etc/Hadoop/mapred-site.xml
文件
Yarn-site.xml
路径
$HADOOP_HOOME/etc/Hadoop/yarn-site.xml
文件
hadoop-env.sh
路径
$HADOOP_HOME/etc/Hadoop/hadoop-env.sh
内容
export JAVA_HOME=/usr/java/jdk1.8.0_45/
文件
Masters
路径
$HADOOP_HOME/etc/Hadoop/masters
内容
文件
slaves
路径
$HADOOP_HOME/etc/Hadoop/slaves
内容
9.2、zookeeper配置文件
文件
Zoo.cfg
路径
$ZOOKEEPER_HOME/conf/zoo.cfg
内容
9.3、hbase配置文件
文件
Hbase-env.sh
路径
$HBASE_HOME/conf/hbase-env.sh
内容
export JAVA_HOME=/usr/java/jdk1.8.0_45/
文件
Hbase-site.sh
路径
$HBASE_HOME/conf/hbase-site.sh
内容
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>zookeeper.session.timeout</name>
<value>600000</value>
</property>
<property>
<name>phoenix.query.dateFormatTimeZone</name>
<value>LOCAL</value>
</property>
<property>
<name>phoenix.connection.autoCommit</name>
<value>false</value>
</property>
<property>
<name>hbase.rootdir</name>
<value>hdfs://Hadoop.Master:9000/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>Hadoop.Slave1,Hadoop.Slave2,Hadoop.Slave3,Hadoop.Slave4</value>
</property>
<property>
<name>hbase.zookeeper.sission.timeout</name>
<value>180000</value>
</property>
<property>
<name>hbase.zookeeper.property.clientPort</name>
<value>2181</value>
</property>
<property>
<name>hbase.master</name>
<value>Hadoop.Master</value>
</property>
<property>
<name>hbase.client.scanner.timeout.period</name>
<value>180000</value>
</property>
<property>
<name>hbase.hregion.memstore.flush.size</name>
<value>1073741824</value>
</property>
<property>
<name>hbase.hregion.max.filesize</name>
<value>1073741824</value>
</property>
<property>
<name>hbase.rpc.timeout</name>
<value>180000</value>
</property>
<property>
<name>hbase.master.info.port</name>
<value>60010</value>
</property>
<property>
<name>hbase.defaults.for.version.skip</name>
<value>true</value>
</property>
<property>
<name>hbase.regionserver.wal.codec</name>
<value>org.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec</value>
</property>
</configuration>
文件
regionservers
路径
$HBASE_HOME/conf/regionservers
内容