我正在使用 JDBC 客户端代码连接到配置单元安装。我创建了一个包含两列(column1,column2)的测试表,它们都是字符串类型。当我尝试执行像“select* from test”这样的简单查询时,我在 Java 程序中得到了结果,但是使用 where 子句和其他复杂查询的查询会抛出以下异常。
“查询返回非零代码:1,原因:失败:执行错误,从 org.apache.hadoop.hive.ql.exec.MapRedTask 返回代码 1”
我已经尝试更改存在文件的 hdfs 目录的权限,/tmp 在本地目录上,但这没有用。
这是我的连接代码
Connection con = DriverManager.getConnection("jdbc:hive://"+host+":"+port+"/default", "", "");
Statement stmt = con.createStatement();
executeQuery() 方法抛出错误
检查服务器上的日志给出以下异常:
java.io.IOException:无法初始化集群。请检查您的配置以获取 mapreduce.framework.name 和相应的服务器地址。 在 org.apache.hadoop.mapreduce.Cluster.initialize(Cluster.java:121) 在 org.apache.hadoop.mapreduce.Cluster.(Cluster.java:83) 在 org.apache.hadoop.mapreduce.Cluster.(Cluster.java:76) 在 org.apache.hadoop.mapred.JobClient.init(JobClient.java:478) 在 org.apache.hadoop.mapred.JobClient.(JobClient.java:457) 在 org.apache.hadoop.hive.ql.exec.ExecDriver.execute(ExecDriver.java:426) 在 org.apache.hadoop.hive.ql.exec.MapRedTask.execute(MapRedTask.java:138) 在 org.apache.hadoop.hive.ql.exec.Task.executeTask(Task.java:138) 在 org.apache.hadoop.hive.ql.exec.TaskRunner.runSequential(TaskRunner.java:57) 在 org.apache.hadoop.hive.ql.Driver.launchTask(Driver.java:1374) 在 org.apache.hadoop.hive.ql.Driver.execute(Driver.java:1160) 在 org.apache.hadoop.hive.ql.Driver.run(Driver.java:973) 在 org.apache.hadoop.hive.ql.Driver.run(Driver.java:893) 在 org.apache.hadoop.hive.service.HiveServer$HiveServerHandler.execute(HiveServer.java:198) 在 org.apache.hadoop.hive.service.ThriftHive$Processor$execute.getResult(ThriftHive.java:644) 在 org.apache.hadoop.hive.service.ThriftHive$Processor$execute.getResult(ThriftHive.java:628) 在 org.apache.thrift.ProcessFunction.process(ProcessFunction.java:39) 在 org.apache.thrift.TBaseProcessor.process(TBaseProcessor.java:39) 在 org.apache.thrift.server.TThreadPoolServer$WorkerProcess.run(TThreadPoolServer.java:206) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(未知来源) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(未知来源) 在 java.lang.Thread.run(未知来源) 作业提交失败,出现异常“java.io.IOException(无法初始化集群。请检查您的配置以获取 mapreduce.framework.name 和相应的服务器地址。)”
查询在命令提示符下运行时有效,但在 JDBC 客户端中无效。
我卡在这上面了。任何建议都会有所帮助。
更新
我正在使用 cloudera CDH4 hadoop/hive 发行版。我运行的脚本如下
#!/bin/bash
HADOOP_HOME=/usr/lib/hadoop/client
HIVE_HOME=/usr/lib/hive
echo -e '1\x01foo' > /tmp/a.txt
echo -e '2\x01bar' >> /tmp/a.txt
HADOOP_CORE={{ls $HADOOP_HOME/hadoop*core*.jar}}
CLASSPATH=.:$HADOOP_CORE:$HIVE_HOME/conf
for i in ${HIVE_HOME}/lib/*.jar ; do
CLASSPATH=$CLASSPATH:$i
done
for i in ${HADOOP_HOME}/*.jar ; do
CLASSPATH=$CLASSPATH:$i
done
java -cp $CLASSPATH com.hive.test.HiveConnect
我已将 HADOOP_CORE={{ls $HADOOP_HOME/hadoop-*-core.jar}} 更改为 HADOOP_CORE={{ls $HADOOP_HOME/hadoop*core*.jar}} 因为我的 hadoop_home 中没有以 hadoop- 开头并以 -core.jar 结尾的 jar 文件。这个对吗?同样运行脚本会出现以下错误
/usr/lib/hadoop/client/hadoop*core*.jar}}: 没有那个文件或目录
我还修改了脚本以将 hadoop 客户端 jar 添加到类路径,因为脚本抛出了找不到 hadoop fileReader 的错误。所以我也添加了以下内容。 我在 ${HADOOP_HOME}/*.jar 中;做 类路径=$类路径:$i 完成
这将执行类文件并运行查询“select * from test”但在“select column1 from test”上失败。
仍然没有成功,同样的错误。
最佳答案
既然它在 hive shell 上运行良好,你能检查你运行 hive shell 的用户和 java 程序(使用 JDBC)是否相同吗?
接下来,启动 Thrift 服务器 cd 到配置单元所在的位置 - 发出这个命令 -
bin/hive --service hiveserver &
你应该看到 -
Starting Hive Thrift Server
确保 HiveServer 正在运行的一种快速方法是使用 netstat 命令确定端口 10,000 是否打开并监听连接:
netstat -nl | grep 10000
tcp 0 0 :::10000 :::* LISTEN
接下来,创建一个名为 myhivetest.sh 的文件并将以下内容放入其中
并根据您的要求替换 HADOOP_HOME、HIVE_HOME 和 package.youMainClass-
#!/bin/bash
HADOOP_HOME=/your/path/to/hadoop
HIVE_HOME=/your/path/to/hive
echo -e '1\x01foo' > /tmp/a.txt
echo -e '2\x01bar' >> /tmp/a.txt
HADOOP_CORE={{ls $HADOOP_HOME/hadoop-*-core.jar}}
CLASSPATH=.:$HADOOP_CORE:$HIVE_HOME/conf
for i in ${HIVE_HOME}/lib/*.jar ; do
CLASSPATH=$CLASSPATH:$i
done
java -cp $CLASSPATH package.youMainClass
保存 myhivetest.sh 并执行 chmod +x myhivetest.sh。您可以使用 ./myhivetest.sh 运行 bash 脚本,这将在调用您的配置单元程序之前构建您的类路径。
请关注instruction here了解详情。 有嵌入式模式和独立模式两种方式。 您应该寻找独立模式。
供您引用: Hive 不是类似于 MySQL、Oracle 和 Teradata 等 DBMS 的广泛查询引擎。 Hive 对您可以进行的复杂查询的范围有限制,比如非常复杂的连接等。 当您进行查询时,Hive 会运行 Hadoop MapReduce 作业。
Check this tutorial支持哪些类型的查询,哪些不支持。
希望这对您有所帮助。
关于jdbc - Hive JDBC 客户端抛出 SQLException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17500114/
我早就知道Ruby中的“常量”(即大写的变量名)不是真正常量。与其他编程语言一样,对对象的引用是唯一存储在变量/常量中的东西。(侧边栏:Ruby确实具有“卡住”引用对象不被修改的功能,据我所知,许多其他语言都没有提供这种功能。)所以这是我的问题:当您将一个值重新分配给常量时,您会收到如下警告:>>FOO='bar'=>"bar">>FOO='baz'(irb):2:warning:alreadyinitializedconstantFOO=>"baz"有没有办法强制Ruby抛出异常而不是打印警告?很难弄清楚为什么有时会发生重新分配。 最佳答案
在尝试实现应用auto_orient的过程之后!对于我的图片,我收到此错误:ArgumentError(noimagesinthisimagelist):app/uploaders/image_uploader.rb:36:in`fix_exif_rotation'app/controllers/posts_controller.rb:12:in`create'Carrierwave在没有进程的情况下工作正常,但在添加进程后尝试上传图像时抛出错误。流程如下:process:fix_exif_rotationdeffix_exif_rotationmanipulate!do|image|
我想在Ruby的TCPServer中获取客户端的IP地址。以及(如果可能的话)MAC地址。例如,Ruby中的时间服务器,请参阅评论。tcpserver=TCPServer.new("",80)iftcpserverputs"Listening"loopdosocket=tcpserver.acceptifsocketThread.newdoputs"Connectedfrom"+#HERE!HowcanigettheIPAddressfromtheclient?socket.write(Time.now.to_s)socket.closeendendendend非常感谢!
我有一个模型User,它在创建后的回调中创建了选项#Userhas_one:user_optionsafter_create:create_optionsprivatedefcreate_optionsUserOptions.create(user:self)end我对此有一些简单的Rspec覆盖:describe"newuser"doit"createsuser_optionsaftertheuseriscreated"douser=create(:user)user.user_options.shouldbe_kind_of(UserOptions)endend一切正常,直到我将自
我正在尝试使用RubyEventMachine访问使用SSL证书身份验证的HTTPSWeb服务,但我没有让它工作。我编写了以下简单代码块来对其进行端到端测试:require'rubygems'require'em-http'EventMachine.rundourl='https://foobar.com/'ssl_opts={:private_key_file=>'/tmp/private.key',:cert_chain_file=>'/tmp/ca.pem',:verify_peer=>false}http=EventMachine::HttpRequest.new(url).g
我正在为需要与API建立SSL连接的客户端开发应用程序。我得到了三个文件;一个信任根证书(.cer)文件、一个中间证书(.cer)文件和一个签名的响应文件。我得到的安装说明与IIS或Javakeytool程序有关;我正在用RubyonRails构建应用程序,所以这两种方法都不是一个选项(据我所知)。证书由运行API服务的组织自签名,看来我获得了客户端证书以相互验证https连接。我不确定如何使用我的应用程序中的证书连接和使用API签名响应文件的作用我读过"Usingaself-signedcertificate"和thisarticleonOpenSSLinRuby但两者似乎都不是很到
我在RubyonRails4.1.4上有一个项目,使用来自git://github.com/activeadmin/activeadmin的activeadmin1.0.0.pre,pg0.17.1,PostgreSQL9.3在项目中我有这些模型:类用户has_one:账户类账户属于:用户有很多:project_accountshas_many:项目,:through=>:project_accounts类项目#该项目有一个bool属性'archive'has_many:project_accounts类ProjectAccount属于:帐户属于:项目我有一个任务是在索引页面上实现一个
我正在努力在Ruby中创建启用SSL的服务器,以及与服务器一起使用的相应Ruby客户端。为了进行测试,我使用以下命令创建了自己的根CA证书。$:~/devel/ssl-test/ssl/CA$opensslgenrsa-outTestCA.key2048GeneratingRSAprivatekey,2048bitlongmodulus............+++...........................+++eis65537(0x10001)$:~/devel/ssl-test/ssl/CA$opensslreq-new-keyTestCA.key-outTestCA.
我正在尝试编写这样的代码:assert_throws(:ExtractionFailed){unit.extract_from('5x2005')}ExtractionFailed是Exception的一个简单子(monad)类,在test/unit下,我试图断言它在我调用unit.extract_from(...坏数据...)我已经将ExtractionFailed移动到SemanticText模块中,所以现在test/unit说:expectedtobethrownbutwasthrown.我尝试编写assert_throws(:SemanticText::ExtractionFa
我无法向自己解释的简单代码:putsaifa=1这导致warning:found=inconditional,shouldbe==NameError:undefinedlocalvariableormethod'a'formain:Object不过,现在检查a我们可以看到,它已被定义:a#=>1尽管抛出异常,为什么a仍被分配给1?来自docs:Theconfusioncomesfromtheout-of-orderexecutionoftheexpression.Firstthelocalvariableisassigned-tothenyouattempttocallanonexis