一、elasticsearch數據遷移到hbase
眾所周知,elasticsearch是一個分散式搜索引擎,支持快速讀取和查詢數據。在與hbase進行數據交互的時候,需要進行數據遷移,下面是elasticsearch數據遷移到hbase的代碼示例:
// 創建hbase表
public static void createTable(String tableName, String columnFamily) throws Exception {
Admin admin = connection.getAdmin();
if (admin.tableExists(TableName.valueOf(tableName))) {
System.out.println("table already exists!");
}else {
HTableDescriptor hTableDescriptor = new HTableDescriptor(TableName.valueOf(tableName));
hTableDescriptor.addFamily(new HColumnDescriptor(columnFamily));
admin.createTable(hTableDescriptor);
System.out.println(tableName + " create successfully!");
}
admin.close();
}
// elasticsearch數據導入到hbase
public static void esToHbase(String index, String type, String columnFamily, String quorum, String port, String tableName) throws Exception {
TransportClient client = ElasticSearchUtils.getClient();
SearchResponse searchResponse = client.prepareSearch(index).setTypes(type).setSize(10000).get();
ResultScanner scanner = null;
try{
HTable table = new HTable(configuration, tableName);
for (SearchHit hit : searchResponse.getHits().getHits()) {
String rowKey = hit.getId();
Put put = new Put(Bytes.toBytes(rowKey));
Map sourceMap = hit.getSource();
for (Map.Entry entry : sourceMap.entrySet()) {
String key = entry.getKey();
String value = entry.getValue().toString();
put.add(Bytes.toBytes(columnFamily), Bytes.toBytes(key), Bytes.toBytes(value));
}
table.put(put);
}
}catch(IOException e){
e.printStackTrace();
}finally{
scanner.close();
}
client.close();
}
二、elasticsearch刪除數據
在清空elasticsearch數據的時候,可以使用delete By Query API來刪除,下面是elasticsearch刪除數據的代碼示例:
public static void deleteByQuery(String index, String type, String queryField, String queryValue) throws Exception {
TransportClient client = ElasticSearchUtils.getClient();
DeleteByQueryRequestBuilder deleteByQueryRequestBuilder = DeleteByQueryAction.INSTANCE.newRequestBuilder(client);
deleteByQueryRequestBuilder.source(index).filter(QueryBuilders.termQuery(queryField, queryValue)).execute().actionGet();
client.close();
}
三、elasticsearch數據遷移到MySQL
elasticsearch數據遷移到MySQL可以使用elasticsearch-jdbc實現,下面是elasticsearch數據遷移到MySQL的代碼示例:
# 配置文件內容
input {
jdbc {
jdbc_driver_library => "mysql-connector-java-5.1.39-bin.jar"
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_connection_string => "jdbc:mysql://localhost:3306/test"
jdbc_user => "root"
jdbc_password => "password"
# 數量控制, 方便測試
jdbc_fetch_size => 10
# SQL 這裡的 order by 欄位必須是能夠保證唯一性的.
statement => "SELECT * from test"
}
}
output {
elasticsearch {
hosts => ["127.0.0.1:9200"]
index => "test"
document_type => "test"
document_id => "%{id}"
}
}
四、elasticsearch數據遷移拷貝文件
在elasticsearch數據遷移過程中,我們需要將數據文件拷貝到新的伺服器上,下面是elasticsearch數據遷移拷貝文件的代碼示例:
# 備份數據文件 tar -zcvf data.tar.gz /path/to/elasticsearch/data # 拷貝數據文件 scp data.tar.gz user@newserver:/path/to/elasticsearch/data
五、elasticsearch架構
這裡簡單介紹一下elasticsearch的架構:elasticsearch採用分片(shard)和副本(replica)的形式存儲數據。每個分片都是一個具有獨立搜索能力的lucene實例,而副本是分片的拷貝。使用分片和副本的方式不僅可以提高elasticsearch的橫向擴展性,還可以保證高可用性。
六、elasticsearch集群遷移
在elasticsearch集群的遷移過程中,需要注意一些細節問題,下面是elasticsearch集群遷移的代碼示例:
# 1. 關閉舊節點 curl -XPOST 'http://localhost:9200/_cluster/nodes/_local/_shutdown' # 2. 將數據文件拷貝到新節點 tar -zcvf data.tar.gz /path/to/elasticsearch/data scp data.tar.gz user@newserver:/path/to/elasticsearch/data # 3. 啟動新節點 elasticsearch
七、elasticsearch更新數據
在elasticsearch中更新數據可以使用update API,下面是elasticsearch更新數據的代碼示例:
public static void update(String index, String type, String id, Map updateMap) throws Exception {
TransportClient client = ElasticSearchUtils.getClient();
UpdateRequest updateRequest = new UpdateRequest(index, type, id);
updateRequest.doc(updateMap);
client.update(updateRequest).get();
client.close();
}
八、elasticsearch索引數據遷移
在elasticsearch索引數據遷移的過程中,可以使用reindex API將數據遷移到新的索引中,下面是elasticsearch索引數據遷移的代碼示例:
POST _reindex
{
"source": {
"index": "old_index"
},
"dest": {
"index": "new_index"
}
}
以上就是elasticsearch數據遷移的全面解析,希望能對大家有所幫助。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/151932.html
微信掃一掃
支付寶掃一掃