记录Hbase部署和扫描
1.找到Hadoop和Hbase兼容的安装包,在Hbase的官方文档中(http://hbase.apache.org/book.html#hadoop)搜索Hadoop version support matrix就可以看到相应的兼容版本,去对应官网搜索下载。
2.准备环境,第一次部署时,在hadoop,zookeeper,hbase中和host相关的配置,我都使用的ip做映射,然后运行和调试中各种问题(高潮那种),后来全部将ip和域名进行了映射,然后逐步重启所有服务,才正常。具体配置如下
1)vim /etc/sysconfig/networ,在新的一行追加下配置
NETWORKING=yes
HOSTNAME=yourhostname(你的准备修改主机名)
2)vim /etc/hosts,在新的一行追加一下配置
192.168.1.20 yourhostname (主机ip和域名的映射)
3)shell中执行hostname yourhostname,可以不用重启就修改hostname,然后hostname一下,看是否修改成功
3.安装配置hadoop,解压包到你要安装的目录
进入hadoop安装包目录,进入etc/hadoop
1)hadoop-env.sh(环境设置)
2)core-site.xml
<configuration>
<!--master换成你的域名yourhostname-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9001</value>
</property>
<!--安装目录下创建data/tmp目录,然后添加到配置中-->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/modules/hadoop-3.2.0/data/tmp</value>
</property>
</configuration>
3)hdfs-site.xml
<configuration>
<!--数据副本数,简单测试就1个-->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<!--不需要权限检测-->
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>
</configuration>
4)配置workers(以前叫做slave)
我是单节点,所以只在文件中添加了域名,即yourhostname
5)启动hadoop,进入安装目录
./bin/hdfs namenode -format //格式化
./sbin/hadoop-daemon.sh start namenode //启动namenode节点
./sbin/hadoop-daemon.sh start datanode //启动datanode
然后使用jps看是否有namenode和datanode的进程,
6)若需要重新格式化namenode,需要删除data/tmp(你所创建的目录)下的所有文件,再格式化,否则肯能有异常
4.安装zookeeper,解压包到你要安装的目录
1)进入安装包目录,进入conf下,里面有一个zoo_example.xml,将其改名为zoo.cfg,,然后打开,配置如下
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/opt/modules/apache-zookeeper-3.5.5-bin/data //改为你需要的目录
clientPort=2181 //zookeeper的端口,根据需要修改
#autopurge.purgeInterval=1
server.1=master:2888:3888 //集群的服务器,只需要更换master为yourhostname
server.2=worker1:2888:3888 //更改worker为其他服务器的hostname即可
注意:你有多少个服务器接着添加就行
2)然后进入你创建的data目录,创建名称为myid的文件,进去后添加服务id,主机填1,其他的依次填数字即可
3)将配置好的zookeeper目录分发到其他集群服务器,然后更改他们myid文件中的值
4)进入安装目录下使用./bin/zkServer.sh start启动服务,jps检查QuorumPeerMain进程存在,依次启动所有集群的服务
5.安装hbase,解压包到你要安装的目录
1)进入安装目录,进入conf目录下,配置hbase-env.sh,
export JAVA_HOME=/usr/java/jdk1.8.0_05 //jdk的环境
export HBASE_MANAGES_ZK=false //默认为true,表示使用hbase自带的zk,使用自己的zk时需要改为false
2)配置hbase-site.xml
<configuration>
<!--自定义目录-->
<property>
<name>hbase.tmp.dir</name>
<value>/opt/modules/hbase-2.0.5/data/tmp</value>
</property>
<!--master需要替换为yourhostname-->
<property>
<name>hbase.rootdir</name>
<value>hdfs://master:9000/hbase</value>
</property>
<!--是否集群,是-->
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<!--集群的节点,我有两个节点所以都添加上-->
<property>
<name>hbase.zookeeper.quorum</name>
<value>master,worker1</value>
</property>
<property>
<name>hbase.unsafe.stream.capability.enforce</name>
<value>false</value>
</property>
<!--避免javaapi操作时链接超时-->
<property>
<name>zookeeper.session.timeout</name>
<value>60000</value>
</property>
</configuration>
3)修改regionservers,添加yourhostname
4)启动hbase,首先jps确认hadoop和zookeeper已经正常启动,然后再安装目录执行以下命令即可
./bin/start-hbase.sh,然后检查Hmaster和Hregionserver是否正常启动。
5)./bin/hbase shell即可进入hbase的shell客户端,可以键入list,create,put,delete,truncate,drop等命令,均有帮助 信息
注意:如果hbase的master启动失败,请检查集群节点的时间是否相同,差别太大则不行,若不断报错,建议关闭hbase,关闭zookeeper,然后删除zookeeper安装目录下data内version-2目录,然后再启动zookeeper和hbase,
===============================================================================================
尽量使用域名配置,简单高效,坑少
在windows上扫描你的linux服务器的hbase时需要修改集群各个节点的/etc/host文件,ip和域名的映射
然后再windows的C:\Windows\System32\drivers\etc\hosts文件中也要加入这些映射如下,才能扫描,不报错,还没研究为什么,但是不添加扫描时候就在你的windows上找127.0.0.1/localhost:16010端口,
扫描demo如下
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-common</artifactId>
<version>2.1.4</version>
</dependency>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-server</artifactId>
<version>2.1.4</version>
</dependency>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-client</artifactId>
<version>2.1.4</version>
</dependency>
//初始化链接和管理员
private static void init() {
Configuration conf = new Configuration();
conf.set("fs.defaultFS", "hdfs://192.168.1.21:9000");
conf.set("hbase.zookeeper.quorum", "192.168.1.21,192.168.1.20");
conf.set("hbase.zookeeper.property.clientPort", "2181");
try {
connection = ConnectionFactory.createConnection(conf);
admin = connection.getAdmin();
} catch (IOException e) {
e.printStackTrace();
}
}
//扫描权表
public static void scan() throws IllegalArgumentException, IOException {
Table table = connection.getTable(tableName);
Scan scan = new Scan();
ResultScanner results = table.getScanner(scan);
for (Result result : results) {
Cell[] cells = result.rawCells();
for (Cell cell : cells) {
System.out.println("RowKey" + CellUtil.cloneRow(cell) +
",RowFamily" + CellUtil.cloneFamily(cell) +
",RowName" + CellUtil.cloneQualifier(cell) +
",RowValue" + CellUtil.cloneValue(cell));
}
}
}