大廠程序員爲了更好的滿足歷史數據的保存和檢索往往選擇這種神操作!

3i4gvq41yw.png

原文發佈於微信公衆號:騰訊雲存儲(關注有驚喜)


使用場景

ElasticSearch是一款開源的非常火爆的文檔索引引擎, 大小公司都比較青睞的一款做日誌檢索、分析、查詢的工具。

但是ElasticSearch的數據依靠本地磁盤來做存儲,雖然有三副本機制來保障數據的可靠性,但是磁盤的容量畢竟有限,如果希望保留更長時間的歷史數據,如30天至半年的數據,ElasticSearch的本地存儲就顯得捉襟見肘了。

爲了更好的滿足歷史數據的保存和檢索,推薦一種非常靠譜的存儲解決方案:ES + CHDFS。


雲 HDFS(Cloud HDFS,CHDFS)是騰訊雲存儲團隊新推出的一款完全兼容HDFS協議,主要解決大數據場景下海量數據存儲和數據分析,能夠爲大數據用戶在無需更改現有代碼的基礎上,將本地自建的 HDFS 文件系統無縫遷移至CHDFS 上。可以將ES中的歷史索引數據移動到CHDFS保存。

接下來,我們將一步一步地教您如何打通ES到CHDFS的數據流。


準備工作

在開始前,需要做以下幾件事情:

1. 搭建hadoop環境,2.x和3.x均可。也可以使用騰訊雲EMR套件,省時省力;

2. 安裝ES-hadoop插件,作者下載的是elasticsearch-hadoop-7.4.2.jar(下載地址:http://t.cn/AiempNYA),下載後將插件安裝到hadoop組件的每臺服務器上的classpath中(可以使用java classpath命令查看);

3. 下載CHDFS插件,並且配置好CHDFS的插件(查看詳情:http://b6i.cn/3GtN5);

4. 創建CHDFS文件系統並配置好權限組和掛載點(查看詳情:http://t.cn/AiemO04v);


當上面4個步驟均準備成功,恭喜你,離成功越來越近了。



編寫備份代碼

編寫MapReduce程序,編寫自己的Mapper,示例:

package org.chdfs.es_chdfs;import org.apache.hadoop.io.Text;import org.apache.hadoop.mapreduce.Mapper;import org.elasticsearch.hadoop.mr.LinkedMapWritable;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import java.io.IOException;class TestMapper extends Mapper<Text, LinkedMapWritable, Text, LinkedMapWritable> {    private static final Logger LOG = LoggerFactory.getLogger(TestMapper.class);    @Override    protected void setup(Context context) throws IOException, InterruptedException {        super.setup(context);    }    @Override    protected void map(Text key, LinkedMapWritable value, Context context)            throws IOException, InterruptedException {        context.write(key, value);    }    @Override    protected void cleanup(Context context) throws IOException, InterruptedException {        super.cleanup(context);    }}

編寫Main函數,指定ES的實例及索引,示例代碼:

package org.chdfs.es_chdfs;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.Path;import org.apache.hadoop.io.Text;import org.apache.hadoop.mapreduce.Job;import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;import org.elasticsearch.hadoop.mr.EsInputFormat;import org.elasticsearch.hadoop.mr.LinkedMapWritable;import org.slf4j.Logger;import org.slf4j.LoggerFactory;public class EsToCHDFS {    private static Logger LOG = LoggerFactory.getLogger(EsToCHDFS.class);    public static void main(String[] args) {        try {            Configuration conf = new Configuration();            conf.setBoolean("mapred.map.tasks.speculative.execution", false);            conf.setBoolean("mapred.reduce.tasks.speculative.execution", false);            //ElasticSearch節點            conf.set("es.nodes", "10.0.1.11:9200");            //ElaticSearch 索引            conf.set("es.resource", "logstash-2019.11.29-000001");            if (args.length != 1) {                LOG.error("error : " + args.length);                System.exit(1);            }             Job job = Job.getInstance(conf, " EsToCHDFS ");            job.setJarByClass(EsToCHDFS.class);            job.setInputFormatClass(EsInputFormat.class);            job.setMapperClass(TestMapper.class);            job.setMapOutputKeyClass(Text.class);            job.setMapOutputValueClass(LinkedMapWritable.class);            FileOutputFormat.setOutputPath(job, new Path(args[0]));            System.out.println(job.waitForCompletion(true));        } catch (Exception e) {            LOG.error(e.getMessage(), e);        }    }}

編譯代碼生成jar包,例如es-chdfs-0.0.1-SNAPSHOT.jar


備份數據

當生成好jar包之後,在hadoop環境執行啓動job命令, 例如:

hadoop jar es-chdfs-0.0.1-SNAPSHOT.jar org.chdfs.es_chdfs.E2HJob01 ofs://f4mnighxmwd-tiW9.chdfs.ap-beijing.myqcloud.com/e2h


其中,指定CHDFS的存儲路徑,

ofs://f4mnighxmwd-tiW9.chdfs.ap-beijing.myqcloud.com/e2h

注意:由於mapreduce的限制,需要確保e2h目錄是不存在的。


查看效果

提交MapReduce後,可以查看hadoop監控頁面觀察作業是否正常結束。

?wx_fmt=png

如果正常結束後,可以查看CHDFS上的文件是否有生成。如果有看到類似如下的顯示,恭喜你,成功完成ES到CHDFS的數據轉儲。

?wx_fmt=png



數據分析

備份成功後,可以釋放ElasticSearch上歷史數據,極大節省了ElasticSearch上的存儲成本。

CHDFS可以無縫對接各種主流的大數據套件,如Spark、hive、tez、presto、MapReduce、騰訊雲EMR等。數據落地到CHDFS後,可以輕鬆高效的使用常見大數據組件來進行數據的進一步分析,爲客戶創造更多的價值。






關注騰訊雲 掌握更多雲技術


?wx_fmt=jpeg





?wx_fmt=gif 點擊領取:COS限時1元禮包


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章