链接:https://pan.baidu.com/s/1Pp7fgEEN3ABc4QXkCxGI6w?pwd=5566
提取码:5566
1.zookeeper环境搭建
1.1压缩文件
tar -zxvf zookeeper-3.4.10.tar.gz
sudo mkdir -p /usr/zookeeper #创建文件
sudo cp -r zookeeper-3.4.10 /usr/zookeeper/
1.2修改配置文件
ZooKeeper的核心服务器属性配置文件是zoo.cfg。在主安装目录下的conf子目录内,系统为用户准备了一个模板文件zoo_sample.cfg,我们可以将这个文件拷贝一份,命名为zoo.cfg,然后修改配置文件。首先我们进入到conf子目录,执行以下命令:
cd /usr/zookeeper/zookeeper-3.4.10/conf
cp zoo_sample.cfg zoo.cfg
vim zoo.cfg
然后,我们进入到zoo.cfg文件中修改配置信息,tickTime:这个时间是作为ZooKeeper服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个tickTime时间就会发送一个心跳;dataDir:顾名思义就是ZooKeeper保存数据的目录,默认情况下,ZooKeeper将数据的日志文件也保存在这个目录里;clientPort:这个端口就是客户端连接ZooKeeper服务器的端口,ZooKeeper会监听这个端口,接收客户端的请求。按如下配置修改tickTime、dataDate、clientPort的值(其余内容不做修改):
tickTime=2000
dataDir=/usr/zookeeper/zookeeper-3.4.10/tmp/zookeeper #自己创建tmp/zookeeper
clientPort=2181
1.3配置环境变量
vim ~/.bashrc
在文件末尾增加下面内容:
export ZOOKEEPER_HOME=/usr/zookeeper/zookeeper-3.4.10/
export PATH=$ZOOKEEPER_HOME/bin:$PATH
使环境变量生效:
source ~/.bashrc
1.4启动 zookeeper
zkServer.sh start
2.Hbase环境配置
1.1压缩Hbase
tar -zxvf hbase-1.2.6-bin.tar.gz
sudo mkdir -p /usr/hbase#创建文件
sudo cp -r hbase-1.2.6 /usr/hbase/
1.2配置环境变量
vim ~/.bashrc
在打开文件的末尾添加以下两行代码,保存并退出。
export HBASE_HOME=/usr/hbase/hbase-1.2.6/
export PATH=$HBASE_HOME/bin:$PATH
使环境变量生效,执行下面命令:
source ~/.bashrc
进入hbase文件后创建data目录
mkdir zookeeper
进入hbase中的conf文件后修改配置文件hbase-env.sh
cd /usr/hbase/hbase-1.2.6/conf
vim hbase-env.sh
在打开的文件中,找到“# export JAVA_HOME”开头的文件,去掉前面的“#”,修改为:
export JAVA_HOME=/usr/java/jdk1.8.0_212
另外,找到“# export HBASE_MANAGES_ZK”开头的文件,去掉前面的“#”,修改为:
export HBASE_MANAGES_ZK=true
1.3修改配置文件hbase-site.xml
cd /usr/hbase/hbase-1.2.6/conf
vim hbase-site.xml
在打开的文件中编辑内容,如下:
<configuration>
<!--HBase的数据保存在HDFS对应目录-->
<property>
<name>hbase.rootdir</name>
<value>hdfs://node1:9000/hbase</value>
</property>
<!--是否是分布式环境-->
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<!--配置ZK的地址-->
<property>
<name>hbase.zookeeper.quorum</name>
<value>node1</value>
</property>
<!--冗余度-->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<!--zookeeper数据目录-->
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>file:/usr/hbase/hbase-1.2.6/zookeeper</value>
</property>
</configuration>
1.4 修改配置文件regionservers
vim regionservers
在打开的文件中,将里面的内容修改为(自己主机名):
node1
1.5启动hbase
cd /usr/hbase/hbase-1.2.6/conf
start-hbase.sh
jps查看进程
访问http://192.168.159.128:16010 (换成自己的ip地址)
3.HBase Java API编程实践
1)createTable(String tableName, String[] fields)
创建表,参数tableName为表的名称,字符串数组fields为存储记录各个字段名称的数组。要求当HBase已经存在名为tableName的表的时候,先删除原有的表,然后再创建新的表。
2)addRecord(String tableName, String row, String[] fields, String[] values)
向表tableName、行row(用S_Name表示)和字符串数组fields指定的单元格中添加对应的数据values。其中,fields中每个元素如果对应的列族下还有相应的列限定符的话,用“columnFamily:column”表示。例如,同时向“Math”、“Computer Science”、“English”三列添加成绩时,字符串数组fields为{“Score:Math”, ”Score:Computer Science”, ”Score:English”},数组values存储这三门课的成绩。
3)modifyData(String tableName, String row, String column)
修改表tableName,行row(可以用学生姓名S_Name表示),列column指定的单元格的数据。
4)deleteRow(String tableName, String row)
删除表tableName中row指定的行的记录。
本实例采用Eclipse开发工具。
启动Eclipse,启动以后,出现如下图所示界面,点击ok按钮。
添加hbase安装包下的所有jar包
在开始运行程序之前,需要启动HDFS和HBase。我的已经运行了
HBaseTest.java代码内容具体如下
import java.io.IOException;
import java.util.HashSet;
import java.util.Set;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.client.Delete;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Table;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;
import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;
import org.apache.hadoop.hbase.client.TableDescriptorBuilder;
import org.apache.hadoop.hbase.util.Bytes;
public class HBaseTest {
private Configuration conf = null; // 用于配置 HBase 连接的配置对象
private Connection conn = null; // 用于连接 HBase 的连接对象
// 初始化连接
public void init() throws Exception {
conf = HBaseConfiguration.create();
conf.set("hbase.zookeeper.quorum", "node1:2181");
conn = ConnectionFactory.createConnection(conf);
}
// 创建表,若表已存在则先删除再创建
public void createTable(String tableName, String[] fields) throws Exception {
try (Admin admin = conn.getAdmin()) {
TableName table = TableName.valueOf(tableName);
if (admin.tableExists(table)) {
admin.disableTable(table);
admin.deleteTable(table);
System.out.println("Old table deleted.");
}
// 创建列族
Set<String> families = new HashSet<>();
for (String field : fields) {
String columnFamily = field.split(":")[0];
families.add(columnFamily);
}
// 创建表描述符并添加列族
TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(table);
for (String family : families) {
ColumnFamilyDescriptor cfDesc = ColumnFamilyDescriptorBuilder.of(family);
builder.setColumnFamily(cfDesc);
}
admin.createTable(builder.build());
System.out.println("Table created successfully.");
} catch (Exception e) {
e.printStackTrace();
}
}
// 添加记录
public void addRecord(String tableName, String row, String[] fields, String[] values) throws Exception {
try (Table table = conn.getTable(TableName.valueOf(tableName))) {
Put put = new Put(Bytes.toBytes(row));
for (int i = 0; i < fields.length; i++) {
String[] parts = fields[i].split(":");
String family = parts[0];
String qualifier = parts.length > 1 ? parts[1] : "";
put.addColumn(Bytes.toBytes(family), Bytes.toBytes(qualifier), Bytes.toBytes(values[i]));
}
table.put(put);
System.out.println("Data inserted successfully.");
} catch (Exception e) {
e.printStackTrace();
}
}
// 修改数据
public void modifyData(String tableName, String row, String column, String value) throws Exception {
try (Table table = conn.getTable(TableName.valueOf(tableName))) {
Put put = new Put(Bytes.toBytes(row));
String[] parts = column.split(":");
String family = parts[0];
String qualifier = parts.length > 1 ? parts[1] : "";
put.addColumn(Bytes.toBytes(family), Bytes.toBytes(qualifier), Bytes.toBytes(value));
table.put(put);
System.out.println("Data modified successfully.");
} catch (Exception e) {
e.printStackTrace();
}
}
// 删除行
public void deleteRow(String tableName, String row) throws Exception {
try (Table table = conn.getTable(TableName.valueOf(tableName))) {
Delete delete = new Delete(Bytes.toBytes(row));
table.delete(delete);
System.out.println("Row deleted successfully.");
} catch (Exception e) {
e.printStackTrace();
}
}
// 主程序
public static void main(String[] args) {
HBaseTest demo = new HBaseTest();
try {
demo.init();
// 创建表
demo.createTable("student", new String[]{
"Info:S_No", "Info:S_Name", "Info:S_Sex", "Info:S_Age",
"Score:Math", "Score:Computer Science", "Score:English"
});
// 添加记录
demo.addRecord("student", "2015001",
new String[]{
"Info:S_No", "Info:S_Name", "Info:S_Sex", "Info:S_Age",
"Score:Math", "Score:Computer Science", "Score:English"
},
new String[]{"2015001", "ZhangQuanDe", "man", "21", "90", "92", "66"}
);
// 修改数据
demo.modifyData("student", "2015001", "Score:Math", "60");
// 删除行
demo.deleteRow("student", "2015001");
} catch (Exception e) {
e.printStackTrace();
}
}
}
版权归原作者 代码搬运工小覃 所有, 如有侵权,请联系我们删除。