为thrift新增schema的动态支持

本文探讨了Avro和Thrift这两种数据交换格式的特点。Avro由Hadoop之父Doug Cutting提出,旨在创建统一的数据交换和存储标准。其独特之处在于结合了明确的Schema和高效的二进制数据表示,支持数据自我描述。JD_Thrift开发库的开发初衷是为了利用Avro的动态Schema加载能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在今天说到Thrift就不可避免的要谈到AvroAvro出自Hadoop之父Doug Cutting,其目标是要建立一个新的,标准性的云计算的数据交换和存储的Protocol。它偏向实用,主张建立一个统一的标准,并不介意采用特定的优化。Avro的创新之处在于融合了显式,declarativeSchema和高效二进制的数据表达,强调数据的自我描述,克服了以往单纯XML或二进制系统的缺陷。

        Avro-generic方式支持Schema的动态加载,用通用的结构(map)代表数据对象,不需要编译加载直接就可以处理新的数据源,这是相对Thrift的一个非常重要的区别,而这个功能确实在某些情况下非常有用,这正是JD_Thrift开发库的原始启动原因。

     JD_Thrift的开源链接:https://github.com/netcomm/thrift_auto_java 

robotframework给spark-shell写测试用例,spark-shell的开启方式为: (1)cd /opt/module/ume/spark/bin (2)./spark-shell --master local --conf spark.hadoop.hive.metastore.uris=thrift://local:19083 spark-shell的建表语句为: import org.apache.iceberg.Schema; import org.apache.iceberg.types.Types; //创建schema val schema = new Schema( Types.NestedField.required(1, "level", Types.StringType.get()), Types.NestedField.required(2, "event_time", Types.TimestampType.withoutZone()), //without Zone Types.NestedField.required(3, "message", Types.StringType.get()), Types.NestedField.required(4, "count", Types.IntegerType.get()) ); import org.apache.iceberg.PartitionSpec; //创建分区 val spec = PartitionSpec.builderFor(schema).hour("event_time").gpHash("level", 2).build(); import org.apache.iceberg.hive.HiveCatalog; //创建catalog val catalog = new HiveCatalog(); catalog.setConf(spark.sparkContext.hadoopConfiguration); val properties = Map("warehouse"->"hdfs://node199:9000/user/spark","uri"->"thrift://localhost:19083"); import collection.JavaConversions._ catalog.initialize("hive",mapAsJavaMap(properties)); // 创建数据库,如果spark中此数据库已经存在则可以忽略 import org.apache.iceberg.catalog.Namespace val namespace = Namespace.of("postgres"); import org.apache.iceberg.relocated.com.google.common.collect.ImmutableMap catalog.createNamespace(namespace, ImmutableMap.of()); //创建数据表 import org.apache.iceberg.Table; import org.apache.iceberg.catalog.TableIdentifier; val name = TableIdentifier.of("postgres", "test_ts_without_zone"); val table = catalog.createTable(name, schema, spec); 核心是通过robotframework,通过SSHLibrary库的write语句,要解决robotframework与spark-shell的交互问题
最新发布
03-15
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值