在 Google Cloud Bigtable 中填充数据需要很长时间

2024-01-25

我使用以下代码将数据填充到 Bigtable 中:

CloudBigtableScanConfiguration config = new CloudBigtableScanConfiguration.Builder()
                .withConfiguration("clusterId", options.getBigTableClusterId())
                .withProjectId(options.getProject())
                .withInstanceId(options.getBigTableInstanceId())
                .withTableId(options.getOutputBTTable())
                .build();
     Pipeline p = Pipeline.create(options);
     /**
      * Read Data from Big Query
      */
     CloudBigtableIO.initializeForWrite(p);
     p.apply(BigQueryIO.Read.fromQuery(getQuery(options.getDate())))
        .apply(ParDo.of(new DoFn<TableRow, Mutation>() {
           public void processElement(ProcessContext c) {
             Mutation output = convertDataToRow(c.element());
             if (output != null) { 
                 c.output(output); 
                 };
           }

           }))
         .apply(CloudBigtableIO.writeToTable(config));
     p.run();

private static Mutation convertDataToRow(TableRow element) {
     LOG.info("element: "+ element);
     if(element.get("BASM_AID") != null){
         Put obj = new Put(getRowKey(element).getBytes()).addColumn(SEGMENT_FAMILY, SEGMENT_COLUMN_NAME, ((String)element.get("BAS_category")).getBytes() );
                obj.addColumn(USER_FAMILY, AID, ((String)element.get("BASM_AID")).getBytes());
         if(element.get("BASM_segment_id") != null){
                obj.addColumn(SEGMENT_FAMILY, SEGMENT_ID, ((String)element.get("BASM_segment_id")).getBytes());
         }
         if(element.get("BAS_sub_category") != null){
                obj.addColumn(SEGMENT_FAMILY, SUB_CATEGORY, ((String)element.get("BAS_sub_category")).getBytes());
         }
         if(element.get("BAS_name") != null){
                obj.addColumn(SEGMENT_FAMILY, NAME, ((String)element.get("BAS_name")).getBytes());
         }
         if(element.get("BAS_description") != null){
                obj.addColumn(SEGMENT_FAMILY, DESCRIPTION, ((String)element.get("BAS_description")).getBytes());
         }
         if(element.get("BASM_krux_user_id") != null){
             obj.addColumn(USER_FAMILY, KRUX_USER_ID, ((String)element.get("BASM_krux_user_id")).getBytes());
         }
         if(element.get("BAS_last_compute_day") != null){
                obj.addColumn(SEGMENT_FAMILY, LAST_COMPUTE_DAY, ((String)element.get("BAS_last_compute_day")).getBytes());
         }
         if(element.get("BAS_type") != null){
                obj.addColumn(SEGMENT_FAMILY, TYPE, ((String)element.get("BAS_type")).getBytes());
         }      
         if(element.get("BASM_REGID") != null){
                obj.addColumn(USER_FAMILY, REGID, ((String)element.get("BASM_REGID")).getBytes() );
         }
        return obj;
     }else{
         return null;
     }
    }

我们有 30 个 Bigtable 节点,我的数据流工作需要与 100 个工作人员一起工作,整个过程必须处理大约 100 亿行数据,使用上述配置我的工作需要一天多的时间才能完成,这并不理想。

在代码级别上的任何建议,通过它我们可以更快地运行我们的工作,我知道增加 Bigtable 节点的数量是选项之一,但目前,我正在寻找不需要增加节点的其他选项。


您可能想看看这个问题 https://stackoverflow.com/questions/39105992/exceptions-in-google-cloud-dataflow-pipelines-from-bigquery-to-cloud-bigtable。基于此,您需要查看写入带宽,如果超过 80%,您可能希望减少工作节点的数量,或者要求增加配额并增加集群的大小。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Google Cloud Bigtable 中填充数据需要很长时间 的相关文章

