看了长时间的原理和机制,终于有了两天闲工夫,系统的实施一下环境搭建。综合参考官网文档以及其他版本安装的脚步,写下来,加深一下自己的理解与记忆。


清口水果:
1. 安装JDK,配置环境变量,javac验证;
2. 确定实验需要使用的用户,了解用户角色及权限范围;(貌似除了ubuntu自动关闭防火墙外,其他linux需要弄一下)
3. 确定机器ip,改写/etc/hosts使能够解析地址;
4. 安装ssh,三台机器互相全部建立互信;


正餐:


hadoop1.1.2
1. 解压到~;
2. 改写运行文件以及配置文件;(hadoop-env.sh, core-site.xml[hadoop.tmp.dir], hdfs-site.xml, mapred-site.xml, master, slaves)
3. 确保无误后,scp到另外两台机器;
4. ./bin/hadoop namenode -format
5. 针对配置文件中的data和name的位置建立对应文件夹,一般放在hadoop root下面就可以
6. ./start-all.sh
7. jps + hdfs://master:50030[50070]
8. 运行example —— ./hadoop jar hadoop-examples-jar.jar WordCount input output


zookeeper
1. 下载解压到~;
2. 修改配置文件mv zoo-default.cfg zoo.cfg


a. dataDir----the location to store the in-memory database snapshots and, unless specified otherwise, the transaction log of updates to the database.


b. 


clientPort=2181


server.1=hadoop01:2888:3888

// 前面的数字1是用myid寻找或者寻找myid的依据,hadoop01是ip或地址,2888是servers之间连接的端口,3888是选举端口。


server.2=hadoop02:2888:3888


server.3=hadoop03:2888:3888


c. tickTime 用来指定心跳间隔,一次会话就包括来回两个心跳时间间隔;


d. clientPort  给客户端连接的端口


e. initLimit 指其他几个servers连接到leader的时间阈值;


f. syncLimit 不会翻译


(注:以上两个limit本人查过有各种说法。。。实践是检验真理的唯一标准,后面用到的话再补上)

3. 在dataDir指定的目录中建立文件myid,内容对应当前节点server后面的数字——1,2,3
4. scp到另外两台
5. ./zkServer.sh start(每台都要启动)
6. ./zkServer.sh status —— leader(根据), follwer, observer(无权选举)
7. ./zkCli.sh -server will-vm1:2181 客户端连接server


hbase
1. 解压~:
2. 修改配置文件hbase-site.xml(可以从src/main/resource/hbase-default.xml进行copy改写),
hbase-env.sh;
export JAVA_HOME=/usr/java/jdk
export HBASE_CLASSPATH=/usr/local/hadoop-1.0.4/conf
export HBASE_MANAGES_ZK=false
export HBASE_HEAPSIZE=2048
export HBASE_MANAGES_ZK=false  //配置实现hbase启动的时候不使用自带的zookeeper

hbase-site.xml:
<configuration>
<property>
  <name>hbase.rootdir</name>
  <value>will-vm1:9000/hbase</value>
  <description>
  hbase所使用的文件系统为HDFS,根目录为hdfs://node0:9000/hbase,该目录应该由HBase自动创建,只需要指定到正确的HDFS NameNode上即可
  </description>
</property>
<property>
  <name>hbase.hregion.max.filesize</name>
  <value>1073741824</value>
  <description>
  设置HStoreFile的阈值。若某个列族的HStoreFile增长达到这个值,这个Hegion会被切割成两个。默认: 10G.
  </description>
</property>
<property>
  <name>hbase.hregion.memstore.flush.size</name>
  <value>134217728</value>
  <description>
  设置memstore的阈值,当大于这个值时,写入磁盘
  </description>
</property>
<property>
  <name>hbase.cluster.distributed</name>
  <value>true</value>
  <description>
  指定hbase是否为分布式模式
</description>
</property>
<property>
    <name>hbase.zookeeper.property.clientPort</name>
    <value>2181</value>
    <description>
    zookeeper的端口号
    </description>
