Hadoop-2.6.0 + Zookeeper-3.4.6 + HBase-0.98.9-hadoop2环境搭建示例
1 基本信息
1.1 软件信息
hadoop-2.6.0
zookeeper-3.4.6
hbase-0.98.9-hadoop2
(以下示例中使用的操作系统是Centos 6.5,请将下载的3个tar包分别解压并放置在/usr/local/目录下)
(Hbase包中lib里可以看到zookeeper的jar包,从文件名可以确定使用的zookeeper版本)
1.2 集群组成:
Server Name |
Hadoop Cluster |
Zookeeper Ensemble |
HBase Cluster |
hadoopnamenode |
Name node & Resource manager |
√ |
Master |
hadoop2ndnamenode |
Secondary name node |
√ |
|
hadoopdatanode1 |
Data node & Node manager |
√ |
Region server |
hadoopdatanode2 |
Data node & Node manager |
Region server |
|
hadoopdatanode3 |
Data node & Node manager |
Region server |
2 Hadoop集群
2.1 配置
2.1.1 core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoopnamenode:9000</value>
</property>
</configuration>
2.1.2 hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/root/hadoopdata/namenode</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/root/hadoopdata/datanode</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop2ndnamenode:9001</value>
</property>
</configuration>
2.1.3 mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
2.1.4 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.resource-tracker.address</name>
<value>hadoopnamenode:8025</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>hadoopnamenode:8030</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>hadoopnamenode:8040</value>
</property>
</configuration>
2.1.5 slaves
hadoopdatanode1
hadoopdatanode2
hadoopdatanode3
2.1.6 /etc/hosts
153.65.170.45 hadoopnamenode.mh.com hadoopnamenode
153.65.171.174 hadoop2ndnamenode.mh.com hadoop2ndnamenode
153.65.171.20 hadoopdatanode1.mh.com hadoopdatanode1
153.65.170.204 hadoopdatanode2.mh.com hadoopdatanode2
153.65.170.85 hadoopdatanode3.mh.com hadoopdatanode3
2.1.7 ~/.bashrc
与上一篇博客介绍的Hadoop 1类似,为了方便起见,修改.bashrc设置环境变量,注意sbin最好也要加到path中:
export HADOOP_PREFIX=/usr/local/hadoop-2.6.0
export HADOOP_MAPRED_PREFIX=$HADOOP_PREFIX
export HADOOP_HDFS_PREFIX=$HADOOP_PREFIX
export HADOOP_YARN_PREFIX=$HADOOP_PREFIX
export PATH=$PATH:$HADOOP_PREFIX/bin
export PATH=$PATH:$HADOOP_PREFIX/sbin
2.1.8 分发到集群的其它机器
把hadoop-2.6.0文件夹连同修改后的配置文件以及hosts文件,通过scp拷贝到其它四台机器上。
(并没有要求说所有的机器上都使用一样的配置文件,比如namenode的hdfs-site.xml应该是不需要dfs.datanode.data.dir配置,而datanode的hdfs-site.xml应该不需要dfs.namenode.name.dir配置。而也只有namenode上需要配置slaves文件。这里是为了简单起见,我们让所有机器上都保持一样的配置)
2.1.9 设置ssh免密码访问
参见上一篇博客。
2.1.10 一些配置参数的解释
Hadoop 2中没有mapred.job.tracker了,新框架中已改为yarn-site.xml 中的 resouceManager 及 nodeManager具体配置项,新框架中历史 job 的查询已从Job tracker剥离,归入单独的mapreduce.jobtracker.jobhistory 相关配置。
yarn.resourcemanager.address---NodeManager 与 RM 通信的接口地址
yarn.resourcemanager.scheduler.address---NodeManger 需要知道 RM 主机的 scheduler 调度服务接口地址
yarn.resourcemanager.resource-tracker.address---NodeManager 需要向 RM 报告任务运行状态供 Resouce 跟踪,因此 NodeManager 节点主机需要知道 RM 主机的 tracker 接口地址
yarn.resourcemanager.webapp.address---各个 task 的资源调度及运行状况通过通过该 web 界面访问
2.2 创建目录
在namenode上创建: /root/hadoopdata/namenode
在3台datanode上创建: /root/hadoopdata/datanode
(也可以让hadoop自动创建)
2.3 启动/关闭
start-dfs.sh,执行之后,使用jps命令查看java进程情况:
hadoopnamenode上有namenode进程,
hadoop2ndnamenode上有secondarynamenode进程,
hadoopdatanode1, hadoopdatanode2, hadoopdatanode3上有datanode进程
start-yarn.sh,执行之后的java进程情况:
hadoopnamenode上有namenode, resourcemanager进程,
hadoop2ndnamenode上有secondarynamenode进程,
hadoopdatanode1, hadoopdatanode2, hadoopdatanode3上有datanode, nodemanager进程
关闭的命令对应的是stop-dfs.sh, stop-yarn.sh
2.4 测试
hdfs dfsadmin -report //查看hdfs的一些基本信息
yarn node –list //查看yarn的一些基本信息
可以使用hadoop的share目录下的一些mapreduce示例程序进行测试,比如wordcount:
先使用copyFromLocal命令(后续有介绍用法)把一个本地文本文件放到hdfs的/book目录下,然后执行:
hadoop jar /usr/local/hadoop-2.6.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar wordcount /book /out2
即对/book目录下的书进行单词统计,然后输出到/out2目录。
可以登录web界面检查hadoop是否运行正常:
hdfs管理界面同hadoop 1: http://hadoopnamenode:50070/
yarn的管理界面不再是原来的50030端口,而是http://hadoopnamenode:8088/
2.5 注意事项
若namenode上的core-site.xml中的fs.defaultFS缺失,则启动时会报错。
若各机器上的yarn-site.xml中的yarn.resourcemanager.resource-tracker.address缺失,虽然resourcemanager与nodemanager进程能够正常启动,但是在执行yarn node -list会出现node数量为0的情况。
若各机器上的yarn-site.xml中的yarn.resourcemanager.scheduler.address或yarn.resourcemanager.address缺失,则在运行job时,会卡在INFO mapreduce.Job: Job job_1422695884569_0001 running in uber mode : false
2.6 几个Hadoop fs shell命令
hadoop fs -ls / ---列出hdfs根目录下的文件、目录
hadoop fs -ls /out2 ---列出out2目录下的文件、目录
hadoop fs -lsr / ---递归显示文件
hadoop fs -cat /out2/part-r-00000 ---打出文件内容
hadoop dfs -copyFromLocal <local_FS_filename> <target_on_HDFS>
hadoop fs -du hdfs://namenodehost/user/hadoop ---查看目录大小
hadoop fs -rm /user/hadoop/file ---删除文件或空目录
hadoop fs -rmr /user/hadoop/dir ---删除文件或目录,递归之意
hafoop fs -tail /user/hadoop/sales.dat ---查看文件内容
注1:
dfs was deprecated in favor of "fs" command.
所以原来的hadoop dfs -copyFromLocal <local_FS_filename> <target_on_HDFS>,现在的写法是
hadoop fs -copyFromLocal <local_FS_filename> <target_on_HDFS>
注2:
hadoop fs -copyFromLocal /root/Downloads/small/war_and_peace.txt /test 这样生成的test是文件,而不是文件夹
所以一般hadoop fs -copyFromLocal /root/Downloads/small /test,这样small下的文件会被copy到test文件夹下
又或者hadoop fs -copyFromLocal /root/Downloads/small/war_and_peace.txt /test4/,注意最后的/,前提是要用hadoop fs -mkdir先创建出test4目录
3 Zookeeper集群
3.1 配置
3.1.1 zoo.cfg
tickTime=2000
dataDir=/root/zookeeperdata
clientPort=2181
initLimit=5
syncLimit=2
server.1=hadoopnamenode:2888:3888
server.2=hadoop2ndnamenode:2888:3888
server.3=hadoopdatanode1:2888:3888
3.1.2 分发到集群的其它机器
把zookeeper文件夹连同修改后的配置文件通过scp拷贝到另外两台机器(hadoop2ndnamenode, hadoopdatanode)上。
3.1.3 设置myid
hadoopnameonde上echo”1” > /root/zookeeperdata/myid
hadoop2ndnamenode上echo “2” > /root/zookeeperdata/myid
hadoopdatanode上echo”3” > /root/zookeeperdata/myid
3.1.4 一些配置参数的解释
tickTime :心跳时间,单位毫秒。同时tickTime又是zookeeper中的基本单位,比如后面的initLimit=5就是指5个tickTime时间,在这里是10秒。
dataDir :存储数据信息的本地目录。
3.2 创建目录
在hadoopnamenode, hadoop2ndnamenode, hadoopdatanode1上创建dataDir中配置的目录/root/zookeeperdata。
3.3 启动/关闭
{ZOOKEEPER_HOME} /bin/zkServer.sh start
启动和关闭命令必须到zookeeper集群的每个机器上,没有像start-dfs.sh那样的命令可以一下子把整个集群启动。
关闭:{ZOOKEEPER_HOME} /bin/zkServer.sh stop
3.4 测试
{ZOOKEEPER_HOME} /bin/zkServer.sh status
以下是结果示例,可以看到各机器的角色是follower还是leader。
[root@hadoopnamenode zookeeper-3.4.6]# bin/zkServer.sh status
JMX enabled by default
Using config: /usr/local/zookeeper-3.4.6/bin/../conf/zoo.cfg
Mode: follower
[root@hadoop2ndnamenode zookeeper-3.4.6]# bin/zkServer.sh status
JMX enabled by default
Using config: /usr/local/zookeeper-3.4.6/bin/../conf/zoo.cfg
Mode: leader
[root@hadoopdatanode1 zookeeper-3.4.6]# bin/zkServer.sh status
JMX enabled by default
Using config: /usr/local/zookeeper-3.4.6/bin/../conf/zoo.cfg
Mode: follower
3.5 注意事项
对于一个包含3台server的Zookeeper集群,最多容许关闭一台(如果被关闭的是leader,则会重新选举出一个)。如果关闭两台,则剩下那台虽然进程QuorumPeerMain还在,但zkServer.sh status查看状态则显示Error contacting service. It is probably not running。
对于一个包含5台server的Zookeeper集群,最多容许关闭两台。关闭三台,则剩下两台虽然进程QuorumPeerMain还在,但也显示同样的错误。
(如果这个时候用Java程序去连接Hbase,则会提示:org.apache.hadoop.hbase.ZooKeeperConnectionException: Can't connect to ZooKeeper)
这里面有两个常见的疑问:
1) 当3台server关闭一台时,只剩下两台时,无法形成majority,那么它是如何选举出leader的?
2) 当5台server关闭三台时,剩下两台,为什么不能像1)中一样仍然正常工作?
这两个问题的答案是同一个,Zookeeper中的所谓majority voting机制,其majority是针对原始的server数量,不是指变化后的数量,这个原始的数量即你配置在zoo.cfg中的server个数。
还有一个常见的问题是为什么推荐使用奇数个Zookeeper server,那是因为3个server与4个server能够提供的可靠性是一样的,3台server的集群允许其中一台server宕机,而4台server的集群也只能容许其中一台server宕机,因为如果两台server宕机,那么剩下两台,对比于原来的4台,2/4不够成大多数。
4 Hbase集群
4.1 配置
4.1.1 hbase-env.sh
其它不变,export HBASE_MANAGES_ZK=false,这表示不使用hbase自带的zookeeper,而使用外部的zookeeper(这里指我们在上面建的zookeeper)
4.1.2 hbase-site.xml
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://hadoopnamenode:9000/hbase</value>
<description>The directory shared by region servers.</description>
</property>
<property>
<name>hbase.zookeeper.property.clientPort</name>
<value>2181</value>
<description>Property from ZooKeeper's config zoo.cfg. The port at which the clients will connect.
</description>
</property>
<property>
<name>zookeeper.session.timeout</name>
<value>120000</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>hadoopnamenode,hadoop2ndnamenode,hadoopdatanode1</value>
</property>
<property>
<name>hbase.tmp.dir</name>
<value>/root/hbasedata</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
</configuration>
4.1.3 regionservers
hadoopdatanode1
hadoopdatanode2
hadoopdatanode3
4.1.4 一些配置参数的解释
hbase.zookeeper.property.clientPort:指定zk的连接端口
zookeeper.session.timeout:RegionServer与Zookeeper间的连接超时时间。当超时时间到后,ReigonServer会被Zookeeper从RS集群清单中移除,HMaster收到移除通知后,会对这台server负责的regions重新balance,让其他存活的RegionServer接管.
hbase.zookeeper.quorum:默认值是 localhost,列出zookeepr ensemble中的servers
4.2 启动/关闭
bin/start-hbase.sh
bin/stop-hbase.sh
4.3 测试
在hadoopnamenode上执行
{HBASE_HOME}/bin/hbase shell
进入shell命令行,通过创建表等操作来检查不是不工作正常。
或者通过一个简单的Java程序来测试:
Configuration config = HBaseConfiguration.create();
config.set( "hbase.zookeeper.quorum", "hadoopnamenode,hadoop2ndnamenode,hadoopdatanode1" );
config.set( "hbase.zookeeper.property.clientport", "2181" );
//config.set("zookeeper.znode.parent", "/hbase-unsecure"); // this is what most people miss :)
HBaseAdmin.checkHBaseAvailable( config );
HTable t = new HTable( config, "test" );
Scan s = new Scan();
//s.addColumn(Bytes.toBytes("cf1"), Bytes.toBytes("name"));
ResultScanner rs = t.getScanner( s );
try{
for ( Result r : rs )
{
for ( Cell cell : r.rawCells() )
{
System.out.println( "RowName:" + new String( CellUtil.cloneRow( cell ) ) + " " );
System.out.println( "Timetamp:" + cell.getTimestamp() + " " );
System.out.println( "column Family:" + new String( CellUtil.cloneFamily( cell ) ) + " " );
System.out.println( "row Name:" + new String( CellUtil.cloneQualifier( cell ) ) + " " );
System.out.println( "value:" + new String( CellUtil.cloneValue( cell ) ) + " " );
}
}
} finally {
t.close();
} System.out.println( "Done!" );
注意,java测试程序所在机器的hosts文件,注意必须有全FDQN(fully qualified domain name, 参见上面linux中的hosts文件),否则有java访问时会提示找不到hadoopnamenode.mh.com
4.4 注意事项
HBase集群需要依赖于一个Zookeeper ensemble。HBase集群中的所有节点以及要访问HBase的客户端都需要能够访问到该Zookeeper ensemble。HBase自带了Zookeeper,但为了方便其他应用程序使用Zookeeper,最好使用单独安装的Zookeeper ensemble。
此外,Zookeeper ensemble一般配置为奇数个节点,并且Hadoop集群、Zookeeper ensemble、HBase集群是三个互相独立的集群,并不需要部署在相同的物理节点上,他们之间是通过网络通信的。
需要注意的是,如果要禁止启动hbase自带的zookeeper,那么,不仅仅需要刚才的export HBASE_MANAGES_ZK=false配置,还需要hdfs-site.xml中的hbase.cluster.distributed为true,否则你在启动时会遇到Could not start ZK at requested port of 2181 错误,这是因为hbase尝试启动自带的zookeeper,而我们已经启动了自己安装的那个zookeeper,默认都使用2181端口,所以出错。
还有,有时候会遇到stop-hbase.sh执行很长时间未结束,很可能的原因是你之前把zookeeper关闭了.
最后,Hbase不需要mapreduce,所以只要start-dfs.sh启动hdfs,然后到zookeeper各节点上启动zookeeper,最后再hbase-start.sh启动hbase即可.
送书了,送书了,关注公众号“程序员杂书馆”,送出O'Reilly《Spark快速大数据分析》纸质书(亦有一批PDF分享)! —— 2018年12月
Hadoop-2.6.0 + Zookeeper-3.4.6 + HBase-0.98.9-hadoop2环境搭建示例的更多相关文章
- 【ZooKeeper系列】1.ZooKeeper单机版、伪集群和集群环境搭建
ZooKeeper安装模式主要有3种: 单机版(Standalone模式)模式:仅有一个ZooKeeper服务 伪集群模式:单机多个ZooKeeper服务 集群模式:多机多ZooKeeper服务 1 ...
- 从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 二十一║Vue实战:开发环境搭建【详细版】
缘起 哈喽大家好,兜兜转转终于来到了Vue实战环节,前边的 6 篇关于Vue基础文章我刚刚简单看了看,感觉写的还是不行呀,不是很系统,所以大家可能看上去比较累,还是得抽时间去润润色,修改修改语句和样式 ...
- 搭建伪分布式 hadoop3.1.3 + zookeeper 3.5.7 + hbase 2.2.2
安装包 Hadoop 3.1.3 Zookeeper 3.5.7 Hbase 2.2.2 所需工具链接: 链接:https://pan.baidu.com/s/1jcenv7SeGX1gjPT9RnB ...
- Hbase 0.95.2介绍及下载地址
HBase是一个分布式的.面向列的开源数据库,该技术来源于Google论文“Bigtable:一个结构化数据的分布式存储系统”.就像Bigtable利用了Google文件系统(File System) ...
- 【ZooKeeper系列】3.ZooKeeper源码环境搭建
前文阅读: [ZooKeeper系列]1.ZooKeeper单机版.伪集群和集群环境搭建 [ZooKeeper系列]2.用Java实现ZooKeeper API的调用 在系列的前两篇文章中,介绍了Zo ...
- Hadoop学习笔记—14.ZooKeeper环境搭建
从字面上来看,ZooKeeper表示动物园管理员,这是一个十分奇妙的名字,我们又想起了Hadoop生态系统中,许多项目的Logo都采用了动物,比如Hadoop采用了大象的形象,所以我们可以猜测ZooK ...
- hadoop2.2.0 单机伪分布式(含64位hadoop编译) 及 eclipse hadoop开发环境搭建
hadoop中文镜像地址:http://mirrors.hust.edu.cn/apache/hadoop/core/hadoop-2.2.0/ 第一步,下载 wget 'http://archive ...
- Hadoop 2.2 & HBase 0.96 Maven 依赖总结
由于Hbase 0.94对Hadoop 2.x的支持不是非常好,故直接添加Hbase 0.94的jar依赖可能会导致问题. 但是直接添加Hbase0.96的依赖,由于官方并没有发布Hbase 0.96 ...
- Hadoop zookeeper hbase spark phoenix (HA)搭建过程
环境介绍: 系统:centos7 软件包: apache-phoenix-4.14.0-HBase-1.4-bin.tar.gz 下载链接:http://mirror.bit.edu.cn/apac ...
随机推荐
- html添加网络音乐
IE浏览器,其他的不一定适应 <embed src="http://www.kmfhsj.com/fish-photo/music/xiaochenggushi.mp3" a ...
- vim/vi 复制,删除,粘贴,查找,替换
1.删除行 光标所在单行,dd 光标所在行以下的5行,5dd 全部删除:dG 2.复制 复制光标所在单行:yy 复制光标以下4行:4yy 3.粘贴 粘贴vi里复制的内容:p 粘贴外部复制过来的内容: ...
- 网页中插入swf动画(embed)
网页中插入swf动画(embed:[ɪm'bed]) 例题: <embed src="swf.sef" width="200" height=" ...
- 转 父表字表统计查询的sql练习
create table father( f_id number(2) primary key, f_name varchar2(10) ); create table s ...
- ubuntu Screen 的比较详细的命令
Linux Screen Commands For Developers 转自:http://fosshelp.blogspot.com/2014/02/linux-screen-commands-f ...
- Java里的构造函数(构造方法)
构造函数 ,是一种特殊的方法.主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中.特别的一个类可以有多个构造函数 ,可根据其参数个数的不同或参数类型 ...
- linux下使用SSL代理(SSLedge)
refer to: https://eurekavpt.com/page/ssledge-on-linux 启动非常简单./ssledge-term-x64 -f config -D 其中的confi ...
- 关于QT安装的一些心得(QT551, VS2013)项目开发配置,以及项目结构分析
推荐QT开发的配置如下: 我的硬件配饰中等,所以推荐一下配置: QT551版本,目前QT最新版8.0,为了稳定选择551版本 VS2013IDE, 因为VS2010与VS2013的编译器相同,但是VS ...
- Android--Notification
1.通知(Notification)是应用程序没有运行在前台时可以向用户发出一些提示消息的功能,发出通知后,手机状态栏会显示通知,用户可以通过下拉状态栏来查看和操作通知: 2.Notification ...
- SQL语句汇总(一)——数据库与表的操作以及创建约束
首先,非常感谢大家对上篇博文的支持,真是让本菜受宠若惊,同时对拖了这么久才出了此篇表示抱歉. 前言:此文旨在汇总从建立数据库到联接查询等绝大部分SQL语句.SQL语句虽不能说很多,但稍有时间不写就容易 ...