百度搜索越来越不行,看来什么东西都得自己亲力亲为了。自己写教程
前提是Hadoop搭建完成,下载hbase,网址是http://www.apache.org/dist/hbase/1.2.1/,这个速度快.虽然下载的是1.2.1,但是安装配置好之后hbase shell显示的是1.1.4,奇怪
第一步. 下载安装包,解压到合适位置,并将权限分配给hadoop用户(运行hadoop的账户)
这里下载的是hbase-1.1.4,Hadoop集群使用的是1.0.4,将其解压到/usr/local下并重命名为hbase
解压
tar zxvf hbase-1.1.4-bin.tar.gz
重命名
sudo mv hbase-1.1.4 hbase
修改权限
sudo chown -R hadoop:hadoop hbase
(1) 配置hbase-env.sh,该文件在/usr/local/hbase/conf
设置以下值
export JAVA_HOME=/opt/Java/jdk/jdk1.8.0_91 #Java安装路径
export HBASE_CLASSPATH=/usr/local/hbase/conf #HBase类路径
export HBASE_MANAGES_ZK=true #由HBase负责启动和关闭Zookeeper
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://Master00:9000/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>Slave00</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/home/hadoop/tmp/zookeeper</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
</configuration>
其中,hbase.master是指定运行HMaster的服务器及端口号;hbase.master.maxclockskew是用来防止HBase节点之间时间不一致造成regionserver启动失败,默认值是30000;hbase.rootdir指定HBase的存储目录;hbase.cluster.distributed设置集群处于分布式模式;hbase.zookeeper.quorum设置Zookeeper节点的主机名,它的值个数必须是奇数;hbase.zookeeper.property.dataDir设置Zookeeper的目录,默认为/tmp,dfs.replication设置数据备份数,集群节点小于3时需要修改
(3)配置regionservers,该文件位于/usr/local/hbase/conf
设置所运行HBase的机器,此文件配置和hadoop中的slaves类似,一行指定一台机器,本次试验仅用一台机器,设置master即可。
vim regionservers
里面设置
Slave00
Slave01
(4)设置HBase环境变量,文件位于/etc/profile
在文件末尾添加:
#hbase Env
export HBASE_HOME=/usr/local/hbase
export PATH=$PATH:$HBASE_HOME/bin
使之生效:source /etc/profile
第三步:运行测试
启动hadoop后,在终端输入start-hbase.sh,查看运行的进程:
执行hbase shell
hadoop@Master00:/usr/local/hbase/bin$ hbase shell
执行;list
打开http://192.168.76.130:16010/网址
新建表:
插入在列表data上的不同行和列的三项数据,并列出表的内容
删除表test,首先要把它设为禁用,然后drop掉
disable 'test'
drop 'test'
名称 | 命令表达式 |
创建表 | create '表名称','列族名称1','列族名称2','列族名称1' |
添加记录 | Put '表名称', '行名称','列名称','值' |
查看记录 | Get '表名称','行名称' |
查看表中的记录总数 | Count '表名称' |
删除记录 | Delete '表名称','行名称','列名称' |
删除一张表 | 先要屏蔽该表,才能对该表进行删除,第一步disable '表名称' 第二步drop '表名称' |
查看所有记录 | Scan '表名称' |
查看某个表某个列中所有数据 | scan '表名称', ['列名称'] |
更新记录 | 就是重写一遍进行覆盖 |
关闭:stop-hbase.sh
hbase加密配置
hbase底层提供了cell级别的透明加解密,用户不需要做任何改动,就可以拥有数据加解密.具体配置如下:
具体参考http://archive.cloudera.com/cdh5/cdh/5/hbase-0.98.6-cdh5.3.3/book/hbase.encryption.server.html
keytool -keystore /usr/local/hbase/conf/hbase.jks -storetype jceks -storepass 123456 -genseckey -keyalg AES -keysize 128 -alias hbase
在路径/usr/local/hbase/conf下生成密钥hbase.jks.
然后配置hbase-site.xml
添加
<property>
<name>hbase.crypto.keyprovider</name>
<value>org.apache.hadoop.hbase.io.crypto.KeyStoreKeyProvider</value>
</property>
<property>
<name>hbase.crypto.keyprovider.parameters</name>
<value>jceks:///usr/local/hbase/conf/hbase.jks?password=123456</value>
</property>
<property>
<name>hbase.crypto.master.key.name</name>
<value>hbase</value>
</property>
<property>
<name>hfile.format.version</name>
<value>3</value>
</property>
<property>
<name>hbase.regionserver.hlog.reader.impl</name>
<value>org.apache.hadoop.hbase.regionserver.wal.SecureProtobufLogReader</value>
</property>
<property>
<name>hbase.regionserver.hlog.writer.impl</name>
<value>org.apache.hadoop.hbase.regionserver.wal.SecureProtobufLogWriter</value>
</property>
<property>
<name>hbase.regionserver.wal.encryption</name>
<value>true</value>
</property>
其中hbase.crypto.keyprovider是利用的密钥保管类型,hbase.crypto.keyprovider.parameters是密钥保存路径,问号后面是保存密钥的密码,hbase.crypto.master.key.name就是alias名字,hfile.format.version是hfile版本,加密需要hfile版本是3.hbase.regionserver.hlog.reader.impl是数据读取的类,hbase.regionserver.hlog.writer.impl是数据写入的类,hbase.regionserver.wal.encryption标志数据加密.
然后把生成的密钥和配置好的xml,scp到所有集群中,重新启动hbase和hadoop.我们尝试新建数据库,查看存储的数据是否加密.
新建了test和test1表,在test表中插入数据.我们在hadoop集群中/usr/local/hadoop/dfs/data/current/BP-278612306-127.0.1.1-1462877661391/current/rbw路径下找到缓存,
用vim打开blk_1073742103,可以看到数据是加密的.
再打开/usr/local/hadoop/dfs/data/current/BP-278612306-127.0.1.1-1462877661391/current/finalized/subdir0/subdir1路径.
未完待续......