查询hive,返回结果
将返回结果放到spark rdd
例如:
JavaSparkContext sc = new JavaSparkContext(conf)
List<Integer>data = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
JavaRDD<Integer>distData = sc.parallelize(data)
其中data可以视为从hive查询得到
这里所说的在Java中执行Hive命令或HiveQL并不是指HiveClient通过JDBC的方式连接HiveServer(or
HiveServer2)执行查询,而是简单的在部署了HiveServer的服务器上执行Hive命令。当然这是一个简单的事情,平常我们通过Hive做简单的数据分析实验的时候,都是直接进入Hive执行HiveQL
通过进入Hive执行HiveQL,只能将分析结果打印到屏幕或是存入临时表,如果想把分析结果写入文件,或者对分析结果做进一步的分析,用程序做分析,就是为什么要在Java中执行Hive命令。
Java在1.5过后提供了ProcessBuilder根据运行时环境启动一个Process调用执行运行时环境下的命令或应用程序(1.5以前使用Runtime),关于ProcessBuilder请参考Java相关文档。调用代码如下:
String
sql="show
tables
select
*
from
test_tb
limit
10"
List<String>
command
=
new
ArrayList<String>()
command.add("hive")
command.add("-e")
command.add(sql)
List<String>
results
=
new
ArrayList<String>()
ProcessBuilder
hiveProcessBuilder
=
new
ProcessBuilder(command)
hiveProcess
=
hiveProcessBuilder.start()
BufferedReader
br
=
new
BufferedReader(new
InputStreamReader(
hiveProcess.getInputStream()))
String
data
=
null
while
((data
=
br.readLine())
!=
null)
{
results.add(data)
}其中command可以是其它Hive命令,不一定是HiveQL。
try {Class.forName("org.apache.hadoop.hive.jdbc.HiveDriver")
String selectSql = "select * from db.data where address = '11111111'"
Connection connect = DriverManager.getConnection("jdbc:hive://192.168.xx.xx:10000/db", "xxx", "xxx")
PreparedStatement state = null
state = connect.prepareStatement(selectSql)
ResultSet resultSet = state.executeQuery()
while (resultSet != null &&resultSet.next()) {
System.out.println(resultSet.getString(1) + " " + resultSet.getString(2))
}
} catch (Exception e) {
e.printStackTrace()
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)