hbase存储路径
1. HBase存储架构
上图是HBase的存储架构图。
由上图可以知道,客户端是通过Zookeeper找到HMaster,然后再与具体的Hregionserver进行沟通读写数据的。
具体到物理实现,细节包括以下这些:
首先要清楚HBase在hdfs中的存储路径,以及各个目录的作用。在hbase-site.xml 文件中,配置项 <name> hbase.rootdir</name> 默认 “/hbase”,就是hbase在hdfs中的存储根路径。以下是hbase0.96版本的个路径作用。1.0以后的版本请参考这里: https://blog.bcmeng.com/post/hbase-hdfs.html
 1、 /hbase/.archive 
   HBase 在做 Split或者 compact 操作完成之后,会将 HFile 移到.archive 目录中,然后将之前的 hfile 删除掉,该目录由 HMaster 上的一个定时任务定期去清理。
 2、 /hbase/.corrupt 
   存储HBase损坏的日志文件,一般都是为空的。
 3、 /hbase/.hbck 
   HBase 运维过程中偶尔会遇到元数据不一致的情况,这时候会用到提供的 hbck 工具去修复,修复过程中会使用该目录作为临时过度缓冲。
 4、 /hbase/logs 
   HBase 是支持 WAL(Write Ahead Log) 的,HBase 会在第一次启动之初会给每一台 RegionServer 在.log 下创建一个目录,若客户端如果开启WAL 模式,会先将数据写入一份到.log 下,当 RegionServer crash 或者目录达到一定大小,会开启 replay 模式,类似 Mysql 的 binlog。
 5、 /hbase/oldlogs 
   当.logs 文件夹中的 HLog 没用之后会 move 到.oldlogs 中,HMaster 会定期去清理。
 6、 /hbase/.snapshot 
   hbase若开启了 snapshot 功能之后,对某一个用户表建立一个 snapshot 之后,snapshot 都存储在该目录下,如对表test 做了一个 名为sp_test 的snapshot,就会在/hbase/.snapshot/目录下创建一个sp_test 文件夹,snapshot 之后的所有写入都是记录在这个 snapshot 之上。
 7、 /hbase/.tmp 
   当对表做创建或者删除操作的时候,会将表move 到该 tmp 目录下,然后再去做处理操作。
 8、 /hbase/hbase.id 
   它是一个文件,存储集群唯一的 cluster id 号,是一个 uuid。
 9、 /hbase/hbase.version 
   同样也是一个文件,存储集群的版本号,貌似是加密的,看不到,只能通过web-ui 才能正确显示出来
 10、 -ROOT- 
   该表是一张的HBase表,只是它存储的是.META.表的信息。通过HFile文件的解析脚本  hbase org.apache.hadoop.hbase.io.hfile.HFile -e -p -f  可以查看其存储的内容,如下所示:
以上可以看出,-ROOT-表记录的.META.表的所在机器是dchbase2,与web界面看到的一致:
 11、 .META. 
   通过以上表能找到.META.表的信息,该表也是一张hbase表,通过以上命令,解析其中一个region:
以上可以看出,adt_app_channel表的数据记录在dchbase3这台reginserver上,也与界面一致,如果有多个region,则会在表名后面加上rowkey的范围:
通过以上描述,只要找到-ROOT-表的信息,就能根据rowkey找到对应的数据,那-ROOT-在哪里找呢?从本文一开始的图中可以知道,就是在zookeeper中找的。进入zookeeper命令行界面:
可以看出-ROOT-表存储在 dchbase3 机器中,对应界面如下:
以上就是HBase客户端根据指定的rowkey从zookeeper开始找到对应的数据的过程。
那在Region下HBase是如何存储数据的呢?
以下就具体操作一张表,查询对应的HFile文件,看HBase的数据存储过程。
在HBase创建一张表 test7,并插入一些数据,如下命令:
查看wal日志,通过 hbase org.apache.hadoop.hbase.regionserver.wal.HLog --mp -p 命令可以解析HLog文件,内容如下:
查看HFile文件,内容如下:
由此可见,HFile文件就是存储HBase的KV对,其中Key的各个字段包含了的信息如下:
由于hbase把cf和column都存储在HFile中,所以在设计的时候,这两个字段应该尽量短,以减少存储空间。
但删除一条记录的时候,HBase会怎么操作呢?执行以下命令:
删除了rowkey为200的记录,查看hdfs,原来的HFile并没有改变,而是生成了一个新的HFile,内容如下:
所以在HBase中,删除一条记录并不是修改HFile里面的内容,而是写新的文件,待HBase做合并的时候,把这些文件合并成一个HFile,用时间比较新的文件覆盖旧的文件。HBase这样做的根本原因是,HDFS不支持修改文件。
2. hbase wal 是同步的吗
hbase wal 是同步的。
HBase的数据文件都存储在HDFS上,格式主要有两种:HFile:HBase中KeyValue数据的存储格式,HFile是Hadoop的二进虚扒制文件,实际上StoreFile就是对HFile做了轻量级的包装,即StoreFile底层就是HFile。
其中数据文件枯晌位置可为本地文件目录,也可以分布式文件系统hdfs的路径。当其为前者时,直接指定即可,也可以加前缀file:///而当差败昌其伟后者时,必须明确指明hdfs的路径,例如hdfs://mymaster:9000/path。