随机推荐

  • 如何在 Python 脚本中使用 Google OAuth2

    在使用 Python 脚本将视频上传到 YouTube 频道时 若希望将视频上传到第二个频道 需要解决 OAuth2 授权的问题 解决方案 创建新的 Google Cloud 项目 from google oauth2 import ser
  • 题解 | #判断两个IP是否属于同一子网#

    求求大家投下腾讯吧 一直在捞人 求求大家投下腾讯吧 一直在捞人 垂直领域大模型 文档图像大模型的思考与探索 分享一个大模型3D可视化的项目 释放一个比亚迪hc 这样改简历 春招通过能提升50 吗 OPPO校招笔试原题 记录一波秋招结果 伯恩
  • 【安全-SSH】SSH安全设置

    今天发现自己的公有云服务器被攻击了 在这里插入图片描述 https img blog csdnimg cn direct cafdca04646f4b8b838400ec79ac282f png 然后查看了登录日志 如上图 ls sh va
  • RabbitMQ环境配置

    文章目录 安装Erlang 安装RabbitMQ 安装Erlang 下载地址 http erlang org download otp win64 25 3 2 7 exe 安装RabbitMQ 下载地址 https www rabbitm
  • 【安全】网络安全态势感知

    文章目录 一 态势感知简介 1 概念 2 形象举例 3 应具备的能力 二 为什么要态势感知 为什么网络安全态势感知很重要 三 态势感知系统的功能 四 如何评估态势感知的建设结果 五 什么是态势感知的三个层级 四 业界的态势感知产品 1 安全
  • 如何在 Python 脚本中使用 Google OAuth2

    在使用 Python 脚本将视频上传到 YouTube 频道时 若希望将视频上传到第二个频道 需要解决 OAuth2 授权的问题 解决方案 创建新的 Google Cloud 项目 from google oauth2 import ser
  • 记录xxl-job重复执行引发业务问题

    业务问题描述 1 创建运单 发现重复 同一个车架号两条记录 2 通知重复反馈 A系统读取中间表状态为未处理数据 推送到B系统 原因分析 1 以上两个问题都是xxljob定时执行的 2 通过日志分析 读取中间表数据 同一条数据被多次处理 针对
  • 网络安全行业热门认证证书合集

    网络安全认证证书 就和学历一样是敲门砖 拿到了可以用不到 但不能没有 技术大牛可以没有证书 但普通人不能没有 1 初级入门 就像学历在职场上展示一个人的基本素养一样 网络安全认证证书可以展示一个人在网络安全领域具备的基本知识和技能 它为初学
  • 【加解密篇】电子数据取证分析之特殊的自加密BitLocker解密

    加解密篇 电子数据取证分析之特殊的自加密BitLocker解密 数据加解密通常是个耗时费力的事情 蘇小沐 1 实验环境 Windows 11 专业版 23H2 22631 3007 一 自动开启BitLocker之天坑 1 经验之谈 在20
  • 【前端】canvas图片加文字

    注释标记了操作步骤 import React Component createRef from react class CertifyImgRender extends Component bgRef createRef
  • 使用 Caffe 没有提高 RMSprop、Adam、AdaDelta 测试精度

    I am finetuning using Caffe在图像数据集上Tesla K40 用一个batch size 47 solver type SGD base lr 0 001 lr policy step momentum 0 9 g
  • 获取 Flutter ListView 中当前可见的 widget

    我在用ListView builder 当我们向上向下滚动时 如何获取当前可见的小部件viewport 类似安卓的东西recyclerview findFirstCompletelyVisibleItemPosition 谷歌给出了解决方案
  • MySQL TRIM 函数不修剪换行符或回车符吗?

    从我的实验来看 似乎并非如此 如果确实如此 那么删除换行符的最佳方法是什么 我目前正在试验 TRIM 接受的要删除的字符的参数 从修剪开始 n and r 我的换行符位于字符串的中间 并且我无法控制源数据 以下 mysql 命令对我有用 R
  • 如何激活 Anaconda 环境

    我使用的是 Windows 8 使用 Anaconda 1 7 5 64 位 我创建了一个新的 Anaconda 环境 conda create p test python 2 7 pip from C Pr TEMP venv 这很有效
  • 垂直复制电子表格中的所有列

    set ws1 As SheetA set ws2 As Target With ws1 LastCol Cells 1 Columns Count End xlToLeft Column End With Lastrow ws1 Rang
  • 有没有办法以编程方式检查用户是否在 Facebook 上共享了链接?

    我目前正在使用 jQuery 记录我网站上 Facebook 共享链接的每次点击 但我正在寻找更准确的解决方案 我不想记录点击 而是记录实际的 分享 用户共享链接后 是否有办法从 Facebook 获取响应消息 我今天遇到了这个 http
  • 我可以在 Android 中捕获用于解码图片文件的位图分配中的内存不足异常吗?

    我尝试对图片文件解码进行捕获 但它无法捕获内存不足异常 并且应用程序崩溃了 我知道解码图片文件的一些技巧 例如子采样 但我需要放大图片才能看到细节 所以我不能对其进行过多的二次采样 对于一些较新的设备 可以成功分配更大的内存以避免内存不足异
  • 如何用PHP自动更新数据库中的数据

    我想做托福考试 我在数据库中创建了包含 4 列 电子邮件 正确 错误 分数 的表 Score struct 如果用户已经完成了之前的测试并将再次进行测试 则用户数据将根据用户的电子邮件推介进行更新 我试过了 但是失败了 数据不会更新 请帮我
  • 如何在弹出控制器中设置带有标题的导航栏[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如何在弹出控制器中设置带有标题的导航栏 我想要详细的解释 请帮帮我 提前致谢 SomeViewController popContentV
  • 在 Google Cloud Bigtable 中填充数据需要很长时间

    我使用以下代码将数据填充到 Bigtable 中 CloudBigtableScanConfiguration config new CloudBigtableScanConfiguration Builder withConfigurat