无法执行配置单元脚本

8yparm6h  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(421)

我已经安装了单节点集群hadoop和hive。我能够加载数据并在Hive中显示它。我想执行一个创建临时函数的脚本。我需要添加jar文件。jar文件是add esri-geometry-api.jar spatial-sdk-hive-1.0-modified.jar和hiveudfs.jar
我提到:如何在hive中编写脚本文件?我得到这个错误:esri-geometry-api.jar不存在
我的配置详细信息:

  1. $ echo $HADOOP_HOME:/home/hduser/hadoop-1.2.1
  2. $ echo $JAVA_HOME:/usr/lib/java/jdk1.7.0_55
  3. $ echo $:HIVE_HOME:/home/hduser/hadoop-1.2.1/hive-0.9.0-bin
  4. java version "1.7.0_55"
  5. Java(TM) SE Runtime Environment (build 1.7.0_55-b13)
  6. Java HotSpot(TM) 64-Bit Server VM (build 24.55-b03, mixed mode)

hadoop版本:

  1. Hadoop 1.2.1
  2. Subversion https://svn.apache.org/repos/asf/hadoop/common/branches/branch-1.2 -r 1503152
  3. Compiled by mattf on Mon Jul 22 15:23:09 PDT 2013
  4. From source with checksum 6923c86528809c4e7e6f493b6b413a9a
  5. This command was run using /home/hduser/hadoop-1.2.1/hadoop-core-1.2.1.jar
  6. HIVE VERSION: hive-0.9.0
  7. hduser@ubuntu:~$ echo $HIVE_HOME
  8. /home/hduser/hadoop-1.2.1/hive-0.9.0-bin

我有一个配置单元脚本,我需要执行如下:我有一个数据,它的纬度经度间隔为5秒。

  1. add jar esri-geometry-api.jar spatial-sdk-hive-1.0-MODIFIED.jar HiveUDFs.jar;
  2. create temporary function ST_AsText as 'com.esri.hadoop.hive.ST_AsText';
  3. create temporary function ST_Intersects as 'com.esri.hadoop.hive.ST_Intersects';
  4. create temporary function ST_Length as 'com.esri.hadoop.hive.ST_Length';
  5. create temporary function ST_LineString as 'com.esri.hadoop.hive.ST_LineString';
  6. create temporary function ST_Point as 'com.esri.hadoop.hive.ST_Point';
  7. create temporary function ST_Polygon as 'com.esri.hadoop.hive.ST_Polygon';
  8. create temporary function ST_SetSRID as 'com.esri.hadoop.hive.ST_SetSRID';
  9. create temporary function collect_array as 'com.zombo.GenericUDAFCollectArray';
  10. SELECT
  11. id,
  12. unix_timestamp(dt) - unix_timestamp(fv)
  13. FROM (
  14. SELECT
  15. id, dt, fv
  16. FROM (
  17. SELECT
  18. id, dt,
  19. FIRST_VALUE(dt) OVER (PARTITION BY id ORDER BY dt) as fv,
  20. ROW_NUMBER() OVER (PARTITION BY id ORDER BY dt DESC) as lastrk
  21. FROM
  22. uber
  23. ) sub1
  24. WHERE
  25. lastrk = 1
  26. ) sub2
  27. WHERE
  28. (unix_timestamp(dt) - unix_timestamp(fv)) < 28800;

我的问题如下:
我是否需要在运行hive之前启动hadoop服务,因为我观察到我可以直接运行hive而不启动hadoop服务。如果是的话,那么hadoop的意义是什么?我如何将它用于hive?
当我尝试手动添加jar时,会出现以下错误:hive>addjar esri-geometry-api.jar/home/hduser/hadoop\u jar;esri-geometry-api.jar不存在
配置单元>添加jar esri-geometry-api.jar;esri-geometry-api.jar不存在
我还添加了hive-site.xml,如下所示:

  1. <configuration>
  2. <property>
  3. <name>hive.aux.jars.path</name>
  4. <value>file:///home/hduser/hadoop_jar/HIVEUDFs.jar,
  5. file:///home/hduser/hadoop_jar/esri-geometry-api-1.0.jar,
  6. file:///home/hduser/hadoop_jar/spatial-sdk-json-1.0.1-sources.jar</value>
  7. </property>
  8. </configuration>

我将jar文件添加到hadoop文件夹中hive目录的lib文件夹中。
当我尝试运行脚本时:
hduser@ubuntu:~/querys$hive querys.hive
警告:org.apache.hadoop.metrics.jvm.eventcounter已弃用。请在所有log4j.properties文件中使用org.apache.hadoop.log.metrics.eventcounter。使用中的配置初始化日志记录jar:file:/home/hduser/hadoop-1.2.1/hive-0.9.0-bin/lib/hive-common-0.9.0.jar/hive-log4j.properties配置单元历史文件=/tmp/hduser/hive\u job\u log\u hduser\u 201404290234\u 597714109.txt
Hive>
当我发布列表jar时;它给出的命令:file:/home/hduser/hadoop-1.2.1/hive-0.9.0-bin/lib/hive-builtins-0.9.0.jar
我需要执行脚本。请帮忙。

s71maibg

s71maibg1#

无法执行脚本的原因是缺少-f选项按如下方式执行脚本:

  1. hduser@ubuntu:~/queries$ hive -f queries.hive

因为hive在内部使用hadoop保存数据,mapreduce执行。hadoop服务应该在执行配置单元命令时启动。
在addjar语句中,应该指定jar的完整路径,每个jar应该分别指定,如下所示

  1. add jar <PATH_TO_JAR>/esri-geometry-api.jar;
  2. add jar <PATH_TO_JAR>/spatial-sdk-hive-1.0-MODIFIED.jar;
  3. add jar <PATH_TO_JAR>/HiveUDFs.jar;

相关问题