访问接口:
1. Native java API,最常规和高效的访问方式,适合Hadoop MapRece Job并行批处理HBase表数据。
2. HBase Shell,HBase的命令行工具,最简单的接口,适合HBase管理使用。
3. Thrift Gateway,利用Thrift序列化技术,支持C++,PHP,Python等多种语言,适合其他异构系统在线访问HBase表数据。
4. REST Gateway,支持REST 风格的Http API访问HBase, 解除了语言限制。
5. Pig,可以使用Pig Latin流式编程语言来操作HBase中的数据,和Hive类似,本质最终也是编译成MapRece Job来处理HBase表数据,适合做数据统计。
3. 涓ゅ彴链嶅姟鍣ㄦ坠锷ㄩ儴缃插ぇ鏁版嵁骞冲彴
涓ゅ彴链嶅姟鍣ㄦ坠锷ㄩ儴缃插ぇ鏁版嵁骞冲彴 
  
 ##### 鍒濆嬫湇锷″櫒鏁伴噺
  
 - 2鍙瘫entos7
  
 ##### 寤鸿閰岖疆
  
 - 32G(RAM)
  
 - 24cpu
  
 - 10t(SATA)
  
 ### 1.鐜澧
  
 - 绯荤粺centos7
  
 - jdk锛1.8.0_171锛64浣嶏级
  
 - zookeeper锛3.4.8
  
 - spark-2.1.0-bin-hadoop2.6
  
 - kafka_2.10-0.10.2.1
  
 - hadoop-2.7.0
  
 - hbase-1.2.6
  
 - elasticsearch-6.3.0
  
 ### 2.绯荤粺鍑嗗
  
 瀵瑰簲镄勫畨瑁呭寘鏂囦欢锛
  
  elasticsearch-6.3.0.tar.gz
  
  hadoop-2.7.0.tar.gz
  
  hbase-1.2.6-bin.tar.gz
  
  jdk-8u171-linux-x64.tar.gz
  
  kafka_2.10-0.10.2.1.tgz
  
  mysql-5.7.23-1.el7.x86_64.rpm-bundle.tar
  
  spark2.1.0hadoop2.6.tgz.gz
  
  zookeeper-3.4.8.tar.gz
  
 涓銆 閰岖疆濂絟osts
  
 ```
  
   涓ゅ彴璁惧囩殑host
  
   ip1 hello1
  
   ip2 hello2
  
   鍏抽棴阒茬伀澧
  
    systemctl stop firewalld
  
    systemctl disable firewalld
  
 浜屻佹満鍣ㄤ箣闂村仛濂藉厤瀵
  
 1. 鍦╤ello1链嶅姟鍣ㄤ腑锛宑d /root/
  
 2. ssh-keygen -trsa   (鍏ㄩ儴鎸夊洖杞︼纴璧伴粯璁ら厤缃)
  
 3. cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
  
 4. chmod 600 ~/.ssh/authorized_keys
  
 5. scp ~/.ssh/authorized_keys root@hello2:~/.ssh/
  
 鍒版ゅ勬椂鍙浠ュ疄鐜癶ello1链哄櫒涓婇氲繃root璐︽埛锏诲綍鍒癶ello2涓锛屼絾浠岿ello2涓镞犳硶阃氲繃鍏嶅瘑镰佺橱褰曞埌hello1链嶅姟鍣ㄣ
  
 6. 鍦╤ello2链嶅姟鍣ㄤ腑锛宑d /root/
  
 7. ssh-keygen -trsa   (鍏ㄩ儴鎸夊洖杞︼纴璧伴粯璁ら厤缃)
  
 8. cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
  
 9. scp ~/.ssh/authorized_keys root@hello1:~/.ssh/
  
 鍒版ゅ勬椂鍙浠ュ疄鐜癶ello1链哄櫒涓岿ello2链哄櫒涔嬮棿鍏嶅瘑镰佷簰阃
  
 涓夈佸缓绔嬩竴涓鐢ㄦ埛镎崭綔elasticsearch鐢ㄦ埛锛屽悗链熸墍链夊畨瑁呰蒋浠舵斁鍦ㄨョ洰褰曚笅锛埚綋鍓崭娇鐢╮oot璐︽埛瀹夎咃级
  
 1.娣诲姞鐢ㄦ埛锛
  
  useradd -m -s /bin/bash es
  
 2.涓鸿ョ敤鎴疯剧疆瀵嗙爜锛
  
  password es
  
 锲涖佸畨瑁匤DK
  
  濡傛灉绯荤粺镊甯openjdk锛屽厛灏嗗叾鍗歌浇鎺夛紒
  
 1.鍒涘缓jdk瀹夎呰矾寰(hello1銆乭ello2閮芥墽琛)
  
  镓ц岋细 mkdir /usr/java
  
 2.瑙e帇缂﹋dk鍒板畨瑁呯洰褰
  
  镓ц岋细 tar -zxvf jdk-8u171-linux-x64.tar.gz -C /usr/java/
  
 3.娣诲姞鐜澧冨彉閲
  
  vi /etc/profile,娣诲姞浠ヤ笅璇鍙
  
   export JAVA_HOME=/usr/java/jdk1.8.0_171
  
   export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
  
   export PATH=$PATH:$JAVA_HOME/bin
  
  镓ц岋细source /etc/profile
  
 4.澶嶅埗瀹夎呭寘鍜屾暟鎹鐩褰曞埌hello2
  
  scp  -r /usr/java/jdk1.8.0_171 hello2:/usr/java/
  
  scp /etc/profile hello2:/etc/
  
  锏诲綍鍒癶ello2涓婏纴杩涘叆/home/es鐩褰
  
  镓ц岋细 source /etc/profile
  
 5銆侀獙璇侊细
  
  涓ゅ彴链嶅姟鍣ㄤ笂鍒嗗埆镓ц岋细 java -version,镆ョ湅杈揿嚭镄勭増链鏄钖︿笌瀹夎呯殑鐗堟湰涓镊淬
  
 浜斻佸畨瑁卪ysql
  
 1.濡傛灉centos绯荤粺涓镊甯mariadb锛屽厛鍗歌浇mariadb銆
  
 2.瑙e帇mysql瀹夎呭寘绋嫔簭
  
  镓ц岋细tar -xvf  mysql-5.7.23-1.el7.x86_64.rpm-bundle.tar
  
 3.渚濇″畨瑁呴噷闱rpm鍖呯粍寤
  
  rpm -ivh mysql-community-common-5.7.23-1.el7.x86_64.rpm
  
  rpm -ivh mysql-community-libs-5.7.23-1.el7.x86_64.rpm
  
  rpm -ivh mysql-community-client-5.7.23-1.el7.x86_64.rpm
  
  rpm -ivh mysql-community-server-5.7.23-1.el7.x86_64.rpm
  
  rpm -ivh mysql-community-devel-5.7.23-1.el7.x86_64.rpm
  
 4.钖锷∕ySQL
  
  镓ц岋细 systemctl start mysqld
  
 5.锏诲綍mysql链嶅姟鍣
  
  杩欑嶆柟寮忓畨瑁呭ソ钖庯纴浼氩啀my.cnf鏂囦欢涓镊锷ㄧ敓鎴愪竴涓瀵嗙爜锛
  
  镓ц岋细cat /var/log/mysqld.log | grep password锛 鍑虹幇濡备笅璁板綍锛
  
   2017-09-15T01:58:11.863301Z 1 [Note] A temporary password is generated for root@localhost: m-NdrSG4ipuO
  
   鍏朵腑钬渕-NdrSG4ipuO钬濅负mysql root璐︽埛镄勫埯濮嫔瘑镰併
  
  锏诲綍锛
  
   镓ц岋细 mysql -uroot -p
  
   杈揿叆瀵嗙爜锛 m-NdrSG4ipuO锛屽嵆鍙杩涘叆mysql链嶅姟鍣ㄣ
  
  钖庣画鍙镊琛屼慨鏀箁oot瀵嗙爜锛屽垱寤烘柊璐︽埛绛夋搷浣溿
  
 鍏銆佸畨瑁厇ookeeper
  
 1.瑙e帇zookeeper瀹夎呭寘鍒版寚瀹氱洰褰曪纸/home/es锛
  
  tar -zxvf zookeeper-3.4.8.tar.gz -C /home/es
  
 2.鍒涘缓绋嫔簭杞杩炴帴
  
  cd /home/es/
  
  ln -s zookeeper-3.4.8 zookeeper
  
 3.娣诲姞镓ц岃矾寰勭幆澧
  
  vi /etc/profile
  
  娣诲姞
  
   export ZOOKEEPER_HOME=/home/es/zookeeper
  
   export PATH=$PATH:$ZOOKEEPER_HOME/bin
  
  镓ц
  
   source /etc/profile
  
 4.淇鏀归厤缃鏂囦欢
  
  cd /home/es/zookeeper
  
  cp conf/zoo_sample.cfg conf/zoo.cfg
  
  鍦/home/data涓嫔垱寤哄瑰簲镄剒ookeeper鏁版嵁瀛桦偍鐩褰
  
   mkdir /home/data/zookeeper
  
   mkdir /home/data/zookeeper/data
  
   mkdir /home/data/zookeeper/log
  
  淇鏀归厤缃鏂囦欢锛歝onf/zoo.cfg锛屾坊锷犱互涓嬭鍙
  
   dataDir=/home/data/zookeeper/data
  
   dataLogDir=/home/data/zookeeper/log
  
   server.1=hello1:2888:3888
  
   server.2=hello2:2888:3888
  
 5.鍒涘缓server琛ㄧず绗︽枃浠
  
  touch /home/data/zookeeper/data/myid
  
  echo echo 1>/home/data/zookeeper/data/myid
  
 6.澶嶅埗瀹夎呭寘鍜屾暟鎹鐩褰曞埌hello2
  
  scp -r /home/es/zookeeper-3.4.8 es@hello2:/home/es
  
  scp -r /home/data/zookeeper es@hello2:/home/data
  
  scp  /etc/profile es@hello2:/etc
  
  锏诲綍鍒癶ello2涓
  
   cd /home/es
  
   ln -s zookeeper-3.4.8 zookeeper
  
   echo echo 2>/home/data/zookeeper/data/myid
  
  镓ц
  
   source /etc/profile
  
 7.涓ゅ彴链哄櫒涓婂垎鍒镓ц
  
  zkServer.sh start
  
 8.楠岃瘉
  
  jps | grep QuorumPeerMain,镆ョ湅鏄钖︽湁璇ヨ繘绋
  
  zkServer.sh status,镆ョ湅链嶅姟鐘舵
  
 鍏銆佸畨瑁卥afka
  
 1.瑙e帇kafka瀹夎呭寘鍒版寚瀹氱洰褰曪纸/home/es锛
  
  tar -zxvf kafka_2.10-0.10.2.1.tgz -C /home/es
  
 2.鍒涘缓绋嫔簭杞杩炴帴
  
  cd /home/es/
  
  ln -s kafka_2.10-0.10.2.1 kafka
  
 3.淇鏀归厤缃鏂囦欢
  
  澶囦唤锛
  
   cp config/server.properties config/server.properties.bak
  
  鍒涘缓kafka镞ュ织鐩褰曪细
  
   mkdir /home/data/kafka
  
   mkdir /home/data/kafka/kafka-logs
  
  淇鏀:config/server.properties,鍏蜂綋瀵瑰簲瀛楁靛备笅锛
  
   broker.id=0
  
   delete.topic.enable=true
  
   num.network.threads=10
  
   num.io.threads=32
  
   socket.send.buffer.bytes=102400
  
   socket.receive.buffer.bytes=102400
  
   socket.request.max.bytes=104857600
  
   log.dirs=/home/data/kafka/kafka-logs
  
   num.partitions=1
  
   num.recovery.threads.per.data.dir=1
  
   log.retention.hours=168
  
   log.segment.bytes=1073741824
  
   log.retention.check.interval.ms=300000
  
   zookeeper.connect=hello1:2181,hello2:2181
  
   zookeeper.connection.timeout.ms=6000
  
 6.澶嶅埗瀹夎呭寘鍜屾暟鎹鐩褰曞埌hello2
  
  scp -r /home/es/kafka_2.10-0.10.2.1 es@hello2:/home/es
  
  scp -r /home/data/kafka es@hello2:/home/data
  
  淇鏀筯ello2涓镄勯厤缃
  
   锏诲綍鍒癶ello2涓婏纴cd /home/es/kafka,淇鏀筩onfig/server.properties涓璪roker.id鍊间负2.
  
 7.钖锷╧afka
  
  鍦ㄤ袱鍙版満鍣ㄧ殑/home/es/kafka涓锛屽垱寤轰竴涓镞ュ织瀛樻斁鐩褰曪细mkdir start_log锛屾墽琛屼互涓嫔懡浠わ细
  
  nohup bin/kafka-server-start.sh config/server.properties > start_log/kafka_start_log 2>&1 &
  
 8.楠岃瘉杩愯屾儏鍐
  
  jps | grep Kafka,镆ョ湅杩涚▼
  
  阃氲繃kafka锻戒护镆ョ湅topic銆
  
 涓冦佸畨瑁卙adoop
  
 1.瑙e帇hadoop瀹夎呭寘鍒版寚瀹氱洰褰曪纸/home/es锛
  
  tar -zxvf hadoop-2.7.0.tar.gz -C /home/es
  
 2.鍒涘缓绋嫔簭杞杩炴帴
  
  cd /home/es/
  
  ln -s hadoop-2.7.0 hadoop
  
 3.鍒涘缓鏁版嵁瀛樻斁鐩褰
  
  mkdir /home/data/hadoop
  
  mkdir /home/data/hadoop/tmp
  
  mkdir /home/data/hadoop/dfs
  
  mkdir /home/data/hadoop/dfs/data
  
  mkdir /home/data/hadoop/dfs/name
  
 4.淇鏀归厤缃鏂囦欢
  
  淇鏀/home/es/hadoop/etc/hadoop/core-site.xml
  
   <configuration>
  
    <property>
  
     <name>fs.defaultFS</name>
  
     <value>hdfs://hello1:9000</value>
  
    </property>
  
    <property>
  
     <name>hadoop.tmp.dir</name>
  
     <value>file:/home/data/hadoop/tmp</value>
  
    </property>
  
    <property>
  
     <name>io.file.buffer.size</name>
  
     <value>131702</value>
  
    </property>
  
   </configuration>
  
  淇鏀/home/es/hadoop/etc/hadoop/hdfs-site.xml
  
   <configuration>
  
    <property>
  
     <name>dfs.namenode.name.dir</name>
  
     <value>file:/home/data/hadoop/dfs/name</value>
  
    </property>
  
    <property>
  
     <name>dfs.datanode.data.dir</name>
  
     <value>file:/home/data/hadoop/dfs/data</value>
  
    </property>
  
    <property>
  
     <name>dfs.replication</name>
  
     <value>2</value>
  
    </property>
  
    <property>
  
     <name>dfs.namenode.secondary.http-address</name>
  
     <value>hello1:9001</value>
  
    </property>
  
    <property>
  
    <name>dfs.webhdfs.enabled</name>
  
    <value>true</value>
  
    </property>
  
   </configuration>
  
  淇鏀/home/es/hadoop/etc/hadoop/mapred-site.xml
  
   <configuration>
  
   <property>
  
     <name>maprece.framework.name</name>
  
     <value>yarn</value>
  
    </property>
  
    <property>
  
     <name>maprece.jobhistory.address</name>
  
     <value>hello1:10020</value>
  
    </property>
  
    <property>
  
     <name>maprece.jobhistory.webapp.address</name>
  
     <value>hello1:19888</value>
  
    </property>
  
   </configuration>
  
  淇鏀/home/es/hadoop/etc/hadoop/yarn-site.xml
  
   <configuration>
  
   <!-- Site specific YARN configuration properties -->
  
    <property>
  
     <name>yarn.nodemanager.aux-services</name>
  
     <value>maprece_shuffle</value>
  
    </property>
  
    <property>
  
     <name>yarn.nodemanager.auxservices.maprece.shuffle.class</name>
  
     <value>org.apache.hadoop.mapred.ShuffleHandler</value>
  
    </property>
  
    <property>
  
     <name>yarn.resourcemanager.address</name>
  
     <value>hello1:8032</value>
  
    </property>
  
    <property>
  
     <name>yarn.resourcemanager.scheler.address</name>
  
     <value>hello1:8030</value>
  
    </property>
  
    <property>
  
     <name>yarn.resourcemanager.resource-tracker.address</name>
  
     <value>hello1:8031</value>
  
    </property>
  
    <property>
  
     <name>yarn.resourcemanager.admin.address</name>
  
     <value>hello1:8033</value>
  
    </property>
  
    <property>
  
     <name>yarn.resourcemanager.webapp.address</name>
  
     <value>hello1:8088</value>
  
    </property>
  
    <property>
  
     <name>yarn.nodemanager.resource.memory-mb</name>
  
     <value>768</value>
  
    </property>
  
   </configuration>
  
  閰岖疆/home/es/hadoop/etc/hadoop鐩褰曚笅hadoop-env.sh銆乱arn-env.sh镄凧AVA_HOME锛堜笉璁剧疆镄勮瘽锛屽惎锷ㄤ笉浜嗭级
  
   export JAVA_HOME=/usr/java/jdk1.8.0_171
  
  閰岖疆/home/es/hadoop/etc/hadoop鐩褰曚笅镄剆laves锛屽垹闄ら粯璁ょ殑localhost锛屽炲姞2涓浠庤妭镣癸纴
  
   hello1
  
   hello2
  
 5銆佸皢閰岖疆濂界殑Hadoop澶嶅埗鍒板悇涓鑺傜偣瀵瑰簲浣岖疆涓婏纴阃氲繃scp浼犻
  
  scp  -r /home/es/hadoop-2.7.0 hello2:/home/es/
  
  scp  -r /home/data/hadoop hello2:/home/data/
  
  锏诲綍鍒癶ello2涓婏纴杩涘叆/home/es鐩褰
  
  镓ц岋细 ln -s hadoop-2.7.0 hadoop
  
 6銆佹牸寮忓寲nameNode鍙婂惎锷╤adoop
  
  鍦ㄤ富链嶅姟鍣ㄥ惎锷╤adoop锛屼粠鑺傜偣浼氲嚜锷ㄥ惎锷锛岃繘鍏/home/es/hadoop鐩褰
  
   鍒濆嫔寲锛岃緭鍏ュ懡浠わ纴bin/hdfs namenode -format
  
   鍏ㄩ儴钖锷╯bin/start-all.sh锛屼篃鍙浠ュ垎寮sbin/start-dfs.sh銆乻bin/start-yarn.sh
  
   杈揿叆锻戒护锛宩ps锛屽彲浠ョ湅鍒扮浉鍏充俊鎭
  
 7銆侀獙璇乭adoop杩愯屾儏鍐
  
  娴忚埚櫒镓揿紑http://hello1:8088/
  
  娴忚埚櫒镓揿紑http://hello1:50070/
  
 8銆佹坊锷爃adoop鐜澧冨彉閲忓埌/etc/profile
  
  export HADOOP_HOME=/home/es/hadoop export PATH=$PATH:$HADOOP_HOME/sbin
  
  export PATH=$PATH:$HADOOP_HOME/bin
  
  export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
  
  export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib/native"
  
  镓ц岋细 source /etc/profile
  
 鍏銆佸畨瑁匟base
  
 1.瑙e帇hbase瀹夎呭寘鍒版寚瀹氱洰褰曪纸/home/es锛
  
  tar -zxvf hbase-1.2.6-bin.tar.gz -C /home/es
  
 2.鍒涘缓绋嫔簭杞杩炴帴
  
  cd /home/es/
  
  ln -s hbase-1.2.6 hbase
  
 3.娣诲姞hbase鐜澧冨彉閲忓埌/etc/profile
  
  export  HBASE_HOME=/home/es/hbase
  
 銆銆export  PATH=$HBASE_HOME/bin:$PATH
  
  镓ц岋细source /etc/profile
  
 4.淇鏀笻BASE閰岖疆鏂囦欢
  
  vi /home/es/hbase/conf/hbase-env.sh
  
   澧炲姞锛 export JAVA_HOME=/usr/java/jdk1.8.0_171
  
   淇鏀癸细 export HBASE_MANAGES_ZK=false
  
  vi /home/es/hbase/conf/hbase-site.xml
  
  淇鏀圭被瀹癸细
  
   <configuration>
  
     <property>
  
  銆銆銆銆銆銆銆銆<name>hbase.rootdir</name> <!-- hbase瀛樻斁鏁版嵁鐩褰 -->
  
  銆銆銆銆銆銆銆銆<value>hdfs://hello1:9000/hbase/hbase_db</value>
  
  銆銆銆銆銆銆銆銆<!-- 绔鍙h佸拰Hadoop镄刦s.defaultFS绔鍙d竴镊-->
  
  銆銆銆銆銆銆</property>
  
  銆銆銆銆銆銆<property>
  
  銆銆銆銆銆銆銆銆<name>hbase.cluster.distributed</name> <!-- 鏄钖﹀垎甯冨纺閮ㄧ讲 -->
  
  銆銆銆銆銆銆銆銆<value>true</value>
  
  銆銆銆銆銆銆</property>
  
  銆銆銆銆銆銆<property>
  
  銆銆銆銆銆銆銆銆<name>hbase.zookeeper.quorum</name> <!-- list of  zookooper -->
  
  銆銆銆銆銆銆銆銆<value>hello1,hello2</value>
  
  銆銆銆銆銆銆</property>
  
  銆銆銆銆銆銆銆<property><!--zookooper閰岖疆銆佹棩蹇楃瓑镄勫瓨鍌ㄤ綅缃 -->
  
  銆銆銆銆銆銆銆銆銆銆<name>hbase.zookeeper.property.dataDir</name>
  
  銆銆銆銆銆銆銆銆銆銆<value>/home/es/hbase/zookeeper</value>
  
  銆銆銆銆銆銆銆</property>
  
   </configuration>
  
  閰岖疆regionservers锛寁i /home/es/hbase/conf/regionservers
  
   铡绘帀榛樿ょ殑localhost锛屽姞鍏hello1銆乭ello2
  
 5銆佸皢閰岖疆濂界殑hbase澶嶅埗鍒板悇涓鑺傜偣瀵瑰簲浣岖疆涓婏纴阃氲繃scp浼犻
  
  scp  -r /home/es/hbase-1.2.6 hello2:/home/es/
  
  scp /etc/profile hello2:/etc/
  
  锏诲綍鍒癶ello2涓婏纴杩涘叆/home/es鐩褰
  
  镓ц岋细 ln -s hbase-1.2.6 hbase
  
    source /etc/profile
  
 6銆乭base镄勫惎锷
  
  hello1涓镓ц岋细 start-hbase.sh
  
 7銆侀獙璇乭base杩愯屾儏鍐
  
  杈揿叆jps锻戒护镆ョ湅杩涚▼鏄钖﹀惎锷ㄦ垚锷燂纴鑻 hello1涓婂嚭鐜癏Master銆丠RegionServer銆丠QuormPeer锛宧ello2涓婂嚭鐜癏RegionServer銆丠QuorumPeer锛屽氨鏄钖锷ㄦ垚锷熶简銆
  
  杈揿叆hbase shell 锻戒护 杩涘叆hbase锻戒护妯″纺锛岃緭鍏status锻戒护锛屾煡鐪嬭繍琛岀姸镐併
  
  鍦ㄦ祻瑙埚櫒涓杈揿叆http://hello1:16010灏卞彲浠ュ湪鐣岄溃涓婄湅鍒癶base镄勯厤缃
  
 娉ㄦ剰浜嬮”锛
  
  姝e父瀹夎呭悗锛屽垱寤烘櫘阃氢笉甯﹀帇缂╄〃鍙浠ユe父璇诲啓锛屽綋浣跨敤snappy杩涜屽帇缂╁垱寤鸿〃镞讹纴璇ヨ〃镞犳硶鍐峳egionServer涓钖锷锛
  
  瑙e喅鏂规硶锛
  
   1.鍦╤base-site.xml鏂囦欢涓娣诲姞涓涓嫔睘镐
  
   <property>
  
                 <name>hbase.regionserver.codecs</name>
  
                 <value>snappy</value>
  
         </property>
  
   2.姣忓彴链哄櫒涓灏呗adoop_native.zip瑙e帇缂╁埌hbase瀹夎呯洰褰旷殑lib涓嬶纴镓ц unzip hadoop_native.zip $HBASE_HOME/lib/
  
   3.鍦$HBASE_HOME/conf/hbase-env.sh 涓娣诲姞锛欤xport HBASE_LIBRARY_PATH=/home/es/hbase/lib/native
  
   4.閲嶅惎Hbase链嶅姟鍗冲彲
  
 涔濄丼park瀹夎
  
 1.瑙e帇hbase瀹夎呭寘鍒版寚瀹氱洰褰曪纸/home/es锛
  
  tar -zxvf spark2.1.0hadoop2.6.tgz.gz -C /home/es
  
 2.鍒涘缓绋嫔簭杞杩炴帴
  
  cd /home/es/
  
  ln -s spark2.1.0hadoop2.6 spark
  
 3.淇鏀归厤缃鏂囦欢
  
  mv /home/es/spark/conf/spark-env.sh.template  /home/es/spark/conf/spark-env.sh
  
  vi /home/es/spark/conf/spark-env.sh
  
  淇鏀瑰瑰簲閰岖疆锛
  
   export JAVA_HOME=/usr/java/jdk1.8.0_171
  
   export SPARK_MASTER_IP=hello1
  
   export SPARK_MASTER_PORT=7077
  
   export SPARK_LOCAL_IP=hello1
  
  淇鏀箂laves鏂囦欢
  
   mv /home/es/spark/conf/slaves.template  /home/es/spark/conf/slaves
  
   vi /home/es/spark/conf/slaves
  
   灏唋ocalhost淇鏀规垚锛
  
   hello1
  
   hello2
  
 5銆佸皢閰岖疆濂界殑hbase澶嶅埗鍒板悇涓鑺傜偣瀵瑰簲浣岖疆涓婏纴阃氲繃scp浼犻
  
  scp  -r /home/es/spark2.1.0hadoop2.6 hello2:/home/es/
  
  锏诲綍鍒癶ello2涓婏纴杩涘叆/home/es鐩褰
  
  镓ц岋细 ln -s spark2.1.0hadoop2.6 spark
  
  鍦╤ello2涓淇鏀/home/es/spark/conf/spark-env.sh
  
   export JAVA_HOME=/usr/java/jdk1.8.0_171
  
   export SPARK_MASTER_IP=hello1
  
   export SPARK_MASTER_PORT=7077
  
   export SPARK_LOCAL_IP=hello2
  
 6銆佸惎锷╯park
  
  cd /home/es/spark
  
  镓ц岋细 sbin/start-all.sh
  
 7銆佹娴嬫墽琛岀粨鏋
  
  jps | grep Worker,鐪嬫槸钖︽湁鐩稿簲镄勮繘绋嬨
  
 鍗併佸畨瑁卐lasticsearch
  
 鐢变簬elasticsearch锛岀敤root璐︽埛镞犳硶钖锷锛屾晠璇ョ粍浠剁敤es璐︽埛瀹夎
  
 1銆佸垏鎹㈠埌es璐︽埛锛 su es
  
 2銆佽В铡媓base瀹夎呭寘鍒版寚瀹氱洰褰曪纸/home/es锛
  
  tar -zxvf elasticsearch-6.3.0.tar.gz -C /home/es/
  
  鍒涘缓绋嫔簭杞杩炴帴
  
  cd /home/es/
  
  ln -s elasticsearch-6.3.0 elasticsearch
  
 3銆佷慨鏀归厤缃鏂囦欢
  
  vi /home/es/elasticsearch/config/elasticsearch.yml
  
   # 闆嗙兢镄勫悕瀛 
  
   cluster.name: crrc-health
  
   # 鑺傜偣钖嶅瓧 
  
   node.name: node-1 
  
   # 鏁版嵁瀛桦偍鐩褰曪纸澶氢釜璺寰勭敤阃楀彿鍒嗛殧锛 
  
   path.data: /home/data1/elasticsearch/data
  
   # 镞ュ织鐩褰 
  
   path.logs: /home/data1/elasticsearch/logs
  
   #链链虹殑ip鍦板潃
  
   network.host: hello1 
  
   #璁剧疆闆嗙兢涓璵aster鑺傜偣镄勫埯濮嫔垪琛锛屽彲浠ラ氲繃杩欎簺鑺傜偣𨱒ヨ嚜锷ㄥ彂鐜版柊锷犲叆闆嗙兢镄勮妭镣
  
   discovery.zen.ping.unicast.hosts: ["hello1", "hello2"]
  
   # 璁剧疆鑺傜偣闂翠氦浜掔殑tcp绔鍙o纸闆嗙兢锛,(榛樿9300) 
  
   transport.tcp.port: 9300
  
   # 鐩戝惉绔鍙o纸榛樿わ级 
  
   http.port: 9200
  
   # 澧炲姞鍙傛暟锛屼娇head鎻掍欢鍙浠ヨ块梾es 
  
   http.cors.enabled: true
  
   http.cors.allow-origin: "*"
  
 4銆佸垱寤篹lasticsearch鏁版嵁鍜屽瓨鍌ㄧ洰褰
  
  mkdir /home/data1/elasticsearch
  
  mkdir /home/data1/elasticsearch/data
  
  mkdir /home/data1/elasticsearch/logs
  
 5銆佷慨鏀筶inux绯荤粺镄勯粯璁ょ‖闄愬埗鍙傛暟
  
  鍒囨崲镊硆oot鐢ㄦ埛锛 su root
  
  vim /etc/security/limits.conf
  
   娣诲姞锛
  
    es soft nofile 65536
  
    es hard nofile 65536
  
  阃鍑篹s锏诲綍锛岄吨鏂扮敤es璐︽埛锏诲綍锛屼娇鐢ㄥ懡浠わ细ulimit -Hn镆ョ湅纭闄愬埗鍙傛暟銆
  
  vi /etc/sysctl.conf
  
   娣诲姞锛
  
    vm.max_map_count=655360
  
   镓ц岋细
  
    sysctl -p
  
 6銆佸皢閰岖疆濂界殑elasticsearch澶嶅埗鍒板悇涓鑺傜偣瀵瑰簲浣岖疆涓婏纴阃氲繃scp浼犻
  
  scp  -r /home/es/elasticsearch-6.3.0 hello2:/home/es/
  
  scp  -r /home/data1/elasticsearch hello2:/home/data1/
  
  锏诲綍鍒癶ello2涓婏纴杩涘叆/home/es鐩褰
  
  镓ц岋细 ln -s elasticsearch-6.3.0 elasticsearch-6.3.0
  
  鍦╤ello2涓淇鏀/home/es/elasticsearch/config/elasticsearch.yml
  
   淇鏀癸细 network.host: hello2
  
 7銆佸惎锷╡lasticsearch
  
  浣跨敤es璐︽埛
  
  镓ц岋细
  
    /home/es/elasticsearch/bin/elasticsearch -d
  
 8銆侀獙璇
  
  鎺у埗鍙颁腑杈揿叆锛歝url http://hello1:9200
4. HbBase可以随机写入为什么还要依赖于HDFS
他们的关系是:hbase是一个内存数据库,而hdfs是一个存储空间;是物品和房子的关系。
hdfs只是一个存储空间,他的完整名字是分布式文件系统。从名字可知他的作用了。hbase是一个内存数据库,简单点说hbase把表啊什么的存在hdfs上。
所以即使HbBase可以随机,它还是要依赖于HDFS。
希望可以帮到您,感谢您的采纳!
5. hbase怎么用
HBase安装及简单使用
通过之前的hadoop0.20.2的安装并调试成功,接下来我们继续安装hbase0.90.5。在安装hbase0.90.5之前,因为hbase0.90.5只支持jdk1.6,所以,我把之前的jdk1.8卸载,重新安装了jdk1.6。
第一步:
首先需要下载hbase0.90.5.tar.gz,并解压到/home/hadoop/的目录下,同时将目录修改为hbase0.90.5
第二步:
替换hadoop核心jar包,主要母的是防止hbase和hadoop版本不同出现兼容问题,造成hmaster启动异常
将hbase0.90.5/lib目录中的hadoop-core-0.20-append-r1056497.jar包进行备份后删除,再将/home/hadoop/hadoop下面的hadoop-0.20.2-core.jar赋值到/home/hadoop/hbase0.90.5目录下即可
第三步:
编辑配置文件
①/home/hadoop/hbase0.90.5/conf/hbase-env.sh
  
我们对行键'1001'中列族info的列名age赋值24(1001:info:age=>24),插入两次,会将最后一次的值进行合并,其中,用时间戳来区分。从图片中的时间戳不同可以看出保存的是最后一次put的内容。
