I think this issue still exists, and more help would be appreciated. Unfortunately, this issue is still happening, I have updated all the hadoop_env.sh on the workers, and I'm quite certain the hbase-site.xml has been load up correctly. but the timeout still saying 60000 which is not the number we specified in the hbase-site.xml.
On Wed, Feb 20, 2019 at 4:59 PM Xiaoxiao Wang <xxw...@23andme.com> wrote: > Thanks for all your help > > I think I have found out the issue that all over mappers have > HADOOP_CLASSPATH overwritten in hadoop_env.sh :( > > On Wed, Feb 20, 2019 at 4:50 PM Xiaoxiao Wang <xxw...@23andme.com> wrote: > >> Pedro >> >> to answer your question, I have verified that the configuration file has >> loaded correctly from the classpath, >> >> I have 300+ mappers try to make connections to the db at the same time, >> and it still gives me the same error that timeout at after 60000 ms >> >> On Wed, Feb 20, 2019 at 4:45 PM Xiaoxiao Wang <xxw...@23andme.com> wrote: >> >>> Since I've known that the configuration have been loaded up correctly >>> through the classpath >>> >>> I have tested on the real application, however, it still timed out with >>> the same default value from the mappers >>> >>> Error: java.io.IOException: >>> org.apache.phoenix.exception.PhoenixIOException: Failed after attempts=36, >>> exceptions: Thu Feb 21 00:38:28 UTC 2019, null, >>> java.net.SocketTimeoutException: callTimeout=60000, callDuration=60309 >>> >>> On Wed, Feb 20, 2019 at 4:25 PM Xiaoxiao Wang <xxw...@23andme.com> >>> wrote: >>> >>>> i made this work on my toy application, getConf() is not an issue, and >>>> hbase conf can get the correct settings >>>> >>>> I'm trying out again on the real application >>>> >>>> On Wed, Feb 20, 2019 at 4:13 PM William Shen < >>>> wills...@marinsoftware.com> wrote: >>>> >>>>> Whatever is in super.getConf() should get overriden by hbase-site.xml >>>>> because addHbaseResources because will layer on hbase-site.xml last. >>>>> The >>>>> question is which one got picked up... (maybe there is another one on >>>>> the >>>>> classpath, is that possible?) >>>>> >>>>> On Wed, Feb 20, 2019 at 4:10 PM Xiaoxiao Wang >>>>> <xxw...@23andme.com.invalid> >>>>> wrote: >>>>> >>>>> > I'm trying out on the mapreduce application, I made it work on my toy >>>>> > application >>>>> > >>>>> > On Wed, Feb 20, 2019 at 4:09 PM William Shen < >>>>> wills...@marinsoftware.com> >>>>> > wrote: >>>>> > >>>>> > > A bit of a long shot, but do you happen to have another >>>>> hbase-site.xml >>>>> > > bundled in your jar accidentally that might be overriding what is >>>>> on the >>>>> > > classpath? >>>>> > > >>>>> > > On Wed, Feb 20, 2019 at 3:58 PM Xiaoxiao Wang >>>>> <xxw...@23andme.com.invalid >>>>> > > >>>>> > > wrote: >>>>> > > >>>>> > > > A bit more information, I feel the classpath didn't get passed in >>>>> > > correctly >>>>> > > > by doing >>>>> > > > >>>>> > > > conf = HBaseConfiguration.addHbaseResources(super.getConf()); >>>>> > > > >>>>> > > > and this conf also didn't pick up the expected properties >>>>> > > > >>>>> > > > >>>>> > > > On Wed, Feb 20, 2019 at 3:56 PM Xiaoxiao Wang < >>>>> xxw...@23andme.com> >>>>> > > wrote: >>>>> > > > >>>>> > > > > Pedro >>>>> > > > > >>>>> > > > > thanks for your info, yes, I have tried both >>>>> > > > > HADOOP_CLASSPATH=/etc/hbase/conf/hbase-site.xml and >>>>> > > > > HADOOP_CLASSPATH=/etc/hbase/conf/ (without file), and yes >>>>> checked >>>>> > > > > hadoop-env.sh as well to make sure it did >>>>> > > > > HADOOP_CLASSPATH=$HADOOP_CLASSPATH:/others >>>>> > > > > >>>>> > > > > And also for your second question, it is indeed a map reduce >>>>> job, and >>>>> > > it >>>>> > > > > is trying to query phoenix from map function! (and we make >>>>> sure all >>>>> > the >>>>> > > > > nodes have hbase-site.xml installed properly ) >>>>> > > > > >>>>> > > > > thanks >>>>> > > > > >>>>> > > > > On Wed, Feb 20, 2019 at 3:53 PM Pedro Boado < >>>>> pedro.bo...@gmail.com> >>>>> > > > wrote: >>>>> > > > > >>>>> > > > >> Your classpath variable should be pointing to the folder >>>>> containing >>>>> > > your >>>>> > > > >> hbase-site.xml and not directly to the file. >>>>> > > > >> >>>>> > > > >> But certain distributions tend to override that envvar inside >>>>> > > > >> hadoop-env.sh >>>>> > > > >> or hadoop.sh . >>>>> > > > >> >>>>> > > > >> Out of curiosity, have you written a map-reduce application >>>>> and are >>>>> > > you >>>>> > > > >> querying phoenix from map functions? >>>>> > > > >> >>>>> > > > >> On Wed, 20 Feb 2019, 23:34 Xiaoxiao Wang, >>>>> > <xxw...@23andme.com.invalid >>>>> > > > >>>>> > > > >> wrote: >>>>> > > > >> >>>>> > > > >> > HI Pedro >>>>> > > > >> > >>>>> > > > >> > thanks for your help, I think we know that we need to set >>>>> the >>>>> > > > classpath >>>>> > > > >> to >>>>> > > > >> > the hadoop program, and what we tried was >>>>> > > > >> > HADOOP_CLASSPATH=/etc/hbase/conf/hbase-site.xml hadoop jar >>>>> > $test_jar >>>>> > > > >> but it >>>>> > > > >> > didn't work >>>>> > > > >> > So we are wondering if anything we did wrong? >>>>> > > > >> > >>>>> > > > >> > On Wed, Feb 20, 2019 at 3:24 PM Pedro Boado < >>>>> pbo...@apache.org> >>>>> > > > wrote: >>>>> > > > >> > >>>>> > > > >> > > Hi, >>>>> > > > >> > > >>>>> > > > >> > > How many concurrent client connections are we talking >>>>> about? You >>>>> > > > >> might be >>>>> > > > >> > > opening more connections than the RS can handle ( under >>>>> these >>>>> > > > >> > circumstances >>>>> > > > >> > > most of the client threads would end exhausting their >>>>> retry >>>>> > count >>>>> > > ) >>>>> > > > . >>>>> > > > >> I >>>>> > > > >> > > would bet that you've get a bottleneck in the RS keeping >>>>> > > > >> SYSTEM.CATALOG >>>>> > > > >> > > table (this was an issue in 4.7 ) as every new connection >>>>> would >>>>> > be >>>>> > > > >> > querying >>>>> > > > >> > > this table first. >>>>> > > > >> > > >>>>> > > > >> > > Try to update to our cloudera-compatible parcels instead >>>>> of >>>>> > using >>>>> > > > >> clabs - >>>>> > > > >> > > which are discontinued by Cloudera and not supported by >>>>> the >>>>> > Apache >>>>> > > > >> > Phoenix >>>>> > > > >> > > project - . >>>>> > > > >> > > >>>>> > > > >> > > Once updated to phoenix 4.14 you should be able to use >>>>> > > > >> > > UPDATE_CACHE_FREQUENCY >>>>> > > > >> > > property in order to reduce pressure on system tables. >>>>> > > > >> > > >>>>> > > > >> > > Adding an hbase-site.xml with the required properties to >>>>> the >>>>> > > client >>>>> > > > >> > > application classpath should just work. >>>>> > > > >> > > >>>>> > > > >> > > I hope it helps. >>>>> > > > >> > > >>>>> > > > >> > > On Wed, 20 Feb 2019, 22:50 Xiaoxiao Wang, >>>>> > > > <xxw...@23andme.com.invalid >>>>> > > > >> > >>>>> > > > >> > > wrote: >>>>> > > > >> > > >>>>> > > > >> > > > Hi, who may help >>>>> > > > >> > > > >>>>> > > > >> > > > We are running a Hadoop application that needs to use >>>>> phoenix >>>>> > > JDBC >>>>> > > > >> > > > connection from the workers. >>>>> > > > >> > > > The connection works, but when too many connection >>>>> established >>>>> > > at >>>>> > > > >> the >>>>> > > > >> > > same >>>>> > > > >> > > > time, it throws RPC timeouts >>>>> > > > >> > > > >>>>> > > > >> > > > Error: java.io.IOException: >>>>> > > > >> > > > org.apache.phoenix.exception.PhoenixIOException: Failed >>>>> after >>>>> > > > >> > > attempts=36, >>>>> > > > >> > > > exceptions: Wed Feb 20 20:02:43 UTC 2019, null, >>>>> java.net >>>>> > > > >> > > .SocketTimeoutException: >>>>> > > > >> > > > callTimeout=60000, callDuration=60506. ... >>>>> > > > >> > > > >>>>> > > > >> > > > So we have figured we should probably set a higher >>>>> > > > >> hbase.rpc.timeout >>>>> > > > >> > > > value, but then it comes to the issue: >>>>> > > > >> > > > >>>>> > > > >> > > > A little bit background on how we run the application >>>>> > > > >> > > > >>>>> > > > >> > > > Here is how we get PhoenixConnection from java program >>>>> > > > >> > > > DriverManager.getConnection("jdbc:phoenix:host", props) >>>>> > > > >> > > > And we trigger the program by using >>>>> > > > >> > > > hadoop jar $test_jar >>>>> > > > >> > > > >>>>> > > > >> > > > >>>>> > > > >> > > > We have tried multiple approaches to load hbase/phoenix >>>>> > > > >> configuration, >>>>> > > > >> > > but >>>>> > > > >> > > > none of them get respected by PhoenixConnection, here >>>>> are the >>>>> > > > >> methods >>>>> > > > >> > we >>>>> > > > >> > > > tried >>>>> > > > >> > > > * Pass hbase_conf_dir through HADOOP_CLASSPATH, so run >>>>> the >>>>> > > hadoop >>>>> > > > >> > > > application like HADOOP_CLASSPATH=/etc/hbase/conf/ >>>>> hadoop jar >>>>> > > > >> > $test_jar . >>>>> > > > >> > > > However, PhoenixConnection doesn’t respect the >>>>> parameters >>>>> > > > >> > > > * Tried passing -Dhbase.rpc.timeout=1800, which is >>>>> picked up >>>>> > by >>>>> > > > >> hbase >>>>> > > > >> > > conf >>>>> > > > >> > > > object, but not PhoniexConnection >>>>> > > > >> > > > * Explicitly set those parameters and pass them to the >>>>> > > > >> > PhoenixConnection >>>>> > > > >> > > > props.setProperty("hbase.rpc.timeout", "1800"); >>>>> > > > >> > > > props.setProperty(“phoenix.query.timeoutMs", "1800"); >>>>> > > > >> > > > Also didn’t get respected by PhoenixConnection >>>>> > > > >> > > > * also tried what is suggested by phoenix here >>>>> > > > >> > > > https://phoenix.apache.org/#connStr , use :longRunning >>>>> > together >>>>> > > > >> with >>>>> > > > >> > > > those properties, still didn’t seem to work >>>>> > > > >> > > > >>>>> > > > >> > > > >>>>> > > > >> > > > Besides all those approaches we tried, I have explicitly >>>>> > output >>>>> > > > >> those >>>>> > > > >> > > > parameters we care from the connection, >>>>> > > > >> > > > connection.getQueryServices().getProps() >>>>> > > > >> > > > The default values I got are 60000 for >>>>> hbase.rpc.timeout, and >>>>> > > 600k >>>>> > > > >> for >>>>> > > > >> > > > phoenix.query.timeoutMs , so I have tried to run a >>>>> query lthat >>>>> > > > would >>>>> > > > >> > run >>>>> > > > >> > > > longer than 10 mins, Ideally it should timeout, >>>>> however, it >>>>> > runs >>>>> > > > >> over >>>>> > > > >> > 20 >>>>> > > > >> > > > mins and didn’t timeout. So I’m wondering how >>>>> > PhoenixConnection >>>>> > > > >> respect >>>>> > > > >> > > > those properties? >>>>> > > > >> > > > >>>>> > > > >> > > > >>>>> > > > >> > > > So with some of your help, we’d like to know if there’s >>>>> any >>>>> > > thing >>>>> > > > >> wrong >>>>> > > > >> > > > with our approaches. And we’d like to get rid of those >>>>> > > > >> > > SocketTimeExceptions. >>>>> > > > >> > > > We are using phoenix-core version is >>>>> 4.7.0-clabs-phoenix1.3.0 >>>>> > , >>>>> > > > and >>>>> > > > >> our >>>>> > > > >> > > > phoenix-client version is >>>>> phoenix-4.7.0-clabs-phoenix1.3.0.23 >>>>> > > (we >>>>> > > > >> have >>>>> > > > >> > > > tried phoenix-4.14.0-HBase-1.3 as well, which didn’t >>>>> work >>>>> > > either). >>>>> > > > >> > > > >>>>> > > > >> > > > >>>>> > > > >> > > > Thanks for your time >>>>> > > > >> > > > >>>>> > > > >> > > > >>>>> > > > >> > > > >>>>> > > > >> > > > >>>>> > > > >> > > > >>>>> > > > >> > > >>>>> > > > >> > >>>>> > > > >> >>>>> > > > > >>>>> > > > >>>>> > > >>>>> > >>>>> >>>>