当前位置: 首页 > news >正文

58做网站网站建设元年

58做网站,网站建设元年,深圳广告标识厂家,晋江网站建设价格问题 在通过Go连接hbase的过程中, 发现 get操作可以查到数据, 但是scanner命令访问数据失败, 也没有报错, 就是单纯的查不到数据. 而且Python PHP都一切正常. 这里简单复述一下我出现问题的情况, 安装过程和网上大部分内容一致, 这里简单列一下, 只是为了查询问题时参考安装过…问题 在通过Go连接hbase的过程中, 发现 get操作可以查到数据, 但是scanner命令访问数据失败, 也没有报错, 就是单纯的查不到数据. 而且Python PHP都一切正常. 这里简单复述一下我出现问题的情况, 安装过程和网上大部分内容一致, 这里简单列一下, 只是为了查询问题时参考安装过程的差异: # 安装hbase wget -O /opt/hbase.tar.gz https://dlcdn.apache.org/hbase/2.4.11/hbase-2.4.11-bin.tar.gz tar -xzf /opt/hbase.tar.gz -C /opt/ rm /opt/hbase.tar.gz # 安装thrift apt install -y libboost-dev \libboost-test-dev \libboost-program-options-dev \libevent-dev \automake \libtool \flex \bison \pkg-config \g \libssl-dev \gcc \autoconf \make \ wget -O /opt/thrift.tar.gz https://dlcdn.apache.org/thrift/0.16.0/thrift-0.16.0.tar.gz \ tar -xzf /opt/thrift.tar.gz -C /opt \ rm /opt/thrift.tar.gz \ cd /opt/thrift-0.16.0 \ ./configure \ make \ make install # 测试使用, 将hbase服务改为单机模式 cat /opt/hbase-2.4.11/conf/hbase-site.xml - EOF ?xml version1.0? ?xml-stylesheet typetext/xsl hrefconfiguration.xsl? configuration!-- hbase存放数据目录 --propertynamehbase.rootdir/namevaluefile:///data/hbase/value/property!-- ZooKeeper数据文件路径 --propertynamehbase.zookeeper.property.dataDir/namevalue/data/zookeeper/value/propertypropertynamehbase.unsafe.stream.capability.enforce/namevaluefalse/value/property /configuration EOF # 启动hbase服务 /opt/hbase-2.4.11/bin/start-hbase.sh # 启动htrift服务 /opt/hbase-2.4.11/bin/hbase-daemon.sh start thrift2 -p 9091# 生成go和python的thrift工具文件 wget -O ~/hbase_src.tar.gz https://dlcdn.apache.org/hbase/2.4.11/hbase-2.4.11-src.tar.gz tar -xzf ~/hbase_src.tar.gz -C ~ cd ~/hbase-2.4.11/hbase-thrift/src/main/resources/org/apache/hadoop/hbase/thrift2 thrift --gen go hbase.thrift thrift --gen py hbase.thrift服务启动后, 使用GO进行查询(其中test表已经提前放入数据): transport, err : thrift.NewTSocket(net.JoinHostPort(127.0.0.1, 9091)) if err ! nil {panic(err) } protocolFactory : thrift.NewTBinaryProtocolFactoryDefault() client : hbase.NewTHBaseServiceClientFactory(transport, protocolFactory) transport.Open() scan : hbase.TScan{} ret, err : client.GetScannerResults(context.Background(), []byte(test), scan, 100) if err ! nil {panic(err) } fmt.Println(scanner result) fmt.Println(ret)发现使用go查询不到数据???这个就奇怪了, 因此开始进行检查(简单复现一下问题查询步骤). 原因追溯 首先, 在使用GO查询之前已经使用hbase shell连接过了, 因此可以确定不是hbase启动失败的问题. 因此思考各种问题逐一排查. 端口未开启 使用命令telnet 127.0.0.1 9091进行验证, 端口没有问题, 可以排除. 是否仅Go有问题 使用python php进行连接并访问相同方法, 发现是有返回数据的, Python代码: from thrift.transport import TSocket from thrift.protocol import TBinaryProtocol from thrift.transport import TTransport from hbase import THBaseService from hbase.ttypes import TScanif __name__ __main__:transport TTransport.TBufferedTransport(TSocket.TSocket(127.0.0.1, 9091))protocol TBinaryProtocol.TBinaryProtocolAccelerated(transport)client THBaseService.Client(protocol)transport.open()# 使用 client 实例进行操作ret client.getScannerResults(tabletest,tscanTScan(),numRows100)print(ret)transport.close()由此可以证明, thrift也没有问题, 一定是Go在连接的时候出了问题. 是否Go所有方法都有问题 尝试调用thrift其他方法, 判断是仅scanner方法有问题, 还是所有方法都有问题: tGet : hbase.TGet{Row: []byte(row1), // row1 数据是存在的 } getRet, err : client.Get(context.Background(), []byte(test), tGet) if err ! nil {panic(err) } fmt.Println(get result) fmt.Println(getRet)查询后发现, Get方法是可以获取到数据的, 那么, 就是说仅Go的GetScannerResults方法是有问题的??? 当问题追溯到这里的时候, 我已经有些懵了, 尝试这谷歌查找原因, 各种关键词都试过了, 没有找到想要的答案(这也是为什么我要把这个错记下来, 因为没查到啊) 抓包比较差异 找了半天没有找到问题, 既然Python可以查到数据 而Go查不到, 那么, 就可以尝试抓包比较两者差异了嘛. 依然使用上面的GetScannerResults, 分别对python和go进行抓包分析, 通过命令tmpdump port 9091 -w thrift.cap: 可以看到, 其中的thrift请求也能够被wireshark识别了, 那就太好了, 不用比较二进制了, 来看一下两个请求的区别: Python请求如下: Go请求如下: 其中, 有一个字段两个是明显不一样的, 我很贴心的用红框圈出来了, 那么, 问题来了, 这个字段是什么呢? 我把上面的hbase.thrift文件中的一部分拿出来, 就很明显了: /*** Any timestamps in the columns are ignored but the colFamTimeRangeMap included, use timeRange to select by timestamp.* Max versions defaults to 1.*/ struct TScan {1: optional binary startRow,2: optional binary stopRow,3: optional listTColumn columns4: optional i32 caching,5: optional i32 maxVersions1,6: optional TTimeRange timeRange,7: optional binary filterString,8: optional i32 batchSize,9: optional mapbinary, binary attributes10: optional TAuthorization authorizations11: optional bool reversed12: optional bool cacheBlocks13: optional mapbinary,TTimeRange colFamTimeRangeMap14: optional TReadType readType15: optional i32 limit16: optional TConsistency consistency17: optional i32 targetReplicaId18: optional binary filterBytes}service THBaseService {/*** Get results for the provided TScan object.* This helper function opens a scanner, get the results and close the scanner.** return between zero and numRows TResults*/listTResult getScannerResults(/** the table to get the Scanner for */1: required binary table,/** the scan object to get a Scanner for */2: required TScan tscan,/** number of rows to return */3: i32 numRows 1) throws (1: TIOError io) }虽然我没用过thrift, 但是看着这个数据包, 在看看这个数据结构的定义, 很明显Field Id就是定义文件中前面的数字啊. 很好, 这就可以定位到不用的字段为: maxVersion, 而这个字段指定了返回的版本数量, 0个版本自然就没有数据咯. 解决 既然查询到时因为maxVersion字段不同而导致的问题, 那么在查询的时候手动指定即可. 修改代码后重试: scan : hbase.TScan{maxVersion: 1 } ret, err : client.GetScannerResults(context.Background(), []byte(test), scan, 100) if err ! nil {panic(err) } fmt.Println(scanner result) fmt.Println(ret)OK, 现在有数据了, 查半天没想到是这个问题. 至此, 问题解决… 我是不懂为什么不同语言访问还有这种差异? 是因为字段的默认值不同? 搞不懂. 再顺便提一句, 难道大家都没有碰到这个问题么? 我搁网上查了半天, 愣是没找到一个沾边的…若你也碰到了这个问题, 希望能够帮到你 原文地址: https://hujingnb.com/archives/767
http://www.pierceye.com/news/715300/

