Spark2.1 Hive Auth Custom Test
- 2017년 현재. 모 빅데이터 프로젝트 운영을 하고있는중.
- 요구사항 : Spark 를 사용하는데 Hive권한 인증을 사용하려한다.
Spark 버전 : 2.1
문제점 :
Spark의 강력한 기능에는 현재 호튼웍스 빅데이터 플랫폼에서 사용하고있는 Spark인증은 찾아봐도 없었다.
Hive Metastore를 쓰기때문에 Custom을 해서 재컴파일하려고 했고.
테스트는 잘되고 .
그 위치만 올려서 나중에 안까먹으려한다.
- Spark Source는 Scala로 되어있다 .
- 일단 Scala를 좀 스스로 Hello World는 찍고나서 아래부분에 기능을 추가함.
SparkSource 위치
sql/hive/src/main/scala/org/apache/spark/sql/hive
파일명 : TableReader.scala
Trait를 참조하는곳이 두군데니까 꼭 두군데를 수정할것
일반 Heap Table 과 Partition Table 을 두가지로 분리해서 소스가 개발되었으니. 두군데 다수정해야한다.
어차피 쓰는용도는 확정이니 난 Hive에 들어있는 권한을 사용하기로 함.
아래는 내가 수정한부분의 일부이다.(이정도면 안까먹을듯)
def makeRDDForTable(
hiveTable: HiveTable,
deserializerClass: Class[_ <: Deserializer],
filterOpt: Option[PathFilter]): RDD[InternalRow] = {
이부분부터 수정을 시작.
var hive_table_nm = hiveTable.getTableName()
val driver = "com.mysql.jdbc.Driver"
val url = "jdbc:mysql://내메타스토어경로/hive?characterEncoding=utf8"
val username = "flashone"
val password = "1234"
val check_query = "SELECT count(*) CNT from TBL_PRIVS A , TBLS B WHERE A.TBL_ID = B.TBL_ID AND B.TBL_NAME = ? and A.GRANTOR = ? "
var connection:Connection = null
var resultSet:ResultSet = null
var stat:PreparedStatement = null
try {
Class.forName(driver)
connection = DriverManager.getConnection(url, username, password)
stat = connection.prepareStatement(check_query)
stat.setString(1,hive_table_nm)
stat.setString(2,hive_user_nm)
resultSet = stat.executeQuery()
while ( resultSet.next() )
{
if ( resultSet.getString("CNT") == "0" ) {
val Npath = new Path("hdfs path")
logInfo(hiveTable.getDataLocation().toString())
hiveTable.setDataLocation(Npath)
throw new Exception("Access Denied")
}
}
} catch {
}
resultSet.close()
stat.close()
connection.close()
https://github.com/ocmpromaster/sparkcustom21
여기서 수정하고있음 ㅋ
Rstudio에서 인증처리하는 모습 :
Custom을일단했으니. Audit도 별문제는 없다.
'OpenSource(Bigdata&distribution&Network) > Spark' 카테고리의 다른 글
[SPARK,KAFKA] spark stream 구성 (0) | 2018.05.29 |
---|---|
[SPARK] scala 에서 데이처 처리한 것들 소스 ( MySQL , ES , Hive , Hbase(phoenix) ) (0) | 2018.01.09 |
spark + cassandra 연동 (0) | 2016.04.08 |
spark + Hbase 연동에러 해결건. (0) | 2016.04.07 |