【问题标题】:Can not read large data from phoenix table无法从凤凰表中读取大数据
【发布时间】:2015-03-07 13:08:51
【问题描述】:

大家好,我在大表上运行 phoenix count 查询时收到以下错误消息。

0: jdbc:phoenix:hadoopm1:2181> select Count(*) from PJM_DATASET;
+------------+
|  COUNT(1)  |
+------------+

java.lang.RuntimeException: org.apache.phoenix.exception.PhoenixIOException: org.apache.phoenix.exception.PhoenixIOException: Failed after attempts=36, exceptions:
Fri Jan 09 02:18:10 CST 2015, null, java.net.SocketTimeoutException: callTimeout=60000, callDuration=62365: row '' on table 'PJM_DATASET' at region=PJM_DATASET,,1420633295836.4394a3aa2721f87f3e6216d20ebeec44., hostname=hadoopctrl,60020,1420790733247, seqNum=27753

    at sqlline.SqlLine$IncrementalRows.hasNext(SqlLine.java:2440)
    at sqlline.SqlLine$TableOutputFormat.print(SqlLine.java:2074)
    at sqlline.SqlLine.print(SqlLine.java:1735)
    at sqlline.SqlLine$Commands.execute(SqlLine.java:3683)
    at sqlline.SqlLine$Commands.sql(SqlLine.java:3584)
    at sqlline.SqlLine.dispatch(SqlLine.java:821)
    at sqlline.SqlLine.begin(SqlLine.java:699)
    at sqlline.SqlLine.mainWithInputRedirection(SqlLine.java:441)
    at sqlline.SqlLine.main(SqlLine.java:424)
0: jdbc:phoenix:hadoopm1:2181>

请帮忙。

【问题讨论】:

  • 我的集群中有两台主服务器和一台区域服务器,ambari 服务检查和状态显示一切正常
  • 我也有同样的问题..这个问题有解决办法吗?
  • 我也有同样的问题。我的表的大小是 15 亿行。
  • @user3683741 你能找到溶胶吗?
  • @shaileshgupta 这在这一点上可能无关紧要,但我在下面发布了一个新答案。也许会有所帮助。

标签: hbase phoenix ambari sqlline


【解决方案1】:

是的,我们在运行命令时添加了相同的属性并解决了这个问题 hbase.client.scanner.timeout.period=600000

Hbase 1.2

【讨论】:

    【解决方案2】:

    (原问题三年后)

    我们今天遇到了非常相似的例外情况:

    java.net.SocketTimeoutException: callTimeout=60000, callDuration=60101: row '' on table '****' at region=****, hostname=wn1-bghbas.y1ao3ht4safu3e4em4fhuri0eh.ax.internal.cloudapp.net,16020,1543844388080, seqNum=568644
    org.apache.hadoop.hbase.client.RetriesExhaustedException: Failed after attempts=36, exceptions:
    Mon Dec 03 14:01:45 UTC 2018, null, java.net.SocketTimeoutException: callTimeout=60000, callDuration=60101: row '' on table '****' at region=****, hostname=****, seqNum=568644
    
           at org.apache.hadoop.hbase.client.RpcRetryingCallerWithReadReplicas.throwEnrichedException(RpcRetryingCallerWithReadReplicas.java:271)
           at org.apache.hadoop.hbase.client.ScannerCallableWithReplicas.call(ScannerCallableWithReplicas.java:210)
           at org.apache.hadoop.hbase.client.ScannerCallableWithReplicas.call(ScannerCallableWithReplicas.java:60)
           at org.apache.hadoop.hbase.client.RpcRetryingCaller.callWithoutRetries(RpcRetryingCaller.java:210)
           at org.apache.hadoop.hbase.client.ClientScanner.call(ClientScanner.java:327)
           at org.apache.hadoop.hbase.client.ClientScanner.loadCache(ClientScanner.java:413)
           at org.apache.hadoop.hbase.client.ClientScanner.next(ClientScanner.java:371)
           at org.apache.phoenix.iterate.ScanningResultIterator.next(ScanningResultIterator.java:55)
           ... 11 more
    

    在跟踪异常的调用跟踪后,我们发现正确的配置变量是hbase.client.scanner.timeout.period。可以在课堂上找到 以HBASE_CLIENT_SCANNER_TIMEOUT_PERIOD 为名org.apache.hadoop.hbase.HConstants

    请注意,如果您使用原始 JDBC 将 hbase.client.scanner.timeout.period 的值作为属性传递给 PhoenixDriver,则该值必须是 String,而不是 int

    类似:

    Properties prop = new Properties();
    prop.put("user", "***");
    prop.put("password", "***");
    prop.put(HConstants.HBASE_CLIENT_SCANNER_TIMEOUT_PERIOD, "800000");
    Connection connection = DriverManager.getConnection("jdbc:phoenix:10.0.0.1:2181:/hbase-unsecure", prop);
    

    为了记录,我们在 Hbase 1.1 上使用 Phoenix 4.7

    【讨论】:

    • 我们遇到了同样的问题,除了设置 hbase.rpc.timeout 和 phoenix.query.timeoutMs 之外,设置 hbase.client.scanner.timeout.period 解决了这个问题
    【解决方案3】:

    你需要在hbase服务器和客户端配置中将下面的hbase配置属性增加到更高的值,默认值为1分钟(60000毫秒)

      <property>
        <name>hbase.rpc.timeout</name>
        <value>600000</value>
      </property>
    

    最重要的是下面的命令应该返回正确的 hbase 配置目录,其中 hbase-site.xml 文件包含上述属性。如果hbase_conf_path的值为空或者.,在执行sqlline.py命令之前,先执行命令export HADOOP_CONF_DIR=&lt;correct_hbase_dir&gt;;指向正确的hbase配置。

    phoenix_utils.py  | grep hbase_conf_path
    

    【讨论】:

    • 只改变 hbase.rpc.timeout 没有帮助。还需要设置 hbase.client.scanner.timeout.period。请参阅下面@Malt 的回答
    【解决方案4】:

    callTimeout=60000,callDuration=62365。

    您的通话时间似乎超过了 10 分钟,这是超时时间。 尝试将 hbase-default.xml(或您的自定义)配置文件中的“hbase.master.catalog.timeout”设置为更高的值

    【讨论】:

    • 感谢您的回答,但报告的超时时间是 60000 ms,即 1 分钟,而不是 10 - 而 hbase.master.catalog.timeout 的默认值是 10 分钟,所以我不相信这是导致SocketTimeoutException
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-30
    • 1970-01-01
    • 1970-01-01
    • 2016-10-12
    • 2017-04-13
    • 1970-01-01
    • 2016-05-03
    相关资源
    最近更新 更多