Hive数据同步到ES

文章目录

  • Hive2Es
    • 需求
    • 准备工作-集群
    • 准备工作-数据
      • Hive
    • 编码
    • 服务器部署

Hive2Es

需求

  1. 将Hive的user标签数据同步到ElasticSearch
  2. 每天生成一个index
  3. 将user_id作为文档id

准备工作-集群

  1. Hadoop集群、Hive集群、Yarn集群(用的是CDH)
  2. Spark集群(用的是CDH)
  3. ElasticSearch集群(单独部署的)

准备工作-数据

Hive

  1. Hive表
  • 创建hive分区表(根据当天的日期进行分区)
hive shell #进入hive shell命令行

CREATE TABLE IF NOT EXISTS test_db.user_info ( 
user_id INT COMMENT '用户id',
age INT COMMENT '用户年龄',
name STRING COMMENT '用户姓名'
) COMMENT '服务信息标签表' PARTITIONED BY ( dt string );

  • 插入两条数据
insert into test_db.user_info partition(dt="2019-10-16") values(1,18,'Tom');
insert into test_db.user_info partition(dt="2019-10-16") values(2,20,'Bob');
  • 查询数据是否插入成功
1. 查询最新日期的数据
select * from test_db.user_info where dt in (select dt from test_db.user_info order by dt desc limit 1);

结果:
OK
1	18	Tom	2019-10-16
2	20	Bob	2019-10-16


编码

1.git地址:github.com/yangxifi/spark-study

  1. 注意事项
  • SparkSession初始化(local模式仅用于本地调试流程,部署的服务器上的时候得去掉)
public class SparkEnvUtil {

    public static SparkSession getSparkEnvWithHiveAndEsSup(AppConfig appConfig) {
        SparkSession spark = SparkSession.builder()
                // 注意本地测试完通过后把这行注释掉 不然服务器上启动
                // 会报java.lang.IllegalStateException: User did not initialize spark context!
//                .master("local[*]")
                .appName("hive2esDemo").config("spark.serializer", "org.apache.spark.serializer.KryoSerializer")
                .config("spark.kryo.registrator", MyKryoRegistrator.class.getName())
                .config("hive.metastore.uris", appConfig.getHivemetastoreUris())//指定hive的metastore的地址
                .config("spark.sql.warehouse.dir", appConfig.getHiveWarehouseDir())//指定hive的warehouse目录
                .config("es.nodes", appConfig.getEsNodes())//es的nodes
                .config("es.index.auto.create", "true")//配置es自动创建索引
                .enableHiveSupport()
                .getOrCreate();
        return spark;
    }

}
  • 打包(注意排除掉spark、hadoop得包哦)
  • 由于服务器上已经有这部分的包,所以排除掉(避免冲突),而且打得包还会小很多
  • 因此只需要打包此部分工程独有的包(服务器上没有的)
            
            
                org.apache.maven.plugins
                maven-shade-plugin
                3.1.1
                
                    
                        package
                        
                            shade
                        
                        
                            
                                
                                
                                    org.apache.hadoop.*
                                    org.apache.spark.*
                                    log4j:log4j:jar:
                                    org.slf4j.*
                                
                                
                                
                                    org.elasticsearch:*:*
                                    org.projectlombok:*:*
                                    commons-httpclient:*:*
                                
                            
                        
                    
                
            

服务器部署

  1. mvn clean package打包,丢到服务器的/home/hive2EsDemo目录下

  2. 以yarn-cluster模式启动

vim start-yarn-cluster.sh
脚本内容如下:
#!/bin/sh
/usr/bin/spark-submit --class com.spark.study.EsLoader \
--master yarn \
--deploy-mode cluster \
/home/hive2EsDemo/Hive2Es-Demo.jar \

  1. sh start-yarn-cluster.sh
  2. 执行成功后
  • 查看es的索引命令:curl -X GET “devenv-bigdata-datanode1:9200/_cat/indices?v”

  • 返回
    在这里插入图片描述

  • 查看其中一个文档命令:curl -X GET “devenv-bigdata-datanode1:9200/user_info_20191016/_doc/1?pretty”

  • 返回
    Hive数据同步到ES_第1张图片

  1. Bingo-结束

你可能感兴趣的:(大数据)