</property>
<property>
  <name>zookeeper.session.timeout</name>
  <value>120000</value>
<description>
    RegionServer与Zookeeper间的连接超时时间。当超时时间到后,ReigonServer会被Zookeeper从RS集群清单中移除,HMaster收到移除通知后,会对这台server负责的regions重新balance,让其他存活的RegionServer接管.
    </description>
</property>
<property>
  <name>hbase.zookeeper.property.tickTime</name>
  <value>6000</value>
<description>
  发送心跳时间间隔,单位毫秒
</description>
</property>
  <property>
    <name>hbase.zookeeper.quorum</name>
    <value>hadoop01,hadoop02,hadoop03</value>
    <description>
    列出zookeeper群
    Comma separated list of servers in the ZooKeeper Quorum.
    For example, "host1.mydomain.com,host2.mydomain.com,host3.mydomain.com".
    By default this is set to localhost for local and pseudo-distributed modes
    of operation. For a fully-distributed setup, this should be set to a full
    list of ZooKeeper quorum servers. If HBASE_MANAGES_ZK is set in hbase-env.sh
    this is the list of servers which we will start/stop ZooKeeper on.
    </description>
</property>
<property>
      <name>hbase.tmp.dir</name>
      <value>/hadoop/hbase</value>
       <description>
      本地文件系统的临时文件夹。可以修改到一个更为持久的目录上。(/tmp会在重启时清楚)
      默认:${java.io.tmpdir}/hbase-${user.name}
      </description>
  </property>
</configuration>
3. 将除master之外的机器写进conf/regionserver,就像写slaves一样
4. scp到其他节点
5. 在启动hadoop和zookeeper的之后,启动hbase,./bin/start-hbase.sh
6.
will@will-vm1:~$ jps
17186 HMaster
15105 SecondaryNameNode
15358 QuorumPeerMain
14867 NameNode
15189 JobTracker
17896 Jps


will@will-vm2:~$ jps
7512 QuorumPeerMain
8525 HRegionServer
9064 Jps
7204 DataNode
7401 TaskTracker


will@will-vm3:~$ jps
7512 QuorumPeerMain
8525 HRegionServer
9064 Jps
7204 DataNode
7401 TaskTracker
7. ./hbase shell进行数据库管理操作
8. http://will-vm1:60010/master-status
  http://will-vm1:60030


甜点
1. Exception:not attempt to authenticate using SASL —— zookeeper没有启动或者连接有问题
2. zookeeper中的observer没有选举权,永远不会成为leader,只接受读请求,将写请求转发给leader,配置为server.4=will-vm4:2888:3888:observer.
3. zooKeeper 需要在所有的服务(可以理解为服务器)中选举出一个 Leader ,然后让这个 Leader 来负责管理集群。此时,集群中的其它服务器则成为此 Leader 的 Follower 。并且,当 Leader 故障的时候,需要 ZooKeeper 能够快速地在 Follower 中选举出下一个 Leader 。
此操作实现的核心思想是:首先创建一个 EPHEMERAL 目录节点,例如“ /election ”。然后。每一个 ZooKeeper 服务器在此目录下创建一个 SEQUENCE| EPHEMERAL 类型的节点,例如“ /election/n_ ”。在 SEQUENCE 标志下, ZooKeeper 将自动地为每一个 ZooKeeper 服务器分配一个比前一个分配的序号要大的序号。此时创建节点的 ZooKeeper 服务器中拥有最小序号编号的服务器将成为 Leader。
参见:http://blog.csdn.net/shenlan211314/article/details/6187040
4.  Exception:Error contacting service. It is probably not running. 这里是只有一个zookeeper在运行的时候会这样,有两个以后就不会了。。原因暂时不清楚,可能是因为需要协同的原因吧。有人说是nc版本问题,个人感觉好像不是很相关。
5. JDWP多数在启动文件XX.sh或者配置文件的某property中,但是后缀总是POTS