HP has shipped the wrong version of vertica-hcatalogudl.jar with the product.
When I execute this line
create or replace library public.VHCatalogLib as
'/opt/vertica/packages/hcat/lib2/vertica-hcatalogudl.jar'
DEPENDS '/opt/vertica/packages/hcat/lib/*.*' language 'java';
I can see that the library file creates the following objects in vertica
SELECT * FROM USER_LIBRARY_MANIFEST WHERE lib_name = 'VHCatalogLib';
schema_name | lib_name | lib_oid | obj_name | obj_type | arg_types | return_type
-------------+--------------+-------------------+--------------------------------------------------+-----------------+-----------+-------------
public | VHCatalogLib | 45035996371219906 | com.vertica.hcatalogudl.WebHCatConfLoaderFactory | Scalar Function | | Varchar
(1 row)
But when you look at the code of the VERTICA HCATALOG CONNECTION install.sql it tries 3 objects
CREATE SOURCE public.VHCatSource as LANGUAGE 'java' name 'com.vertica.hcatalogudl.HCatalogSplitsNoOpSourceFactory' library public.VHCatalogLib;
GRANT EXECUTE ON SOURCE public.VHCatSource() TO PUBLIC;
CREATE PARSER public.VHCatParser as LANGUAGE 'java' name 'com.vertica.hcatalogudl.HCatalogSplitsParserFactory' library public.VHCatalogLib;
GRANT EXECUTE ON PARSER public.VHCatParser() TO PUBLIC;
CREATE FUNCTION get_webhcat_host as LANGUAGE 'java' name 'com.vertica.hcatalogudl.WebHCatConfLoaderFactory' library public.VHCatalogLib;
But as you can see clearly.... that the library file never installed the 2 objects this script is looking for
- com.vertica.hcatalogudl.HCatalogSplitsNoOpSourceFactory
- com.vertica.hcatalogudl.HCatalogSplitsParserFactory
This is why the internet is filled with error message
1. Couldn't instantiate class com.vertica.hcatalogudl.HCatalogSplitsNoOpSourceFactory
2. Couldn't instantiate class com.vertica.hcatalogudl.HCatalogSplitsParserFactory
The reason is that these objects are not installed by the library but the create source and create parser commands depend on it.
The reason why the library doesn't contain it is because we have the wrong vertica-hcatalogudl.jar
Comments
Hi, which version of Vertica are you currently running? Can you run uninstall.sql first then run install.sql again to see if this issue can be resolved? I think the problem is for creating VHCatSource and VHCatParser the install.sql is not using CREATE OR REPLACE, which should be fixed. Thanks.
I am running 7.1.2 I have run uninstall.sql more than 10 times.
I am very sure that the vertica-hcataloggudl.jar does not have all the code which is needed by install.sql
because install.sql is loading 3 extensions.. but the gudl.jar only has 1.
Can you please contact the actual vertica team... let them confirm if version 7.1.2 gudl.jar and install.sql
Another possiblility is that you have not copied the Hadoop/Hive jars to the vertica/packages/hcat/lib directory yet. There is some good information here about how to copy and verify your jar files:
http://my.vertica.com/docs/7.2.x/HTML/index.htm#Authoring/HadoopIntegrationGuide/HCatalogConnector/ConfiguringVerticaForHCatalog.htm%3FTocPath%3DIntegrating%2520with%2520Apache%2520Hadoop|Using%2520the%2520HCatalog%2520Connector|_____5
I found that, if I tried to run install.sql without copying the jar files first, I received a similar message (see below). After copying, it worked as expected. I think this is just a deceptive error message.
release=> \i install.sql
vsql:install.sql:13: NOTICE 6733: Did not find any configuration files in dependency paths /opt/vertica/packages/hcat/lib/*.*
CREATE LIBRARY
vsql:install.sql:16: ROLLBACK 3399: Failure in UDx RPC call InvokeGetUdxType(): Error in User Defined Object [VHCatSource], error code: 0
Couldn't instantiate class com.vertica.hcatalogudl.HCatalogSplitsNoOpSourceFactory
vsql:install.sql:17: ROLLBACK 2059: Source with specified name and parameters does not exist: VHCatSource
vsql:install.sql:18: ROLLBACK 3399: Failure in UDx RPC call InvokeGetUdxType(): Error in User Defined Object [VHCatParser], error code: 0
Couldn't instantiate class com.vertica.hcatalogudl.HCatalogSplitsParserFactory
Hi, it does seem as Kevin described. You probably did not copy all the required jars to your lib directory. Have you run hcatUtil -v --hcatLibPath=/path/to/jars to verify that you have all the jars in place? If everything is correct, you will find as following query returns:
vsql=> SELECT * FROM USER_LIBRARY_MANIFEST WHERE lib_name = 'VHCatalogLib';
schema_name | lib_name | lib_oid | obj_name | obj_type | arg_types | return_type
-------------+--------------+-------------------+---------------------------------------------------------+----------------------+-----------+-------------
public | VHCatalogLib | 45035996273738062 | com.vertica.hcatalogudl.HCatalogSplitsParserFactory | Load Parser Function | |
public | VHCatalogLib | 45035996273738062 | com.vertica.hcatalogudl.HCatalogSplitsNoOpSourceFactory | Load Source Function | |
public | VHCatalogLib | 45035996273738062 | com.vertica.hcatalogudl.WebHCatConfLoaderFactory | Scalar Function | | Varchar
(3 rows)
Note in your result it only has one of the three, which indicates that HCatalogSplitsParserFactory and HCatalogSplitsNoOpSourceFactory is not correctly installed.
Hadoop jars are not responsible for installing the vertica modules. ONLY the vertica-hcatalogudl.jar contains the code for the 3 modules. and they are deployed like this
Anyway I have copied all the jars and below is the output of the hcatUtil verify. It very clearly says that it has everything it needs.
By looking at the output above, can you still say that I have not copied the hadoop jars and configuration files correctly?
Once again, Hadoop Jars have nothing to do with the 3 modules. these are purely HP vertica stuff and therefore must be deployed by the vertica-hcatalogudl.jar. the problem is that the version of vertica-hcatalogudl.jar which is shipped with vertica 7.1.2 does not contain the 3 modules.
Those jars copied from Hadoop are required to install HCatalog connector library modules. As kevin has shown you above, without those jars you will not be able to install successfully.
I noticed that your vertica-hcatalogudl.jar is under lib2 directory and the dependency jars are set in lib/ directory. Where are the copied jars exactly? I could not tell since you only did hcatUtil -v under hcat/ directory.
Also, could you check UDxFencedProcessesJava.log and see what is the detailed error message?
Here is the output of running hcatUtil
Now do
You see ONLY 1 module is loaded. where are the other 2. Even though I have copied everything from Hadoop (as verified above by hcatUtil) still only 1 module is loaded
PLEASE NOTE THAT THE OUTPUT FOR VERSION 7.2 MIGHT BE DIFFERENT. SO YOU MUST ONLY DO TESTING WITH 7,1.2
Can you do a ls on your lib directory and take the details for vertica-hcatalogudl.jar and put the output in your response?
mine is
-rwxrwxr-x 1 root root 43596 Jul 3 00:55 vertica-hcatalogudl.jar
I also opened the log file sudo -u vertica vi /db/vertica/mydb/v_mydb_node0001_catalog/UDxLogs/UDxFencedProcessesJava.log
and found these 3 lines for today
There is no lib2. see my last post above. (just before your reply). There is no lib2
here is the output of hcatUtil with the lib in path
I see. Thanks for your updates. Do note that these jars are required to install those modules.
Another important question is what Hadoop distro did you copy the jars from? With Vertica 7.1.2 we dropped support for some older hadoop distros.
Also, are you sure the UDx log is the right one? The timestamps look wired. Usually if install fails there will be error messages show up in the UDx java log.
I am using cloudera 5.4.1
I did a search for UDXFencedProcessesJava.log
I am attaching the file with this post.
From log I found these error messages, but they are some days ago:
2015-11-25 04:16:21.953 [Java-31635] 0x0a com.vertica.sdk.UdfException: Couldn't instantiate class com.vertica.hcatalogudl.HCatalogSplitsNoOpSourceFactory
at com.vertica.udxfence.UDxExecContext.findUDXFactoryInLibrary(UDxExecContext.java:386)
at com.vertica.udxfence.UDxExecContext.setupLanguageContext(UDxExecContext.java:459)
at com.vertica.udxfence.UDxExecContext.setupContext(UDxExecContext.java:528)
at com.vertica.udxfence.UDxExecContext.run(UDxExecContext.java:219)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NoClassDefFoundError: org/apache/hcatalog/common/HCatException
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Class.java:2585)
at java.lang.Class.getConstructor0(Class.java:2885)
at java.lang.Class.newInstance(Class.java:350)
at com.vertica.udxfence.UDxExecContext.findUDXFactoryInLibrary(UDxExecContext.java:374)
... 4 more
Caused by: java.lang.ClassNotFoundException: org.apache.hcatalog.common.HCatException
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
... 9 more
The root cause is the HCatalog java udl is looking for "org.apache.hcatalog.common.HCatException", which is the class path before Hive 0.14.
This is the old implementation of HCatalog connector. Which specific vertica version are you using? 7.1.2-x. What is the x? Can you try to upgrade to 7.1.2-3 or later and see that can resolve the issue? Check the Vertica hotfix schedule https://my.vertica.com/docs/ReleaseNotes/7.1.x/HP_Vertica_7.1.x_Release_Notes.htm and look for VER-39674 in 7.1.2-3 release note.
It seems I am running 7.1.2-2
Let me check with the team to see if we can upgrade to 7.1.2-3
OK. Yes you have to upgrade to 7.1.2-3 or higher. And officially, Vertica 7.1.2 only supports CDH5.2 and CDH5.3. 7.2 adds support for CDH5.4.
Thank you so much for your help. it makes sense to me now.
I will work with my team to ensure that we use the right version of vertica.
I appriciate you taking the time throughout this day to reach the root cause of this problem. I appriciate your work and thank you for it.
I will revert on this thread once we have the right version. This might take some time... but I will eventually come back.
Thank you so much.
No problem. Let me know how things go. Thanks.
We upgraded our Vertica instance to Version 7.2 and after the upgrade the installation was succesful.
vertica=> \i install.sql
vsql:install.sql:13: NOTICE 6792: Found Hadoop configuration files in dependency paths. If any of the configuration files is changed, please re-install HCatalog connector library with modified configuration files
CREATE LIBRARY
CREATE SOURCE FUNCTION
GRANT PRIVILEGE
CREATE PARSER FUNCTION
GRANT PRIVILEGE
CREATE FUNCTION
Thank you so much for your help!!!