相关文章:

  • 网站建设 上海网站福州最好的网站建设公司
  • 兴力网站建设企业宣传网站在哪里做
  • 网站了建设pc官网 和手机网站
  • wordpress导航网站模板下载wordpress 关闭搜索引擎
  • 网站架构的优化wordpress企业主题免费下载
  • 分类信息网站手机版自学编程从哪学起
  • 网站目录 index.html京伦科技网站做的怎么样
  • 学做简单网站视频教程济源建设网站
  • 一个网站开发成本网店推广方案范文
  • 为什么要做seo盐城网站优化
  • 网站策划方案ppt站长查询域名
  • 网站开发需要哪些流程wordpress 添加widget
  • 在线报名网站建设汉字logo设计生成器
  • 移动网站和桌面网站区别烟台网站设计制作公司电话
  • 遵义网站建设网站定制wordpress主题多少钱
  • 外贸网站如何做推广是什么意思长沙制作公园仿竹护栏多少钱一米
  • seo网站有优化培训吗小程序商城开发华网天下优秀
  • 无锡品牌网站建设介绍网络营销是不是网络推广
  • 旅游网站建设论文题目商用图片的网站
  • 做网页专题 应该关注哪些网站网页版梦幻西游吸血鬼怎么过
  • gwt 网站开发深圳公司形象墙制作
  • 自己做的网站别人打不开大连网站建设方案维护
  • 卖高仿名牌手表网站两学一做网站飘窗
  • 企业网站备案资料样本购卡网页怎么制作
  • 什么网站能免费做简历ui设计师是什么意思
  • 天津网站推广公司哪家好深圳公司注册流程及资料
  • 家装网站建设哪家好点赣州市南康建设局网站
  • 北京建设网站制作我国外贸网站的建设
  • 自己做网站如何赚钱excel做网站
  • 芯片商城网站建设wordpress批量替换图片路径