java打jar包引入本地依赖,执行java -jar 读取elasticsearch全量数据并导出json文件

此篇文章为 java读取elasticsearch全量数据并导出json文件 https://blog.csdn.net/zxt880610/article/details/106584343 的延伸

起因:要做一个ES数据同步到hdfs的需求,本地测试完成应用到生产后发现与测试环境有很大区别

        1. 测试环境无账密                生产环境有账密                    排除presto,暂没发现支持账密方式,如有大神知道请指教

        2. 测试环境数据量小            生产环境数据量巨大             排除创建映射表方式,可能查挂ES集群

        3. 测试环境为一个索引        生产环境由于数据量过大,每天创建一个新索引,以时间做后缀            

由于以上几种场景,只能通过代码实现,创建java程序,编写完成后打成jar,上传到集群执行(由于工作原因待续。。。)

 

此前用idea打包,一直报错,没有主清单属性 与 Error: Invalid or corrupt jarfile 两种错误,放弃idea打包,改用maven插件打包成功。

 

在pom文件中加入以下插件,中包含三种打包方式

<build>
  <plugins>
    <!-- 打包时跳过单元测试 -->
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-surefire-plugin</artifactId>
      <version>2.4.2</version>
      <configuration>
        <skip>true</skip>
      </configuration>
    </plugin>

    <!-- 指定JDK版本及编码方式 -->
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <version>3.1</version>
      <configuration>
        <source>1.8</source>
        <target>1.8</target>
        <encoding>UTF8</encoding>
      </configuration>
    </plugin>

    <!-- 源码打包 -->
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-source-plugin</artifactId>
      <version>2.4</version>
      <executions>
        <execution>
          <id>attach-sources</id>
          <goals>
            <goal>jar</goal>
          </goals>
        </execution>
      </executions>
    </plugin>

    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-assembly-plugin</artifactId>
      <executions>
        <execution>
          <id>make-assembly</id>
          <goals>
            <goal>single</goal>
          </goals>
          <phase>package</phase>
        </execution>
      </executions>
      <configuration>
        <attach>false</attach>
        <descriptorRefs>
          <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
        <archive>
            <manifest>
                <mainClass>com.afanti.ScrollAll</mainClass>      ----->此处放开主函数
            </manifest>
        </archive>
      </configuration>
    </plugin>
  </plugins>
</build>

加入插件后编译代码,在本地找到打包好的可运行jar包上传到服务器,在jar包目录下运行 java -jar 命令

此处错误为ES集群挂掉,重启ES集群后重新运行java -jar 命令

此时ES数据文件已写入到linux  tmp/ 路径下 

完成此步后,结合我之前文章按步骤 1.java读取elasticsearch全量数据并导出json文件

                                                           2.java打jar包引入本地依赖,执行java -jar 读取elasticsearch全量数据并导出json文件

                                                           3.MONGO数据同步到HIVE分区表实现增量同步

通过此三步,可实现 ES 大批量数据增量同步到hive仓库。

 ES json文件样本:

{"serialVersionUID":1,"topic":"mw_20_108_test2","database":"dataworks","table":"global_val_test","type":"insert","ts":1585639455,"xid":6497354229,"commit":true,"data":"{\"update_time\":\"2020-01-09 06:46:54\",\"create_time\":\"2020-01-09 06:46:54\",\"name\
":\"updateMysqlMetadate\",\"id\":50,\"value\":\"10\"}"}

hive建表语句:

CREATE TABLE  IF NOT  EXISTS  TMP_mongo_binloghash.TMP_binloghash
( json_data string
)ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\001';

CREATE EXTERNAL TABLE IF NOT  EXISTS mongo_binloghash.binloghash
( serialVersionUID string ,
  topic string ,
  database_str string ,
  table_str string ,
  type string ,
  ts string ,
  xid string ,
  commit_str string ,
  update_time string, 
  create_time string,
  name string,
  id string,
  value string
)PARTITIONED BY(pk_year string, pk_month string, pk_day string)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t' 
STORED AS RCFILE;

解析临时表json数据,分区增量到正式表:

INSERT overwrite TABLE mongo_binloghash.binloghash partition (pk_year,pk_month,pk_day)

SELECT get_json_object(a.json_data,'$.serialVersionUID') AS serialVersionUID,

get_json_object(a.json_data,'$.topic') AS topic,

get_json_object(a.json_data,'$.database') AS database_str,

get_json_object(a.json_data,'$.table') AS table_str,

get_json_object(a.json_data,'$.type') AS type,

get_json_object(a.json_data,'$.ts') AS ts,

get_json_object(a.json_data,'$.xid') AS xid,

get_json_object(a.json_data,'$.commit') AS commit_str,

get_json_object((get_json_object(a.json_data,'$.data')),'$.update_time') AS update_time,    ---> json数据样本中 data 嵌套拆分

get_json_object((get_json_object(a.json_data,'$.data')),'$.create_time') AS create_time,

get_json_object((get_json_object(a.json_data,'$.data')),'$.name') AS name,

get_json_object((get_json_object(a.json_data,'$.data')),'$.id') AS id,

get_json_object((get_json_object(a.json_data,'$.data')),'$.value') AS value,

substring(get_json_object((get_json_object(a.json_data,'$.data')),'$.create_time'),1,4) AS pk_year,  ---> 拆分data 后取其中create_time 为分区字段,实行截取

substring(get_json_object((get_json_object(a.json_data,'$.data')),'$.create_time'),1,7) AS pk_month,

substring(get_json_object((get_json_object(a.json_data,'$.data')),'$.create_time'),1,10) AS pk_day

FROM TMP_mongo_binloghash.TMP_binloghash a

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
注:下文中的 *** 代表文件名中的组件名称。 # 包含: 中文-英文对照文档:【***-javadoc-API文档-中文(简体)-英语-对照版.zip】 jar包下载地址:【***.jar下载地址(官方地址+国内镜像地址).txt】 Maven依赖:【***.jar Maven依赖信息(可用于项目pom.xml).txt】 Gradle依赖:【***.jar Gradle依赖信息(可用于项目build.gradle).txt】 源代码下载地址:【***-sources.jar下载地址(官方地址+国内镜像地址).txt】 # 本文件关键字: 中文-英文对照文档,中英对照文档,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压 【***.jar中文文档.zip】,再解压其中的 【***-javadoc-API文档-中文(简体)版.zip】,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·本文档为双语同时展示,一行原文、一行译文,可逐行对照,避免了原文/译文来回切换的麻烦; ·有原文可参照,不再担心翻译偏差误导; ·边学技术、边学英语。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值