1、Impala介绍
Impala是大数据实时查询分析引擎。直接使用Hive的元数据库Metadata,意味着impala元数据都存储在Hive的metastore中。并且impala兼容Hive的sql解析,实现了Hive的SQL语义的子集,
也就是说hive活着,impala才能存在,否则随着消失。
2、Impala特点
- 基于内存进行计算,能够对PB级数据进行交互式实时查询/分析;
- 无需转换为MR,直接读取HDFS数据
- C++编写,LLVM统一编译运行
- 兼容HiveSQL
- 具有数据仓库的特性,可对hive数据直接做数据分析
- 支持Data Local
- 支持列式存储
- 支持JDBC/ODBC远程访问
3、连接imapla代码
public static void main(String[] args) {
SparkSession spark = SparkSession.builder()
.appName("Simple Application")
.master("local[*]")
.getOrCreate();
String impalaUrl = "jdbc:impala://xx.xx.xx.xx:21050/rawdata;UseNativeQuery=1";
String hdfsUrl = "";
String envName = "uat";
String impalaDriver = "com.cloudera.impala.jdbc41.Driver";
Dataset<Row> events = spark.read().format("jdbc")
.option("url", impalaUrl)
.option("driver", impalaDriver)
.option("dbtable", "(/*SA(" + envName + ")*/ SELECT * FROM events limit 10) a ").load();
Dataset<Row> users = spark.read().format("jdbc")
.option("url", impalaUrl)
.option("driver", impalaDriver)
.option("dbtable", "(/*SA(" + envName + ")*/ SELECT * FROM users limit 10) a ").load();
//显示部分字段
users.select(users.col("second_id"),users.col("agt_nm")).show();
//显示全表
users.show();
events.show();
//转换成JSon
List<Row> e = (List<Row>)events.collectAsList();
Map<String,Object> resultMap = new HashMap<>();
List<Map<String, Object>> list = new ArrayList<>();
JSONObject jsonObject;
for (Row r : e){
Map<String, Object> map = new HashMap<>();
map.put("event", r.get(0));
map.put("user_id", r.get(1));
list.add(map);
}
resultMap.put("result",list);
jsonObject = JSONObject.fromObject(resultMap);
System.out.println("Json字符串"+jsonObject);
spark.close();
}
执行结果如下: