设为首页 收藏本站
查看: 1139|回复: 0

[经验分享] hadoop-2.6.0 zookeeper-3.4.6 hbase-0.98.9-hadoop2 集群

[复制链接]
发表于 2016-12-12 11:15:53 | 显示全部楼层 |阅读模式
  1.准备:
  zookeeper3.4.6
  hadoop 2.6.0
  hbase-0.98.9-hadoop2
  protobuf-2.5.0/
./configure
 
make && make check &&make install
 
  clean package -Pdist,native -DskipTests=true  -Dmaven.javadoc.skip=true -Dtar
  pom.xml.hadoop2 install -DskipTests assembly:single -Prelease
  (以下示例中使用的操作系统是Centos 6.5,请将下载的3个tar包分别解压并放置在
  /myhome/env/   目录下)
  (Hbase包中lib里可以看到zookeeper的jar包,从文件名可以确定使用的zookeeper版本)

1.2     集群组成:

  Server Name

  Hadoop Cluster

  Zookeeper Ensemble

  HBase Cluster

  zjenterprise01

  Name node &
  Resource manager

  √

  Master

  zjenterprise02

  Secondary name node

  √


  zjenterprise03

  Data node & 
  Node manager

  √

  Region server

  zjenterprise04

  Data node & 
  Node manager


  Region server

  zjenterprise05

  Data node & 
  Node manager


  Region server


2.1     配置

2.1.1      core-site.xml

<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://zjenterprise01:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/myhome/env/hadoop/temp</value>
</property>
<property>
<name>hadoop.native.lib</name>
<value>ture</value>
</property>
</configuration> 


2.1.2      hdfs-site.xml

<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/myhome/env/hadoop/hdfs/namenode</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/myhome/env/hadoop/hdfs/datanode</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>zjenterprise02:9001</value>
</property>
</configuration> 
 



2.1.3      mapred-site.xml

<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>zjenterprise01:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>zjenterprise01:19888</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>zjenterprise01:8025</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>zjenterprise01:8030</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>zjenterprise01:8040</value>
</property>
</configuration>
 



2.1.5      slaves

zjenterprise03
zjenterprise04
zjenterprise05


2.1.6      /etc/hosts

192.168.3.130  zjenterprise01.mh.com  zjenterprise01
192.168.3.132  zjenterprise02.mh.com   zjenterprise02
192.168.3.134  zjenterprise03.mh.com   zjenterprise03
192.168.3.136  zjenterprise04.mh.com   zjenterprise04
192.168.3.138  zjenterprise05.mh.com   zjenterprise05


2.1.7      ~/.bashrc
  与上一篇博客介绍的Hadoop 1类似,为了方便起见,修改.bashrc设置环境变量,注意sbin最好也要加到path中:

export HADOOP_PREFIX=/myhome/env/hadoop
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上创建:

/myhome/env/hadoop/hdfs/namenode
  在3台datanode上创建:

/myhome/env/hadoop/hdfs/datanode
  (也可以让hadoop自动创建) 

2.3     启动/关闭
  start-dfs.sh,执行之后,使用jps命令查看java进程情况:
  zjenterprise01上有namenode进程,
  zjenterprise02上有secondarynamenode进程,
  zjenterprise03, zjenterprise04, zjenterprise05上有datanode进程
  start-yarn.sh,执行之后的java进程情况:
  zjenterprise01上有namenode, resourcemanager进程,
  zjenterprise02上有secondarynamenode进程,
  zjenterprise03, zjenterprise04, zjenterprise05上有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 /myhome/env/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar wordcount  /myhome/env/hadoop/hdfs/datanode/intput/book   /myhome/env/hadoop/hdfs/datanode/output

  即对book目录下的书进行单词统计,然后输出到output目录。
  可以登录web界面检查hadoop是否运行正常:
  hdfs管理界面同hadoop 1: http://zjenterprise01:50070/ 
  yarn的管理界面不再是原来的50030端口,而是http://zjenterprise01: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=/myhome/env/zookeeper/data
clientPort=2181
initLimit=5
syncLimit=2
server.1=
zjenterprise01:2888:3888
server.2=
zjenterprise02:2888:3888
server.3=
zjenterprise03:2888:3888


3.1.2      分发到集群的其它机器
  把zookeeper文件夹连同修改后的配置文件通过scp拷贝到另外两台机器(zjenterprise02, zjenterprise01)上。

3.1.3      设置myid
  hadoopnameonde上echo”1” > /myhome/env/zookeeper/data/myid
  zjenterprise02上echo “2” > /myhome/env/zookeeper/data/myid
  hadoopdatanode上echo”3” > /myhome/env/zookeeper/data/myid

3.1.4      一些配置参数的解释
  tickTime :心跳时间,单位毫秒。同时tickTime又是zookeeper中的基本单位,比如后面的initLimit=5就是指5个tickTime时间,在这里是10秒。 
  dataDir :存储数据信息的本地目录。 

3.2     创建目录
  在zjenterprise01, zjenterprise02, zjenterprise03上创建dataDir中
  配置的目录  /myhome/env/zookeeper/data

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。

  [iyunv@zjenterprise01 zookeeper]# bin/zkServer.sh status
  JMX enabled by default
  Using config: /myhome/env/zookeeper/bin/../conf/zoo.cfg
  Mode: follower
  [iyunv@zjenterprise02 zookeeper]# bin/zkServer.sh status
  JMX enabled by default
  Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
  Mode: leader
  [iyunv@zjenterprise03 zookeeper]# bin/zkServer.sh status
  JMX enabled by default
  Using config: /usr/local/zookeeper/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://zjenterprise01: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>zjenterprise01,zjenterprise02,zjenterprise03</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

zjenterprise03
zjenterprise04
zjenterprise05


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     测试
  在zjenterprise01上执行
  {HBASE_HOME}/bin/hbase shell
  进入shell命令行,通过创建表等操作来检查不是不工作正常。
  或者通过一个简单的Java程序来测试:

Configuration config = HBaseConfiguration.create();
config.set(
"hbase.zookeeper.quorum", "zjenterprise01,zjenterprise02,zjenterprise03" );
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访问时会提示找不到zjenterprise01.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即可.

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-313240-1-1.html 上篇帖子: MapReduce 编程 系列十二 用Hadoop Streaming技术集成newLISP脚本 下篇帖子: Hadoop Map/Reduce执行全流程关键代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表